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