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
37class DRTUndoManager;
38class DRTDesktopNotificationPresenter;
39
40class UIDelegate : public IWebUIDelegate2, IWebUIDelegatePrivate3 {
41public:
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
336protected:
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
408private:
409    RECT m_frame;
410    OwnPtr<DRTUndoManager> m_undoManager;
411
412    COMPtr<IWebDesktopNotificationsDelegate> m_desktopNotifications;
413};
414
415#endif
416