1/*
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.  All rights reserved.
3 * Copyright (C) 2009, 2010, 2011 Appcelerator, Inc. All rights reserved.
4 * Copyright (C) 2011 Brent Fulgham. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCfLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABIuLITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#ifndef WebView_H
29#define WebView_H
30
31#include "WebKit.h"
32#include "WebFrame.h"
33#include "WebPreferences.h"
34#include <WebCore/COMPtr.h>
35#include <WebCore/DragActions.h>
36#include <WebCore/IntRect.h>
37#include <WebCore/RefCountedGDIHandle.h>
38#include <WebCore/SuspendableTimer.h>
39#include <WebCore/WindowMessageListener.h>
40#include <wtf/HashSet.h>
41#include <wtf/OwnPtr.h>
42#include <wtf/RefPtr.h>
43
44#if USE(ACCELERATED_COMPOSITING)
45#include <WebCore/CACFLayerTreeHostClient.h>
46#include <WebCore/GraphicsLayerClient.h>
47#endif
48
49#if ENABLE(FULLSCREEN_API)
50#include <WebCore/FullScreenControllerClient.h>
51#endif
52
53namespace WebCore {
54#if USE(ACCELERATED_COMPOSITING)
55    class CACFLayerTreeHost;
56#endif
57    class FullScreenController;
58#if PLATFORM(WIN) && USE(AVFOUNDATION)
59    struct GraphicsDeviceAdapter;
60#endif
61}
62
63namespace WebCore {
64    class HistoryItem;
65}
66
67class FullscreenVideoController;
68class WebBackForwardList;
69class WebFrame;
70class WebInspector;
71class WebInspectorClient;
72
73typedef WebCore::RefCountedGDIHandle<HBITMAP> RefCountedHBITMAP;
74typedef WebCore::RefCountedGDIHandle<HRGN> RefCountedHRGN;
75
76WebView* kit(WebCore::Page*);
77WebCore::Page* core(IWebView*);
78
79interface IDropTargetHelper;
80
81class WebView
82    : public IWebView
83    , public IWebViewPrivate
84    , public IWebIBActions
85    , public IWebViewCSS
86    , public IWebViewEditing
87    , public IWebViewUndoableEditing
88    , public IWebViewEditingActions
89    , public IWebNotificationObserver
90    , public IDropTarget
91    , WebCore::WindowMessageListener
92#if USE(ACCELERATED_COMPOSITING)
93    , WebCore::GraphicsLayerClient
94    , WebCore::CACFLayerTreeHostClient
95#endif
96#if ENABLE(FULLSCREEN_API)
97    , WebCore::FullScreenControllerClient
98#endif
99{
100public:
101    static WebView* createInstance();
102protected:
103    WebView();
104    ~WebView();
105
106public:
107    // IUnknown
108    virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
109    virtual ULONG STDMETHODCALLTYPE AddRef(void);
110    virtual ULONG STDMETHODCALLTYPE Release(void);
111
112    // IWebView
113
114    virtual HRESULT STDMETHODCALLTYPE canShowMIMEType(
115        /* [in] */ BSTR mimeType,
116        /* [retval][out] */ BOOL *canShow);
117
118    virtual HRESULT STDMETHODCALLTYPE canShowMIMETypeAsHTML(
119        /* [in] */ BSTR mimeType,
120        /* [retval][out] */ BOOL *canShow);
121
122    virtual HRESULT STDMETHODCALLTYPE MIMETypesShownAsHTML(
123        /* [retval][out] */ IEnumVARIANT **enumVariant);
124
125    virtual HRESULT STDMETHODCALLTYPE setMIMETypesShownAsHTML(
126        /* [size_is][in] */ BSTR *mimeTypes,
127        /* [in] */ int cMimeTypes);
128
129    virtual HRESULT STDMETHODCALLTYPE URLFromPasteboard(
130        /* [in] */ IDataObject *pasteboard,
131        /* [retval][out] */ BSTR *url);
132
133    virtual HRESULT STDMETHODCALLTYPE URLTitleFromPasteboard(
134        /* [in] */ IDataObject *pasteboard,
135        /* [retval][out] */ BSTR *urlTitle);
136
137    virtual HRESULT STDMETHODCALLTYPE initWithFrame(
138        /* [in] */ RECT frame,
139        /* [in] */ BSTR frameName,
140        /* [in] */ BSTR groupName);
141
142    virtual HRESULT STDMETHODCALLTYPE setAccessibilityDelegate(
143        /* [in] */ IAccessibilityDelegate *d);
144
145    virtual HRESULT STDMETHODCALLTYPE accessibilityDelegate(
146        /* [out][retval] */ IAccessibilityDelegate **d);
147
148    virtual HRESULT STDMETHODCALLTYPE setUIDelegate(
149        /* [in] */ IWebUIDelegate *d);
150
151    virtual HRESULT STDMETHODCALLTYPE uiDelegate(
152        /* [out][retval] */ IWebUIDelegate **d);
153
154    virtual HRESULT STDMETHODCALLTYPE setResourceLoadDelegate(
155        /* [in] */ IWebResourceLoadDelegate *d);
156
157    virtual HRESULT STDMETHODCALLTYPE resourceLoadDelegate(
158        /* [out][retval] */ IWebResourceLoadDelegate **d);
159
160    virtual HRESULT STDMETHODCALLTYPE setDownloadDelegate(
161        /* [in] */ IWebDownloadDelegate *d);
162
163    virtual HRESULT STDMETHODCALLTYPE downloadDelegate(
164        /* [out][retval] */ IWebDownloadDelegate **d);
165
166    virtual HRESULT STDMETHODCALLTYPE setFrameLoadDelegate(
167        /* [in] */ IWebFrameLoadDelegate *d);
168
169    virtual HRESULT STDMETHODCALLTYPE frameLoadDelegate(
170        /* [out][retval] */ IWebFrameLoadDelegate **d);
171
172    virtual HRESULT STDMETHODCALLTYPE setPolicyDelegate(
173        /* [in] */ IWebPolicyDelegate *d);
174
175    virtual HRESULT STDMETHODCALLTYPE policyDelegate(
176        /* [out][retval] */ IWebPolicyDelegate **d);
177
178    virtual HRESULT STDMETHODCALLTYPE mainFrame(
179        /* [out][retval] */ IWebFrame **frame);
180
181    virtual HRESULT STDMETHODCALLTYPE focusedFrame(
182        /* [out][retval] */ IWebFrame **frame);
183
184    virtual HRESULT STDMETHODCALLTYPE backForwardList(
185        /* [out][retval] */ IWebBackForwardList **list);
186
187    virtual HRESULT STDMETHODCALLTYPE setMaintainsBackForwardList(
188        /* [in] */ BOOL flag);
189
190    virtual HRESULT STDMETHODCALLTYPE goBack(
191        /* [retval][out] */ BOOL *succeeded);
192
193    virtual HRESULT STDMETHODCALLTYPE goForward(
194        /* [retval][out] */ BOOL *succeeded);
195
196    virtual HRESULT STDMETHODCALLTYPE goToBackForwardItem(
197        /* [in] */ IWebHistoryItem *item,
198        /* [retval][out] */ BOOL *succeeded);
199
200    virtual HRESULT STDMETHODCALLTYPE setTextSizeMultiplier(
201        /* [in] */ float multiplier);
202
203    virtual HRESULT STDMETHODCALLTYPE textSizeMultiplier(
204        /* [retval][out] */ float *multiplier);
205
206    virtual HRESULT STDMETHODCALLTYPE setApplicationNameForUserAgent(
207        /* [in] */ BSTR applicationName);
208
209    virtual HRESULT STDMETHODCALLTYPE applicationNameForUserAgent(
210        /* [retval][out] */ BSTR *applicationName);
211
212    virtual HRESULT STDMETHODCALLTYPE setCustomUserAgent(
213        /* [in] */ BSTR userAgentString);
214
215    virtual HRESULT STDMETHODCALLTYPE customUserAgent(
216        /* [retval][out] */ BSTR *userAgentString);
217
218    virtual HRESULT STDMETHODCALLTYPE userAgentForURL(
219        /* [in] */ BSTR url,
220        /* [retval][out] */ BSTR *userAgent);
221
222    virtual HRESULT STDMETHODCALLTYPE supportsTextEncoding(
223        /* [retval][out] */ BOOL *supports);
224
225    virtual HRESULT STDMETHODCALLTYPE setCustomTextEncodingName(
226        /* [in] */ BSTR encodingName);
227
228    virtual HRESULT STDMETHODCALLTYPE customTextEncodingName(
229        /* [retval][out] */ BSTR *encodingName);
230
231    virtual HRESULT STDMETHODCALLTYPE setMediaStyle(
232        /* [in] */ BSTR media);
233
234    virtual HRESULT STDMETHODCALLTYPE mediaStyle(
235        /* [retval][out] */ BSTR *media);
236
237    virtual HRESULT STDMETHODCALLTYPE stringByEvaluatingJavaScriptFromString(
238        /* [in] */ BSTR script,
239        /* [retval][out] */ BSTR *result);
240
241    virtual HRESULT STDMETHODCALLTYPE windowScriptObject(
242        /* [retval][out] */ IWebScriptObject **webScriptObject);
243
244    virtual HRESULT STDMETHODCALLTYPE setPreferences(
245        /* [in] */ IWebPreferences *prefs);
246
247    virtual HRESULT STDMETHODCALLTYPE preferences(
248        /* [retval][out] */ IWebPreferences **prefs);
249
250    virtual HRESULT STDMETHODCALLTYPE setPreferencesIdentifier(
251        /* [in] */ BSTR anIdentifier);
252
253    virtual HRESULT STDMETHODCALLTYPE preferencesIdentifier(
254        /* [retval][out] */ BSTR *anIdentifier);
255
256    virtual HRESULT STDMETHODCALLTYPE setHostWindow(
257        /* [in] */ OLE_HANDLE window);
258
259    virtual HRESULT STDMETHODCALLTYPE hostWindow(
260        /* [retval][out] */ OLE_HANDLE *window);
261
262    virtual HRESULT STDMETHODCALLTYPE searchFor(
263        /* [in] */ BSTR str,
264        /* [in] */ BOOL forward,
265        /* [in] */ BOOL caseFlag,
266        /* [in] */ BOOL wrapFlag,
267        /* [retval][out] */ BOOL *found);
268
269    virtual HRESULT STDMETHODCALLTYPE registerViewClass(
270        /* [in] */ IWebDocumentView *view,
271        /* [in] */ IWebDocumentRepresentation *representation,
272        /* [in] */ BSTR forMIMEType);
273
274    virtual HRESULT STDMETHODCALLTYPE setGroupName(
275        /* [in] */ BSTR groupName);
276
277    virtual HRESULT STDMETHODCALLTYPE groupName(
278        /* [retval][out] */ BSTR *groupName);
279
280    virtual HRESULT STDMETHODCALLTYPE estimatedProgress(
281        /* [retval][out] */ double *estimatedProgress);
282
283    virtual HRESULT STDMETHODCALLTYPE isLoading(
284        /* [retval][out] */ BOOL *isLoading);
285
286    virtual HRESULT STDMETHODCALLTYPE elementAtPoint(
287        /* [in] */ LPPOINT point,
288        /* [retval][out] */ IPropertyBag **elementDictionary);
289
290    virtual HRESULT STDMETHODCALLTYPE pasteboardTypesForSelection(
291        /* [retval][out] */ IEnumVARIANT **enumVariant);
292
293    virtual HRESULT STDMETHODCALLTYPE writeSelectionWithPasteboardTypes(
294        /* [size_is][in] */ BSTR *types,
295        /* [in] */ int cTypes,
296        /* [in] */ IDataObject *pasteboard);
297
298    virtual HRESULT STDMETHODCALLTYPE pasteboardTypesForElement(
299        /* [in] */ IPropertyBag *elementDictionary,
300        /* [retval][out] */ IEnumVARIANT **enumVariant);
301
302    virtual HRESULT STDMETHODCALLTYPE writeElement(
303        /* [in] */ IPropertyBag *elementDictionary,
304        /* [size_is][in] */ BSTR *withPasteboardTypes,
305        /* [in] */ int cWithPasteboardTypes,
306        /* [in] */ IDataObject *pasteboard);
307
308    virtual HRESULT STDMETHODCALLTYPE selectedText(
309        /* [out, retval] */ BSTR* str);
310
311    virtual HRESULT STDMETHODCALLTYPE centerSelectionInVisibleArea(
312        /* [in] */ IUnknown* sender);
313
314    virtual HRESULT STDMETHODCALLTYPE moveDragCaretToPoint(
315        /* [in] */ LPPOINT point);
316
317    virtual HRESULT STDMETHODCALLTYPE removeDragCaret( void);
318
319    virtual HRESULT STDMETHODCALLTYPE setDrawsBackground(
320        /* [in] */ BOOL drawsBackground);
321
322    virtual HRESULT STDMETHODCALLTYPE drawsBackground(
323        /* [retval][out] */ BOOL *drawsBackground);
324
325    virtual HRESULT STDMETHODCALLTYPE setMainFrameURL(
326        /* [in] */ BSTR urlString);
327
328    virtual HRESULT STDMETHODCALLTYPE mainFrameURL(
329        /* [retval][out] */ BSTR *urlString);
330
331    virtual HRESULT STDMETHODCALLTYPE mainFrameDocument(
332        /* [retval][out] */ IDOMDocument **document);
333
334    virtual HRESULT STDMETHODCALLTYPE mainFrameTitle(
335        /* [retval][out] */ BSTR *title);
336
337    virtual HRESULT STDMETHODCALLTYPE mainFrameIcon(
338        /* [retval][out] */ OLE_HANDLE *hBitmap);
339
340    virtual HRESULT STDMETHODCALLTYPE registerURLSchemeAsLocal(
341        /* [in] */ BSTR scheme);
342
343    virtual HRESULT STDMETHODCALLTYPE close();
344
345    // IWebIBActions
346
347    virtual HRESULT STDMETHODCALLTYPE takeStringURLFrom(
348        /* [in] */ IUnknown *sender);
349
350    virtual HRESULT STDMETHODCALLTYPE stopLoading(
351        /* [in] */ IUnknown *sender);
352
353    virtual HRESULT STDMETHODCALLTYPE reload(
354        /* [in] */ IUnknown *sender);
355
356    virtual HRESULT STDMETHODCALLTYPE canGoBack(
357        /* [in] */ IUnknown *sender,
358        /* [retval][out] */ BOOL *result);
359
360    virtual HRESULT STDMETHODCALLTYPE goBack(
361        /* [in] */ IUnknown *sender);
362
363    virtual HRESULT STDMETHODCALLTYPE canGoForward(
364        /* [in] */ IUnknown *sender,
365        /* [retval][out] */ BOOL *result);
366
367    virtual HRESULT STDMETHODCALLTYPE goForward(
368        /* [in] */ IUnknown *sender);
369
370    virtual HRESULT STDMETHODCALLTYPE canMakeTextLarger(
371        /* [in] */ IUnknown *sender,
372        /* [retval][out] */ BOOL *result);
373
374    virtual HRESULT STDMETHODCALLTYPE makeTextLarger(
375        /* [in] */ IUnknown *sender);
376
377    virtual HRESULT STDMETHODCALLTYPE canMakeTextSmaller(
378        /* [in] */ IUnknown *sender,
379        /* [retval][out] */ BOOL *result);
380
381    virtual HRESULT STDMETHODCALLTYPE makeTextSmaller(
382        /* [in] */ IUnknown *sender);
383
384    virtual HRESULT STDMETHODCALLTYPE canMakeTextStandardSize(
385        /* [in] */ IUnknown *sender,
386        /* [retval][out] */ BOOL *result);
387
388    virtual HRESULT STDMETHODCALLTYPE makeTextStandardSize(
389        /* [in] */ IUnknown *sender);
390
391    virtual HRESULT STDMETHODCALLTYPE toggleContinuousSpellChecking(
392        /* [in] */ IUnknown *sender);
393
394    virtual HRESULT STDMETHODCALLTYPE toggleSmartInsertDelete(
395        /* [in] */ IUnknown *sender);
396
397    virtual HRESULT STDMETHODCALLTYPE toggleGrammarChecking(
398        /* [in] */ IUnknown *sender);
399
400    virtual HRESULT STDMETHODCALLTYPE reloadFromOrigin(
401        /* [in] */ IUnknown *sender);
402
403    // IWebViewCSS
404
405    virtual HRESULT STDMETHODCALLTYPE computedStyleForElement(
406        /* [in] */ IDOMElement *element,
407        /* [in] */ BSTR pseudoElement,
408        /* [retval][out] */ IDOMCSSStyleDeclaration **style);
409
410    // IWebViewEditing
411
412    virtual HRESULT STDMETHODCALLTYPE editableDOMRangeForPoint(
413        /* [in] */ LPPOINT point,
414        /* [retval][out] */ IDOMRange **range);
415
416    virtual HRESULT STDMETHODCALLTYPE setSelectedDOMRange(
417        /* [in] */ IDOMRange *range,
418        /* [in] */ WebSelectionAffinity affinity);
419
420    virtual HRESULT STDMETHODCALLTYPE selectedDOMRange(
421        /* [retval][out] */ IDOMRange **range);
422
423    virtual HRESULT STDMETHODCALLTYPE selectionAffinity(
424        /* [retval][out][retval][out] */ WebSelectionAffinity *affinity);
425
426    virtual HRESULT STDMETHODCALLTYPE setEditable(
427        /* [in] */ BOOL flag);
428
429    virtual HRESULT STDMETHODCALLTYPE isEditable(
430        /* [retval][out] */ BOOL *isEditable);
431
432    virtual HRESULT STDMETHODCALLTYPE setTypingStyle(
433        /* [in] */ IDOMCSSStyleDeclaration *style);
434
435    virtual HRESULT STDMETHODCALLTYPE typingStyle(
436        /* [retval][out] */ IDOMCSSStyleDeclaration **style);
437
438    virtual HRESULT STDMETHODCALLTYPE setSmartInsertDeleteEnabled(
439        /* [in] */ BOOL flag);
440
441    virtual HRESULT STDMETHODCALLTYPE smartInsertDeleteEnabled(
442        /* [in] */ BOOL *enabled);
443
444    virtual HRESULT STDMETHODCALLTYPE setSelectTrailingWhitespaceEnabled(
445        /* [in] */ BOOL flag);
446
447    virtual HRESULT STDMETHODCALLTYPE isSelectTrailingWhitespaceEnabled(
448        /* [in] */ BOOL *enabled);
449
450    virtual HRESULT STDMETHODCALLTYPE setContinuousSpellCheckingEnabled(
451        /* [in] */ BOOL flag);
452
453    virtual HRESULT STDMETHODCALLTYPE isContinuousSpellCheckingEnabled(
454        /* [retval][out] */ BOOL *enabled);
455
456    virtual HRESULT STDMETHODCALLTYPE spellCheckerDocumentTag(
457        /* [retval][out] */ int *tag);
458
459    virtual HRESULT STDMETHODCALLTYPE undoManager(
460        /* [retval][out] */ IWebUndoManager **manager);
461
462    virtual HRESULT STDMETHODCALLTYPE setEditingDelegate(
463        /* [in] */ IWebEditingDelegate *d);
464
465    virtual HRESULT STDMETHODCALLTYPE editingDelegate(
466        /* [retval][out] */ IWebEditingDelegate **d);
467
468    virtual HRESULT STDMETHODCALLTYPE styleDeclarationWithText(
469        /* [in] */ BSTR text,
470        /* [retval][out] */ IDOMCSSStyleDeclaration **style);
471
472    virtual HRESULT STDMETHODCALLTYPE hasSelectedRange(
473        /* [retval][out] */ BOOL *hasSelectedRange);
474
475    virtual HRESULT STDMETHODCALLTYPE cutEnabled(
476        /* [retval][out] */ BOOL *enabled);
477
478    virtual HRESULT STDMETHODCALLTYPE copyEnabled(
479        /* [retval][out] */ BOOL *enabled);
480
481    virtual HRESULT STDMETHODCALLTYPE pasteEnabled(
482        /* [retval][out] */ BOOL *enabled);
483
484    virtual HRESULT STDMETHODCALLTYPE deleteEnabled(
485        /* [retval][out] */ BOOL *enabled);
486
487    virtual HRESULT STDMETHODCALLTYPE editingEnabled(
488        /* [retval][out] */ BOOL *enabled);
489
490    virtual HRESULT STDMETHODCALLTYPE isGrammarCheckingEnabled(
491        /* [retval][out] */ BOOL *enabled);
492
493    virtual HRESULT STDMETHODCALLTYPE setGrammarCheckingEnabled(
494        BOOL enabled);
495
496    virtual HRESULT STDMETHODCALLTYPE setPageSizeMultiplier(
497        /* [in] */ float multiplier);
498
499    virtual HRESULT STDMETHODCALLTYPE pageSizeMultiplier(
500        /* [retval][out] */ float *multiplier);
501
502    virtual HRESULT STDMETHODCALLTYPE canZoomPageIn(
503        /* [in] */ IUnknown *sender,
504        /* [retval][out] */ BOOL *result);
505
506    virtual HRESULT STDMETHODCALLTYPE zoomPageIn(
507        /* [in] */ IUnknown *sender);
508
509    virtual HRESULT STDMETHODCALLTYPE canZoomPageOut(
510        /* [in] */ IUnknown *sender,
511        /* [retval][out] */ BOOL *result);
512
513    virtual HRESULT STDMETHODCALLTYPE zoomPageOut(
514        /* [in] */ IUnknown *sender);
515
516    virtual HRESULT STDMETHODCALLTYPE canResetPageZoom(
517        /* [in] */ IUnknown *sender,
518        /* [retval][out] */ BOOL *result);
519
520    virtual HRESULT STDMETHODCALLTYPE resetPageZoom(
521        /* [in] */ IUnknown *sender);
522
523    // IWebViewUndoableEditing
524
525    virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithNode(
526        /* [in] */ IDOMNode *node);
527
528    virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithText(
529        /* [in] */ BSTR text);
530
531    virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithMarkupString(
532        /* [in] */ BSTR markupString);
533
534    virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithArchive(
535        /* [in] */ IWebArchive *archive);
536
537    virtual HRESULT STDMETHODCALLTYPE deleteSelection( void);
538
539    virtual HRESULT STDMETHODCALLTYPE clearSelection(void);
540
541    virtual HRESULT STDMETHODCALLTYPE applyStyle(
542        /* [in] */ IDOMCSSStyleDeclaration *style);
543
544    // IWebViewEditingActions
545
546    virtual HRESULT STDMETHODCALLTYPE copy(
547        /* [in] */ IUnknown *sender);
548
549    virtual HRESULT STDMETHODCALLTYPE cut(
550        /* [in] */ IUnknown *sender);
551
552    virtual HRESULT STDMETHODCALLTYPE paste(
553        /* [in] */ IUnknown *sender);
554
555    virtual HRESULT STDMETHODCALLTYPE copyURL(
556        /* [in] */ BSTR url);
557
558    virtual HRESULT STDMETHODCALLTYPE copyFont(
559        /* [in] */ IUnknown *sender);
560
561    virtual HRESULT STDMETHODCALLTYPE pasteFont(
562        /* [in] */ IUnknown *sender);
563
564    virtual HRESULT STDMETHODCALLTYPE delete_(
565        /* [in] */ IUnknown *sender);
566
567    virtual HRESULT STDMETHODCALLTYPE pasteAsPlainText(
568        /* [in] */ IUnknown *sender);
569
570    virtual HRESULT STDMETHODCALLTYPE pasteAsRichText(
571        /* [in] */ IUnknown *sender);
572
573    virtual HRESULT STDMETHODCALLTYPE changeFont(
574        /* [in] */ IUnknown *sender);
575
576    virtual HRESULT STDMETHODCALLTYPE changeAttributes(
577        /* [in] */ IUnknown *sender);
578
579    virtual HRESULT STDMETHODCALLTYPE changeDocumentBackgroundColor(
580        /* [in] */ IUnknown *sender);
581
582    virtual HRESULT STDMETHODCALLTYPE changeColor(
583        /* [in] */ IUnknown *sender);
584
585    virtual HRESULT STDMETHODCALLTYPE alignCenter(
586        /* [in] */ IUnknown *sender);
587
588    virtual HRESULT STDMETHODCALLTYPE alignJustified(
589        /* [in] */ IUnknown *sender);
590
591    virtual HRESULT STDMETHODCALLTYPE alignLeft(
592        /* [in] */ IUnknown *sender);
593
594    virtual HRESULT STDMETHODCALLTYPE alignRight(
595        /* [in] */ IUnknown *sender);
596
597    virtual HRESULT STDMETHODCALLTYPE checkSpelling(
598        /* [in] */ IUnknown *sender);
599
600    virtual HRESULT STDMETHODCALLTYPE showGuessPanel(
601        /* [in] */ IUnknown *sender);
602
603    virtual HRESULT STDMETHODCALLTYPE performFindPanelAction(
604        /* [in] */ IUnknown *sender);
605
606    virtual HRESULT STDMETHODCALLTYPE startSpeaking(
607        /* [in] */ IUnknown *sender);
608
609    virtual HRESULT STDMETHODCALLTYPE stopSpeaking(
610        /* [in] */ IUnknown *sender);
611
612    // IWebNotificationObserver
613
614    virtual HRESULT STDMETHODCALLTYPE onNotify(
615        /* [in] */ IWebNotification *notification);
616
617    // IWebViewPrivate
618
619    virtual HRESULT STDMETHODCALLTYPE MIMETypeForExtension(
620        /* [in] */ BSTR extension,
621        /* [retval][out] */ BSTR *mimeType);
622
623    virtual HRESULT STDMETHODCALLTYPE setCustomDropTarget(
624        /* [in] */ IDropTarget* dt);
625
626    virtual HRESULT STDMETHODCALLTYPE removeCustomDropTarget();
627
628    virtual HRESULT STDMETHODCALLTYPE setInViewSourceMode(
629        /* [in] */ BOOL flag);
630
631    virtual HRESULT STDMETHODCALLTYPE inViewSourceMode(
632        /* [retval][out] */ BOOL* flag);
633
634    virtual HRESULT STDMETHODCALLTYPE viewWindow(
635        /* [retval][out] */ OLE_HANDLE *window);
636
637    virtual HRESULT STDMETHODCALLTYPE setFormDelegate(
638        /* [in] */ IWebFormDelegate *formDelegate);
639
640    virtual HRESULT STDMETHODCALLTYPE formDelegate(
641        /* [retval][out] */ IWebFormDelegate **formDelegate);
642
643    virtual HRESULT STDMETHODCALLTYPE setFrameLoadDelegatePrivate(
644        /* [in] */ IWebFrameLoadDelegatePrivate *frameLoadDelegatePrivate);
645
646    virtual HRESULT STDMETHODCALLTYPE frameLoadDelegatePrivate(
647        /* [retval][out] */ IWebFrameLoadDelegatePrivate **frameLoadDelegatePrivate);
648
649    virtual HRESULT STDMETHODCALLTYPE scrollOffset(
650        /* [retval][out] */ LPPOINT offset);
651
652    virtual HRESULT STDMETHODCALLTYPE scrollBy(
653        /* [in] */ LPPOINT offset);
654
655    virtual HRESULT STDMETHODCALLTYPE visibleContentRect(
656        /* [retval][out] */ LPRECT rect);
657
658    virtual HRESULT STDMETHODCALLTYPE updateFocusedAndActiveState();
659
660    virtual HRESULT STDMETHODCALLTYPE executeCoreCommandByName(BSTR name, BSTR value);
661
662    virtual HRESULT STDMETHODCALLTYPE clearMainFrameName();
663
664    virtual HRESULT STDMETHODCALLTYPE markAllMatchesForText(
665        BSTR search, BOOL caseSensitive, BOOL highlight, UINT limit, UINT* matches);
666
667    virtual HRESULT STDMETHODCALLTYPE unmarkAllTextMatches();
668
669    virtual HRESULT STDMETHODCALLTYPE rectsForTextMatches(
670        IEnumTextMatches** pmatches);
671
672    virtual HRESULT STDMETHODCALLTYPE generateSelectionImage(
673        BOOL forceWhiteText, OLE_HANDLE* hBitmap);
674
675    virtual HRESULT STDMETHODCALLTYPE selectionRect(
676        RECT* rc);
677
678    virtual HRESULT STDMETHODCALLTYPE DragEnter(
679        IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
680
681    virtual HRESULT STDMETHODCALLTYPE DragOver(
682        DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
683
684    virtual HRESULT STDMETHODCALLTYPE DragLeave();
685
686    virtual HRESULT STDMETHODCALLTYPE Drop(
687        IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
688
689    virtual HRESULT STDMETHODCALLTYPE canHandleRequest(
690        IWebURLRequest *request,
691        BOOL *result);
692
693    virtual HRESULT STDMETHODCALLTYPE standardUserAgentWithApplicationName(
694        /* [in] */ BSTR applicationName,
695        /* [retval][out] */ BSTR *groupName);
696
697    virtual HRESULT STDMETHODCALLTYPE clearFocusNode();
698
699    virtual HRESULT STDMETHODCALLTYPE setInitialFocus(
700        /* [in] */ BOOL forward);
701
702    virtual HRESULT STDMETHODCALLTYPE setTabKeyCyclesThroughElements(
703        /* [in] */ BOOL cycles);
704
705    virtual HRESULT STDMETHODCALLTYPE tabKeyCyclesThroughElements(
706        /* [retval][out] */ BOOL *result);
707
708    virtual HRESULT STDMETHODCALLTYPE setAllowSiteSpecificHacks(
709        /* [in] */ BOOL allows);
710
711    virtual HRESULT STDMETHODCALLTYPE addAdditionalPluginDirectory(
712        /* [in] */ BSTR directory);
713
714    virtual HRESULT STDMETHODCALLTYPE loadBackForwardListFromOtherView(
715        /* [in] */ IWebView *otherView);
716
717    virtual HRESULT STDMETHODCALLTYPE inspector(
718        /* [retval][out] */ IWebInspector**);
719
720    virtual HRESULT STDMETHODCALLTYPE clearUndoRedoOperations( void);
721    virtual HRESULT STDMETHODCALLTYPE shouldClose(
722        /* [retval][out] */ BOOL* result);
723
724    virtual HRESULT STDMETHODCALLTYPE setProhibitsMainFrameScrolling(BOOL);
725    virtual HRESULT STDMETHODCALLTYPE setShouldApplyMacFontAscentHack(BOOL);
726
727    virtual HRESULT STDMETHODCALLTYPE windowAncestryDidChange();
728
729    virtual HRESULT STDMETHODCALLTYPE paintDocumentRectToContext(
730        /* [in] */ RECT rect,
731        /* [in] */ OLE_HANDLE dc);
732
733    virtual HRESULT STDMETHODCALLTYPE paintScrollViewRectToContextAtPoint(
734        /* [in] */ RECT rect,
735        /* [in] */ POINT pt,
736        /* [in] */ OLE_HANDLE dc);
737
738    virtual HRESULT STDMETHODCALLTYPE reportException(
739        /* [in] */ JSContextRef context,
740        /* [in] */ JSValueRef exception);
741
742    virtual HRESULT STDMETHODCALLTYPE elementFromJS(
743        /* [in] */ JSContextRef context,
744        /* [in] */ JSValueRef nodeObject,
745        /* [retval][out] */ IDOMElement **element);
746
747    virtual HRESULT STDMETHODCALLTYPE setCustomHTMLTokenizerTimeDelay(
748        /* [in] */ double timeDelay);
749
750    virtual HRESULT STDMETHODCALLTYPE setCustomHTMLTokenizerChunkSize(
751        /* [in] */ int chunkSize);
752
753    virtual HRESULT STDMETHODCALLTYPE backingStore(
754        /* [out, retval] */ OLE_HANDLE* hBitmap);
755
756    virtual HRESULT STDMETHODCALLTYPE setTransparent(
757        /* [in] */ BOOL transparent);
758
759    virtual HRESULT STDMETHODCALLTYPE transparent(
760        /* [out, retval] */ BOOL* transparent);
761
762    virtual HRESULT STDMETHODCALLTYPE setDefersCallbacks(
763        /* [in] */ BOOL defersCallbacks);
764
765    virtual HRESULT STDMETHODCALLTYPE defersCallbacks(
766        /* [out, retval] */ BOOL* defersCallbacks);
767
768    virtual HRESULT STDMETHODCALLTYPE globalHistoryItem(
769        /* [out, retval] */ IWebHistoryItem** item);
770
771    virtual HRESULT STDMETHODCALLTYPE setAlwaysUsesComplexTextCodePath(
772        /* [in] */ BOOL complex);
773
774    virtual HRESULT STDMETHODCALLTYPE alwaysUsesComplexTextCodePath(
775        /* [out, retval] */ BOOL* complex);
776
777    virtual HRESULT STDMETHODCALLTYPE setCookieEnabled(
778        /* [in] */ BOOL enable);
779
780    virtual HRESULT STDMETHODCALLTYPE cookieEnabled(
781        /* [out, retval] */ BOOL* enabled);
782
783    virtual HRESULT STDMETHODCALLTYPE setMediaVolume(
784        /* [in] */ float volume);
785
786    virtual HRESULT STDMETHODCALLTYPE mediaVolume(
787        /* [out, retval] */ float* volume);
788
789    virtual HRESULT STDMETHODCALLTYPE registerEmbeddedViewMIMEType(
790        /* [in] */ BSTR mimeType);
791
792    virtual HRESULT STDMETHODCALLTYPE setMemoryCacheDelegateCallsEnabled(
793        /* [in] */ BOOL enabled);
794
795    virtual HRESULT STDMETHODCALLTYPE setJavaScriptURLsAreAllowed(
796        /* [in] */ BOOL areAllowed);
797
798    virtual HRESULT STDMETHODCALLTYPE setCanStartPlugins(
799        /* [in] */ BOOL canStartPlugins);
800
801    virtual HRESULT STDMETHODCALLTYPE addUserScriptToGroup(BSTR groupName, IWebScriptWorld*, BSTR source, BSTR url,
802                                                           unsigned whitelistCount, BSTR* whitelist,
803                                                           unsigned blacklistCount, BSTR* blacklist,
804                                                           WebUserScriptInjectionTime);
805    virtual HRESULT STDMETHODCALLTYPE addUserStyleSheetToGroup(BSTR groupName, IWebScriptWorld*, BSTR source, BSTR url,
806                                                               unsigned whitelistCount, BSTR* whitelist,
807                                                               unsigned blacklistCount, BSTR* blacklist);
808    virtual HRESULT STDMETHODCALLTYPE removeUserScriptFromGroup(BSTR groupName, IWebScriptWorld*, BSTR url);
809    virtual HRESULT STDMETHODCALLTYPE removeUserStyleSheetFromGroup(BSTR groupName, IWebScriptWorld*, BSTR url);
810    virtual HRESULT STDMETHODCALLTYPE removeUserScriptsFromGroup(BSTR groupName, IWebScriptWorld*);
811    virtual HRESULT STDMETHODCALLTYPE removeUserStyleSheetsFromGroup(BSTR groupName, IWebScriptWorld*);
812    virtual HRESULT STDMETHODCALLTYPE removeAllUserContentFromGroup(BSTR groupName);
813
814    virtual HRESULT STDMETHODCALLTYPE unused1();
815    virtual HRESULT STDMETHODCALLTYPE unused2();
816
817    virtual HRESULT STDMETHODCALLTYPE invalidateBackingStore(const RECT*);
818
819    virtual HRESULT STDMETHODCALLTYPE addOriginAccessWhitelistEntry(BSTR sourceOrigin, BSTR destinationProtocol, BSTR destinationHost, BOOL allowDestinationSubdomains);
820    virtual HRESULT STDMETHODCALLTYPE removeOriginAccessWhitelistEntry(BSTR sourceOrigin, BSTR destinationProtocol, BSTR destinationHost, BOOL allowDestinationSubdomains);
821    virtual HRESULT STDMETHODCALLTYPE resetOriginAccessWhitelists();
822
823    virtual HRESULT STDMETHODCALLTYPE setHistoryDelegate(IWebHistoryDelegate* historyDelegate);
824    virtual HRESULT STDMETHODCALLTYPE historyDelegate(IWebHistoryDelegate** historyDelegate);
825    virtual HRESULT STDMETHODCALLTYPE addVisitedLinks(BSTR* visitedURLs, unsigned visitedURLCount);
826
827    virtual HRESULT STDMETHODCALLTYPE unused3();
828    virtual HRESULT STDMETHODCALLTYPE unused4();
829    virtual HRESULT STDMETHODCALLTYPE unused5();
830
831    virtual HRESULT STDMETHODCALLTYPE setGeolocationProvider(IWebGeolocationProvider* locationProvider);
832    virtual HRESULT STDMETHODCALLTYPE geolocationProvider(IWebGeolocationProvider** locationProvider);
833    virtual HRESULT STDMETHODCALLTYPE geolocationDidChangePosition(IWebGeolocationPosition* position);
834    virtual HRESULT STDMETHODCALLTYPE geolocationDidFailWithError(IWebError* error);
835
836    virtual HRESULT STDMETHODCALLTYPE setDomainRelaxationForbiddenForURLScheme(BOOL forbidden, BSTR scheme);
837    virtual HRESULT STDMETHODCALLTYPE registerURLSchemeAsSecure(BSTR);
838    virtual HRESULT STDMETHODCALLTYPE registerURLSchemeAsAllowingLocalStorageAccessInPrivateBrowsing(BSTR);
839    virtual HRESULT STDMETHODCALLTYPE registerURLSchemeAsAllowingDatabaseAccessInPrivateBrowsing(BSTR);
840
841    virtual HRESULT STDMETHODCALLTYPE nextDisplayIsSynchronous();
842
843    virtual HRESULT STDMETHODCALLTYPE defaultMinimumTimerInterval(
844        /* [retval][out] */ double *interval);
845
846    virtual HRESULT STDMETHODCALLTYPE setMinimumTimerInterval(
847        /* [in] */ double);
848
849    virtual HRESULT STDMETHODCALLTYPE httpPipeliningEnabled(
850        /* [out, retval] */ BOOL* enabled);
851
852    virtual HRESULT STDMETHODCALLTYPE setHTTPPipeliningEnabled(
853        /* [in] */ BOOL);
854
855    virtual HRESULT STDMETHODCALLTYPE setUsesLayeredWindow(BOOL);
856    virtual HRESULT STDMETHODCALLTYPE usesLayeredWindow(BOOL*);
857
858    // WebView
859    bool shouldUseEmbeddedView(const WTF::String& mimeType) const;
860
861    WebCore::Page* page();
862    bool handleMouseEvent(UINT, WPARAM, LPARAM);
863    void setMouseActivated(bool flag) { m_mouseActivated = flag; }
864    bool handleContextMenuEvent(WPARAM, LPARAM);
865    bool onMeasureItem(WPARAM, LPARAM);
866    bool onDrawItem(WPARAM, LPARAM);
867    bool onInitMenuPopup(WPARAM, LPARAM);
868    bool onUninitMenuPopup(WPARAM, LPARAM);
869    void performContextMenuAction(WPARAM, LPARAM, bool byPosition);
870    bool mouseWheel(WPARAM, LPARAM, bool isMouseHWheel);
871    bool verticalScroll(WPARAM, LPARAM);
872    bool horizontalScroll(WPARAM, LPARAM);
873    bool gesture(WPARAM, LPARAM);
874    bool gestureNotify(WPARAM, LPARAM);
875    bool execCommand(WPARAM wParam, LPARAM lParam);
876    bool keyDown(WPARAM, LPARAM, bool systemKeyDown = false);
877    bool keyUp(WPARAM, LPARAM, bool systemKeyDown = false);
878    bool keyPress(WPARAM, LPARAM, bool systemKeyDown = false);
879    void paint(HDC, LPARAM);
880    void paintIntoWindow(HDC bitmapDC, HDC windowDC, const WebCore::IntRect& dirtyRect);
881    bool ensureBackingStore();
882    void addToDirtyRegion(const WebCore::IntRect&);
883    void addToDirtyRegion(HRGN);
884    void scrollBackingStore(WebCore::FrameView*, int dx, int dy, const WebCore::IntRect& scrollViewRect, const WebCore::IntRect& clipRect);
885    void deleteBackingStore();
886    void repaint(const WebCore::IntRect&, bool contentChanged, bool immediate = false, bool repaintContentOnly = false);
887    void frameRect(RECT* rect);
888    void closeWindow();
889    void closeWindowSoon();
890    void closeWindowTimerFired();
891    bool didClose() const { return m_didClose; }
892
893    bool transparent() const { return m_transparent; }
894    bool usesLayeredWindow() const { return m_usesLayeredWindow; }
895
896    bool onIMEStartComposition();
897    bool onIMEComposition(LPARAM);
898    bool onIMEEndComposition();
899    bool onIMEChar(WPARAM, LPARAM);
900    bool onIMENotify(WPARAM, LPARAM, LRESULT*);
901    LRESULT onIMERequest(WPARAM, LPARAM);
902    bool onIMESelect(WPARAM, LPARAM);
903    bool onIMESetContext(WPARAM, LPARAM);
904    void selectionChanged();
905    void resetIME(WebCore::Frame*);
906    void setInputMethodState(bool);
907
908    HRESULT registerDragDrop();
909    HRESULT revokeDragDrop();
910
911    // Convenient to be able to violate the rules of COM here for easy movement to the frame.
912    WebFrame* topLevelFrame() const { return m_mainFrame; }
913    const WTF::String& userAgentForKURL(const WebCore::KURL& url);
914
915    static bool canHandleRequest(const WebCore::ResourceRequest&);
916
917    static WTF::String standardUserAgentWithApplicationName(const WTF::String&);
918
919    void setIsBeingDestroyed();
920    bool isBeingDestroyed() const { return m_isBeingDestroyed; }
921
922    const char* interpretKeyEvent(const WebCore::KeyboardEvent*);
923    bool handleEditingKeyboardEvent(WebCore::KeyboardEvent*);
924
925    bool isPainting() const { return m_paintCount > 0; }
926
927    void setToolTip(const WTF::String&);
928
929    void registerForIconNotification(bool listen);
930    void dispatchDidReceiveIconFromWebFrame(WebFrame*);
931
932    HRESULT notifyDidAddIcon(IWebNotification*);
933    HRESULT notifyPreferencesChanged(IWebNotification*);
934
935    static void setCacheModel(WebCacheModel);
936    static WebCacheModel cacheModel();
937    static bool didSetCacheModel();
938    static WebCacheModel maxCacheModelInAnyInstance();
939
940    void updateActiveStateSoon() const;
941    void deleteBackingStoreSoon();
942    void cancelDeleteBackingStoreSoon();
943
944    HWND topLevelParent() const { return m_topLevelParent; }
945    HWND viewWindow() const { return m_viewWindow; }
946
947    void updateActiveState();
948
949    bool onGetObject(WPARAM, LPARAM, LRESULT&) const;
950    static STDMETHODIMP AccessibleObjectFromWindow(HWND, DWORD objectID, REFIID, void** ppObject);
951
952    void downloadURL(const WebCore::KURL&);
953
954#if USE(ACCELERATED_COMPOSITING)
955    void flushPendingGraphicsLayerChangesSoon();
956    void setRootChildLayer(WebCore::GraphicsLayer*);
957#endif
958
959#if PLATFORM(WIN) && USE(AVFOUNDATION)
960    WebCore::GraphicsDeviceAdapter* graphicsDeviceAdapter() const;
961#endif
962
963    void enterFullscreenForNode(WebCore::Node*);
964    void exitFullscreen();
965
966    void setLastCursor(HCURSOR cursor) { m_lastSetCursor = cursor; }
967
968    void setGlobalHistoryItem(WebCore::HistoryItem*);
969
970#if ENABLE(FULLSCREEN_API)
971    bool supportsFullScreenForElement(const WebCore::Element*, bool withKeyboard) const;
972    bool isFullScreen() const;
973    WebCore::FullScreenController* fullScreenController();
974    void setFullScreenElement(PassRefPtr<WebCore::Element>);
975    WebCore::Element* fullScreenElement() const { return m_fullScreenElement.get(); }
976#endif
977
978    bool canShowMIMEType(const String& mimeType);
979    bool canShowMIMETypeAsHTML(const String& mimeType);
980
981    // Used by TextInputController in DumpRenderTree
982
983    HRESULT STDMETHODCALLTYPE setCompositionForTesting(
984        /* [in] */ BSTR composition,
985        /* [in] */ UINT from,
986        /* [in] */ UINT length);
987
988    HRESULT STDMETHODCALLTYPE hasCompositionForTesting(/* [out, retval] */ BOOL* result);
989
990    HRESULT STDMETHODCALLTYPE confirmCompositionForTesting(/* [in] */ BSTR composition);
991
992    HRESULT STDMETHODCALLTYPE compositionRangeForTesting(/* [out] */ UINT* startPosition, /* [out] */ UINT* length);
993
994    HRESULT STDMETHODCALLTYPE firstRectForCharacterRangeForTesting(
995    /* [in] */ UINT location,
996    /* [in] */ UINT length,
997    /* [out, retval] */ RECT* resultRect);
998
999    HRESULT STDMETHODCALLTYPE selectedRangeForTesting(/* [out] */ UINT* location, /* [out] */ UINT* length);
1000private:
1001    void setZoomMultiplier(float multiplier, bool isTextOnly);
1002    float zoomMultiplier(bool isTextOnly);
1003    bool canZoomIn(bool isTextOnly);
1004    HRESULT zoomIn(bool isTextOnly);
1005    bool canZoomOut(bool isTextOnly);
1006    HRESULT zoomOut(bool isTextOnly);
1007    bool canResetZoom(bool isTextOnly);
1008    HRESULT resetZoom(bool isTextOnly);
1009    bool active();
1010
1011    void sizeChanged(const WebCore::IntSize&);
1012
1013    enum WindowsToPaint { PaintWebViewOnly, PaintWebViewAndChildren };
1014    void paintIntoBackingStore(WebCore::FrameView*, HDC bitmapDC, const WebCore::IntRect& dirtyRect, WindowsToPaint);
1015    void updateBackingStore(WebCore::FrameView*, HDC = 0, bool backingStoreCompletelyDirty = false, WindowsToPaint = PaintWebViewOnly);
1016
1017    void performLayeredWindowUpdate();
1018
1019    WebCore::DragOperation keyStateToDragOperation(DWORD grfKeyState) const;
1020
1021    // FIXME: This variable is part of a workaround. The drop effect (pdwEffect) passed to Drop is incorrect.
1022    // We set this variable in DragEnter and DragOver so that it can be used in Drop to set the correct drop effect.
1023    // Thus, on return from DoDragDrop we have the correct pdwEffect for the drag-and-drop operation.
1024    // (see https://bugs.webkit.org/show_bug.cgi?id=29264)
1025    DWORD m_lastDropEffect;
1026
1027#if USE(ACCELERATED_COMPOSITING)
1028    // GraphicsLayerClient
1029    virtual void notifyAnimationStarted(const WebCore::GraphicsLayer*, double time);
1030    virtual void notifyFlushRequired(const WebCore::GraphicsLayer*);
1031    virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::IntRect& inClip);
1032
1033    // CACFLayerTreeHostClient
1034    virtual void flushPendingGraphicsLayerChanges();
1035#endif
1036
1037    bool m_shouldInvertColors;
1038    void setShouldInvertColors(bool);
1039
1040protected:
1041    static bool registerWebViewWindowClass();
1042    static LRESULT CALLBACK WebViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
1043
1044    HIMC getIMMContext();
1045    void releaseIMMContext(HIMC);
1046    static bool allowSiteSpecificHacks() { return s_allowSiteSpecificHacks; }
1047    void preflightSpellChecker();
1048    bool continuousCheckingAllowed();
1049    void initializeToolTipWindow();
1050    void prepareCandidateWindow(WebCore::Frame*, HIMC);
1051    void updateSelectionForIME();
1052    LRESULT onIMERequestCharPosition(WebCore::Frame*, IMECHARPOSITION*);
1053    LRESULT onIMERequestReconvertString(WebCore::Frame*, RECONVERTSTRING*);
1054    bool developerExtrasEnabled() const;
1055
1056    bool shouldInitializeTrackPointHack();
1057
1058    // AllWebViewSet functions
1059    void addToAllWebViewsSet();
1060    void removeFromAllWebViewsSet();
1061
1062    virtual void windowReceivedMessage(HWND, UINT message, WPARAM, LPARAM);
1063
1064#if ENABLE(FULLSCREEN_API)
1065    virtual HWND fullScreenClientWindow() const;
1066    virtual HWND fullScreenClientParentWindow() const;
1067    virtual void fullScreenClientSetParentWindow(HWND);
1068    virtual void fullScreenClientWillEnterFullScreen();
1069    virtual void fullScreenClientDidEnterFullScreen();
1070    virtual void fullScreenClientWillExitFullScreen();
1071    virtual void fullScreenClientDidExitFullScreen();
1072    virtual void fullScreenClientForceRepaint();
1073    virtual void fullScreenClientSaveScrollPosition();
1074    virtual void fullScreenClientRestoreScrollPosition();
1075#endif
1076
1077    ULONG m_refCount;
1078#if !ASSERT_DISABLED
1079    bool m_deletionHasBegun;
1080#endif
1081    HWND m_hostWindow;
1082    HWND m_viewWindow;
1083    WebFrame* m_mainFrame;
1084    WebCore::Page* m_page;
1085#if ENABLE(INSPECTOR)
1086    WebInspectorClient* m_inspectorClient;
1087#endif // ENABLE(INSPECTOR)
1088
1089    RefPtr<RefCountedHBITMAP> m_backingStoreBitmap;
1090    SIZE m_backingStoreSize;
1091    RefPtr<RefCountedHRGN> m_backingStoreDirtyRegion;
1092
1093    COMPtr<IAccessibilityDelegate> m_accessibilityDelegate;
1094    COMPtr<IWebEditingDelegate> m_editingDelegate;
1095    COMPtr<IWebFrameLoadDelegate> m_frameLoadDelegate;
1096    COMPtr<IWebFrameLoadDelegatePrivate> m_frameLoadDelegatePrivate;
1097    COMPtr<IWebUIDelegate> m_uiDelegate;
1098    COMPtr<IWebUIDelegatePrivate> m_uiDelegatePrivate;
1099    COMPtr<IWebFormDelegate> m_formDelegate;
1100    COMPtr<IWebPolicyDelegate> m_policyDelegate;
1101    COMPtr<IWebResourceLoadDelegate> m_resourceLoadDelegate;
1102    COMPtr<IWebDownloadDelegate> m_downloadDelegate;
1103    COMPtr<IWebHistoryDelegate> m_historyDelegate;
1104    COMPtr<WebPreferences> m_preferences;
1105#if ENABLE(INSPECTOR)
1106    COMPtr<WebInspector> m_webInspector;
1107#endif // ENABLE(INSPECTOR)
1108    COMPtr<IWebGeolocationProvider> m_geolocationProvider;
1109
1110    bool m_userAgentOverridden;
1111    bool m_useBackForwardList;
1112    WTF::String m_userAgentCustom;
1113    WTF::String m_userAgentStandard;
1114    float m_zoomMultiplier;
1115    bool m_zoomsTextOnly;
1116    WTF::String m_overrideEncoding;
1117    WTF::String m_applicationName;
1118    bool m_mouseActivated;
1119    // WebCore dragging logic needs to be able to inspect the drag data
1120    // this is updated in DragEnter/Leave/Drop
1121    COMPtr<IDataObject> m_dragData;
1122    COMPtr<IDropTargetHelper> m_dropTargetHelper;
1123    UChar m_currentCharacterCode;
1124    bool m_isBeingDestroyed;
1125    unsigned m_paintCount;
1126    bool m_hasSpellCheckerDocumentTag;
1127    bool m_didClose;
1128    bool m_hasCustomDropTarget;
1129    unsigned m_inIMEComposition;
1130    HWND m_toolTipHwnd;
1131    WTF::String m_toolTip;
1132    bool m_deleteBackingStoreTimerActive;
1133
1134    bool m_transparent;
1135
1136    static bool s_allowSiteSpecificHacks;
1137
1138    WebCore::SuspendableTimer* m_closeWindowTimer;
1139    OwnPtr<TRACKMOUSEEVENT> m_mouseOutTracker;
1140
1141    HWND m_topLevelParent;
1142
1143    OwnPtr<HashSet<WTF::String> > m_embeddedViewMIMETypes;
1144
1145    //Variables needed to store gesture information
1146    RefPtr<WebCore::Node> m_gestureTargetNode;
1147    long m_lastPanX;
1148    long m_lastPanY;
1149    long m_xOverpan;
1150    long m_yOverpan;
1151
1152#if ENABLE(VIDEO)
1153    OwnPtr<FullscreenVideoController> m_fullScreenVideoController;
1154#endif
1155
1156#if USE(ACCELERATED_COMPOSITING)
1157    bool isAcceleratedCompositing() const { return m_isAcceleratedCompositing; }
1158    void setAcceleratedCompositing(bool);
1159
1160    RefPtr<WebCore::CACFLayerTreeHost> m_layerTreeHost;
1161    OwnPtr<WebCore::GraphicsLayer> m_backingLayer;
1162    bool m_isAcceleratedCompositing;
1163#endif
1164
1165    bool m_nextDisplayIsSynchronous;
1166    bool m_usesLayeredWindow;
1167
1168    HCURSOR m_lastSetCursor;
1169
1170    RefPtr<WebCore::HistoryItem> m_globalHistoryItem;
1171
1172#if ENABLE(FULLSCREEN_API)
1173    RefPtr<WebCore::Element> m_fullScreenElement;
1174    OwnPtr<WebCore::FullScreenController> m_fullscreenController;
1175    WebCore::IntPoint m_scrollPosition;
1176#endif
1177};
1178
1179#endif
1180