Home | History | Annotate | Download | only in win
      1 /*
      2  * Copyright (C) 2005, 2006, 2007 Apple Inc.  All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *
      8  * 1.  Redistributions of source code must retain the above copyright
      9  *     notice, this list of conditions and the following disclaimer.
     10  * 2.  Redistributions in binary form must reproduce the above copyright
     11  *     notice, this list of conditions and the following disclaimer in the
     12  *     documentation and/or other materials provided with the distribution.
     13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
     14  *     its contributors may be used to endorse or promote products derived
     15  *     from this software without specific prior written permission.
     16  *
     17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 #ifndef UIDelegate_h
     30 #define UIDelegate_h
     31 
     32 #include <WebCore/COMPtr.h>
     33 #include <WebKit/WebKit.h>
     34 #include <wtf/OwnPtr.h>
     35 #include <windef.h>
     36 
     37 class DRTUndoManager;
     38 class DRTDesktopNotificationPresenter;
     39 
     40 class UIDelegate : public IWebUIDelegate2, IWebUIDelegatePrivate3 {
     41 public:
     42     UIDelegate();
     43 
     44     void resetUndoManager();
     45 
     46     // IUnknown
     47     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
     48     virtual ULONG STDMETHODCALLTYPE AddRef(void);
     49     virtual ULONG STDMETHODCALLTYPE Release(void);
     50 
     51     // IWebUIDelegate
     52     virtual HRESULT STDMETHODCALLTYPE createWebViewWithRequest(
     53         /* [in] */ IWebView *sender,
     54         /* [in] */ IWebURLRequest *request,
     55         /* [retval][out] */ IWebView **newWebView);
     56 
     57     virtual HRESULT STDMETHODCALLTYPE webViewShow(
     58         /* [in] */ IWebView *sender) { return E_NOTIMPL; }
     59 
     60     virtual HRESULT STDMETHODCALLTYPE webViewClose(
     61         /* [in] */ IWebView *sender);
     62 
     63     virtual HRESULT STDMETHODCALLTYPE webViewFocus(
     64         /* [in] */ IWebView *sender);
     65 
     66     virtual HRESULT STDMETHODCALLTYPE webViewUnfocus(
     67         /* [in] */ IWebView *sender);
     68 
     69     virtual HRESULT STDMETHODCALLTYPE webViewFirstResponder(
     70         /* [in] */ IWebView *sender,
     71         /* [retval][out] */ OLE_HANDLE *responder) { return E_NOTIMPL; }
     72 
     73     virtual HRESULT STDMETHODCALLTYPE makeFirstResponder(
     74         /* [in] */ IWebView *sender,
     75         /* [in] */ OLE_HANDLE responder) { return E_NOTIMPL; }
     76 
     77     virtual HRESULT STDMETHODCALLTYPE setStatusText(
     78         /* [in] */ IWebView *sender,
     79         /* [in] */ BSTR text);
     80 
     81     virtual HRESULT STDMETHODCALLTYPE webViewStatusText(
     82         /* [in] */ IWebView *sender,
     83         /* [retval][out] */ BSTR *text) { return E_NOTIMPL; }
     84 
     85     virtual HRESULT STDMETHODCALLTYPE webViewAreToolbarsVisible(
     86         /* [in] */ IWebView *sender,
     87         /* [retval][out] */ BOOL *visible) { return E_NOTIMPL; }
     88 
     89     virtual HRESULT STDMETHODCALLTYPE setToolbarsVisible(
     90         /* [in] */ IWebView *sender,
     91         /* [in] */ BOOL visible) { return E_NOTIMPL; }
     92 
     93     virtual HRESULT STDMETHODCALLTYPE webViewIsStatusBarVisible(
     94         /* [in] */ IWebView *sender,
     95         /* [retval][out] */ BOOL *visible) { return E_NOTIMPL; }
     96 
     97     virtual HRESULT STDMETHODCALLTYPE setStatusBarVisible(
     98         /* [in] */ IWebView *sender,
     99         /* [in] */ BOOL visible) { return E_NOTIMPL; }
    100 
    101     virtual HRESULT STDMETHODCALLTYPE webViewIsResizable(
    102         /* [in] */ IWebView *sender,
    103         /* [retval][out] */ BOOL *resizable) { return E_NOTIMPL; }
    104 
    105     virtual HRESULT STDMETHODCALLTYPE setResizable(
    106         /* [in] */ IWebView *sender,
    107         /* [in] */ BOOL resizable) { return E_NOTIMPL; }
    108 
    109     virtual HRESULT STDMETHODCALLTYPE setFrame(
    110         /* [in] */ IWebView *sender,
    111         /* [in] */ RECT *frame);
    112 
    113     virtual HRESULT STDMETHODCALLTYPE webViewFrame(
    114         /* [in] */ IWebView *sender,
    115         /* [retval][out] */ RECT *frame);
    116 
    117     virtual HRESULT STDMETHODCALLTYPE setContentRect(
    118         /* [in] */ IWebView *sender,
    119         /* [in] */ RECT *contentRect) { return E_NOTIMPL; }
    120 
    121     virtual HRESULT STDMETHODCALLTYPE webViewContentRect(
    122         /* [in] */ IWebView *sender,
    123         /* [retval][out] */ RECT *contentRect) { return E_NOTIMPL; }
    124 
    125     virtual HRESULT STDMETHODCALLTYPE runJavaScriptAlertPanelWithMessage(
    126         /* [in] */ IWebView *sender,
    127         /* [in] */ BSTR message);
    128 
    129     virtual HRESULT STDMETHODCALLTYPE runJavaScriptConfirmPanelWithMessage(
    130         /* [in] */ IWebView *sender,
    131         /* [in] */ BSTR message,
    132         /* [retval][out] */ BOOL *result);
    133 
    134     virtual HRESULT STDMETHODCALLTYPE runJavaScriptTextInputPanelWithPrompt(
    135         /* [in] */ IWebView *sender,
    136         /* [in] */ BSTR message,
    137         /* [in] */ BSTR defaultText,
    138         /* [retval][out] */ BSTR *result);
    139 
    140     virtual HRESULT STDMETHODCALLTYPE runBeforeUnloadConfirmPanelWithMessage(
    141         /* [in] */ IWebView *sender,
    142         /* [in] */ BSTR message,
    143         /* [in] */ IWebFrame *initiatedByFrame,
    144         /* [retval][out] */ BOOL *result);
    145 
    146     virtual HRESULT STDMETHODCALLTYPE runOpenPanelForFileButtonWithResultListener(
    147         /* [in] */ IWebView *sender,
    148         /* [in] */ IWebOpenPanelResultListener *resultListener) { return E_NOTIMPL; }
    149 
    150     virtual HRESULT STDMETHODCALLTYPE mouseDidMoveOverElement(
    151         /* [in] */ IWebView *sender,
    152         /* [in] */ IPropertyBag *elementInformation,
    153         /* [in] */ UINT modifierFlags) { return E_NOTIMPL; }
    154 
    155     virtual HRESULT STDMETHODCALLTYPE contextMenuItemsForElement(
    156         /* [in] */ IWebView *sender,
    157         /* [in] */ IPropertyBag *element,
    158         /* [in] */ OLE_HANDLE defaultItems,
    159         /* [retval][out] */ OLE_HANDLE *resultMenu) { return E_NOTIMPL; }
    160 
    161     virtual HRESULT STDMETHODCALLTYPE validateUserInterfaceItem(
    162         /* [in] */ IWebView *webView,
    163         /* [in] */ UINT itemCommandID,
    164         /* [in] */ BOOL defaultValidation,
    165         /* [retval][out] */ BOOL *isValid) { return E_NOTIMPL; }
    166 
    167     virtual HRESULT STDMETHODCALLTYPE shouldPerformAction(
    168         /* [in] */ IWebView *webView,
    169         /* [in] */ UINT itemCommandID,
    170         /* [in] */ UINT sender) { return E_NOTIMPL; }
    171 
    172     virtual HRESULT STDMETHODCALLTYPE dragDestinationActionMaskForDraggingInfo(
    173         /* [in] */ IWebView *webView,
    174         /* [in] */ IDataObject *draggingInfo,
    175         /* [retval][out] */ WebDragDestinationAction *action) { return E_NOTIMPL; }
    176 
    177     virtual HRESULT STDMETHODCALLTYPE willPerformDragDestinationAction(
    178         /* [in] */ IWebView *webView,
    179         /* [in] */ WebDragDestinationAction action,
    180         /* [in] */ IDataObject *draggingInfo) { return E_NOTIMPL; }
    181 
    182     virtual HRESULT STDMETHODCALLTYPE dragSourceActionMaskForPoint(
    183         /* [in] */ IWebView *webView,
    184         /* [in] */ LPPOINT point,
    185         /* [retval][out] */ WebDragSourceAction *action) { return E_NOTIMPL; }
    186 
    187     virtual HRESULT STDMETHODCALLTYPE willPerformDragSourceAction(
    188         /* [in] */ IWebView *webView,
    189         /* [in] */ WebDragSourceAction action,
    190         /* [in] */ LPPOINT point,
    191         /* [in] */ IDataObject *pasteboard,
    192         /* [retval][out] */ IDataObject **newPasteboard) { return E_NOTIMPL; }
    193 
    194     virtual HRESULT STDMETHODCALLTYPE contextMenuItemSelected(
    195         /* [in] */ IWebView *sender,
    196         /* [in] */ void *item,
    197         /* [in] */ IPropertyBag *element) { return E_NOTIMPL; }
    198 
    199     virtual HRESULT STDMETHODCALLTYPE hasCustomMenuImplementation(
    200         /* [retval][out] */ BOOL *hasCustomMenus);
    201 
    202     virtual HRESULT STDMETHODCALLTYPE trackCustomPopupMenu(
    203         /* [in] */ IWebView *sender,
    204         /* [in] */ OLE_HANDLE menu,
    205         /* [in] */ LPPOINT point);
    206 
    207     virtual HRESULT STDMETHODCALLTYPE measureCustomMenuItem(
    208         /* [in] */ IWebView *sender,
    209         /* [in] */ void *measureItem) { return E_NOTIMPL; }
    210 
    211     virtual HRESULT STDMETHODCALLTYPE drawCustomMenuItem(
    212         /* [in] */ IWebView *sender,
    213         /* [in] */ void *drawItem) { return E_NOTIMPL; }
    214 
    215     virtual HRESULT STDMETHODCALLTYPE addCustomMenuDrawingData(
    216         /* [in] */ IWebView *sender,
    217         /* [in] */ OLE_HANDLE menu) { return E_NOTIMPL; }
    218 
    219     virtual HRESULT STDMETHODCALLTYPE cleanUpCustomMenuDrawingData(
    220         /* [in] */ IWebView *sender,
    221         /* [in] */ OLE_HANDLE menu) { return E_NOTIMPL; }
    222 
    223     virtual HRESULT STDMETHODCALLTYPE canTakeFocus(
    224         /* [in] */ IWebView *sender,
    225         /* [in] */ BOOL forward,
    226         /* [out] */ BOOL *result) { return E_NOTIMPL; }
    227 
    228     virtual HRESULT STDMETHODCALLTYPE takeFocus(
    229         /* [in] */ IWebView *sender,
    230         /* [in] */ BOOL forward) { return E_NOTIMPL; }
    231 
    232     virtual HRESULT STDMETHODCALLTYPE registerUndoWithTarget(
    233         /* [in] */ IWebUndoTarget *target,
    234         /* [in] */ BSTR actionName,
    235         /* [in] */ IUnknown *actionArg);
    236 
    237     virtual HRESULT STDMETHODCALLTYPE removeAllActionsWithTarget(
    238         /* [in] */ IWebUndoTarget *target);
    239 
    240     virtual HRESULT STDMETHODCALLTYPE setActionTitle(
    241         /* [in] */ BSTR actionTitle);
    242 
    243     virtual HRESULT STDMETHODCALLTYPE undo();
    244 
    245     virtual HRESULT STDMETHODCALLTYPE redo();
    246 
    247     virtual HRESULT STDMETHODCALLTYPE canUndo(
    248         /* [retval][out] */ BOOL *result);
    249 
    250     virtual HRESULT STDMETHODCALLTYPE canRedo(
    251         /* [retval][out] */ BOOL *result);
    252 
    253     virtual HRESULT STDMETHODCALLTYPE printFrame(
    254         /* [in] */ IWebView *webView,
    255         /* [in] */ IWebFrame *frame);
    256 
    257     virtual HRESULT STDMETHODCALLTYPE ftpDirectoryTemplatePath(
    258         /* [in] */ IWebView *webView,
    259         /* [retval][out] */ BSTR *path);
    260 
    261     virtual HRESULT STDMETHODCALLTYPE webViewHeaderHeight(
    262         /* [in] */ IWebView *webView,
    263         /* [retval][out] */ float *result);
    264 
    265     virtual HRESULT STDMETHODCALLTYPE webViewFooterHeight(
    266         /* [in] */ IWebView *webView,
    267         /* [retval][out] */ float *result);
    268 
    269     virtual HRESULT STDMETHODCALLTYPE drawHeaderInRect(
    270         /* [in] */ IWebView *webView,
    271         /* [in] */ RECT *rect,
    272         /* [in] */ OLE_HANDLE drawingContext);
    273 
    274     virtual HRESULT STDMETHODCALLTYPE drawFooterInRect(
    275         /* [in] */ IWebView *webView,
    276         /* [in] */ RECT *rect,
    277         /* [in] */ OLE_HANDLE drawingContext,
    278         /* [in] */ UINT pageIndex,
    279         /* [in] */ UINT pageCount);
    280 
    281     virtual HRESULT STDMETHODCALLTYPE webViewPrintingMarginRect(
    282         /* [in] */ IWebView *webView,
    283         /* [retval][out] */ RECT *rect);
    284 
    285     virtual HRESULT STDMETHODCALLTYPE canRunModal(
    286         /* [in] */ IWebView *webView,
    287         /* [retval][out] */ BOOL *canRunBoolean);
    288 
    289     virtual HRESULT STDMETHODCALLTYPE createModalDialog(
    290         /* [in] */ IWebView *sender,
    291         /* [in] */ IWebURLRequest *request,
    292         /* [retval][out] */ IWebView **newWebView);
    293 
    294     virtual HRESULT STDMETHODCALLTYPE runModal(
    295         /* [in] */ IWebView *webView);
    296 
    297     virtual HRESULT STDMETHODCALLTYPE isMenuBarVisible(
    298         /* [in] */ IWebView *webView,
    299         /* [retval][out] */ BOOL *visible);
    300 
    301     virtual HRESULT STDMETHODCALLTYPE setMenuBarVisible(
    302         /* [in] */ IWebView *webView,
    303         /* [in] */ BOOL visible);
    304 
    305     virtual HRESULT STDMETHODCALLTYPE runDatabaseSizeLimitPrompt(
    306         /* [in] */ IWebView *webView,
    307         /* [in] */ BSTR displayName,
    308         /* [in] */ IWebFrame *initiatedByFrame,
    309         /* [retval][out] */ BOOL *allowed);
    310 
    311     virtual HRESULT STDMETHODCALLTYPE paintCustomScrollbar(
    312         /* [in] */ IWebView *webView,
    313         /* [in] */ HDC hDC,
    314         /* [in] */ RECT rect,
    315         /* [in] */ WebScrollBarControlSize size,
    316         /* [in] */ WebScrollbarControlState state,
    317         /* [in] */ WebScrollbarControlPart pressedPart,
    318         /* [in] */ BOOL vertical,
    319         /* [in] */ float value,
    320         /* [in] */ float proportion,
    321         /* [in] */ WebScrollbarControlPartMask parts);
    322 
    323     virtual HRESULT STDMETHODCALLTYPE paintCustomScrollCorner(
    324         /* [in] */ IWebView *webView,
    325         /* [in] */ HDC hDC,
    326         /* [in] */ RECT rect);
    327 
    328     virtual HRESULT STDMETHODCALLTYPE createWebViewWithRequest(IWebView* sender, IWebURLRequest* request, IPropertyBag* windowFeatures, IWebView** newWebView);
    329 
    330     virtual HRESULT STDMETHODCALLTYPE drawBackground(IWebView* sender, OLE_HANDLE hdc, const RECT* dirtyRect);
    331 
    332     virtual HRESULT STDMETHODCALLTYPE decidePolicyForGeolocationRequest(IWebView* sender, IWebFrame* frame, IWebSecurityOrigin* origin, IWebGeolocationPolicyListener* listener);
    333 
    334     virtual HRESULT STDMETHODCALLTYPE didPressMissingPluginButton(IDOMElement*);
    335 
    336 protected:
    337     // IWebUIDelegatePrivate
    338 
    339     virtual HRESULT STDMETHODCALLTYPE unused1() { return E_NOTIMPL; }
    340 
    341     virtual HRESULT STDMETHODCALLTYPE unused2() { return E_NOTIMPL; }
    342 
    343     virtual HRESULT STDMETHODCALLTYPE unused3() { return E_NOTIMPL; }
    344 
    345     virtual HRESULT STDMETHODCALLTYPE webViewScrolled(
    346         /* [in] */ IWebView *sender) { return E_NOTIMPL; }
    347 
    348     virtual HRESULT STDMETHODCALLTYPE webViewAddMessageToConsole(
    349         /* [in] */ IWebView *sender,
    350         /* [in] */ BSTR message,
    351         /* [in] */ int lineNumber,
    352         /* [in] */ BSTR url,
    353         /* [in] */ BOOL isError);
    354 
    355     virtual HRESULT STDMETHODCALLTYPE webViewShouldInterruptJavaScript(
    356         /* [in] */ IWebView *sender,
    357         /* [retval][out] */ BOOL *result) { return E_NOTIMPL; }
    358 
    359     virtual HRESULT STDMETHODCALLTYPE webViewReceivedFocus(
    360         /* [in] */ IWebView *sender) { return E_NOTIMPL; }
    361 
    362     virtual HRESULT STDMETHODCALLTYPE webViewLostFocus(
    363         /* [in] */ IWebView *sender,
    364         /* [in] */ OLE_HANDLE loseFocusTo) { return E_NOTIMPL; }
    365 
    366     virtual HRESULT STDMETHODCALLTYPE doDragDrop(
    367         /* [in] */ IWebView *sender,
    368         /* [in] */ IDataObject *dataObject,
    369         /* [in] */ IDropSource *dropSource,
    370         /* [in] */ DWORD okEffect,
    371         /* [retval][out] */ DWORD *performedEffect);
    372 
    373     virtual HRESULT STDMETHODCALLTYPE webViewGetDlgCode(
    374         /* [in] */ IWebView *sender,
    375         /* [in] */ UINT keyCode,
    376         /* [retval][out] */ LONG_PTR *code);
    377 
    378     virtual HRESULT STDMETHODCALLTYPE webViewPainted(
    379         /* [in] */ IWebView *sender);
    380 
    381     virtual HRESULT STDMETHODCALLTYPE exceededDatabaseQuota(
    382         /* [in] */ IWebView *sender,
    383         /* [in] */ IWebFrame *frame,
    384         /* [in] */ IWebSecurityOrigin *origin,
    385         /* [in] */ BSTR databaseIdentifier);
    386 
    387     virtual HRESULT STDMETHODCALLTYPE embeddedViewWithArguments(
    388         /* [in] */ IWebView *sender,
    389         /* [in] */ IWebFrame *frame,
    390         /* [in] */ IPropertyBag *arguments,
    391         /* [retval][out] */ IWebEmbeddedView **view);
    392 
    393     virtual HRESULT STDMETHODCALLTYPE webViewClosing(
    394         /* [in] */ IWebView *sender);
    395 
    396     virtual HRESULT STDMETHODCALLTYPE webViewSetCursor(
    397         /* [in] */ IWebView *sender,
    398         /* [in] */ OLE_HANDLE cursor);
    399 
    400     virtual HRESULT STDMETHODCALLTYPE webViewDidInvalidate(
    401         /* [in] */ IWebView *sender);
    402 
    403     virtual HRESULT STDMETHODCALLTYPE desktopNotificationsDelegate(
    404         /* [out] */ IWebDesktopNotificationsDelegate** result);
    405 
    406     ULONG                   m_refCount;
    407 
    408 private:
    409     RECT m_frame;
    410     OwnPtr<DRTUndoManager> m_undoManager;
    411 
    412     COMPtr<IWebDesktopNotificationsDelegate> m_desktopNotifications;
    413 };
    414 
    415 #endif
    416