ad4e32d47e85bd824701eacaef45ef1fb4d5451e
[WebKit-https.git] / Source / WebKitLegacy / win / WebView.h
1 /*
2  * Copyright (C) 2006-2016 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/COMPtr.h>
35 #include <WebCore/DragActions.h>
36 #include <WebCore/GraphicsLayer.h>
37 #include <WebCore/GraphicsLayerClient.h>
38 #include <WebCore/IntRect.h>
39 #include <WebCore/SharedGDIObject.h>
40 #include <WebCore/SuspendableTimer.h>
41 #include <WebCore/WindowMessageListener.h>
42 #include <wtf/HashSet.h>
43 #include <wtf/RefPtr.h>
44
45 #if USE(CA)
46 #include <WebCore/CACFLayerTreeHostClient.h>
47 #endif
48
49 #if ENABLE(FULLSCREEN_API)
50 #include <WebCore/FullScreenControllerClient.h>
51 #endif
52
53 namespace WebCore {
54 #if USE(CA)
55     class CACFLayerTreeHost;
56 #endif
57     class FullScreenController;
58 #if PLATFORM(WIN) && USE(AVFOUNDATION)
59     struct GraphicsDeviceAdapter;
60 #endif
61     class HTMLVideoElement;
62     class HistoryItem;
63     class KeyboardEvent;
64 }
65
66 class FullscreenVideoController;
67 class WebBackForwardList;
68 class WebFrame;
69 class WebInspector;
70 class WebInspectorClient;
71 #if USE(TEXTURE_MAPPER_GL)
72 class AcceleratedCompositingContext;
73 #endif
74 class WebViewGroup;
75
76 WebView* kit(WebCore::Page*);
77 WebCore::Page* core(IWebView*);
78
79 interface IDropTargetHelper;
80 #if USE(DIRECT2D)
81 interface ID2D1Bitmap;
82 interface ID2D1BitmapRenderTarget;
83 interface ID2D1GdiInteropRenderTarget;
84 interface ID2D1HwndRenderTarget;
85 interface ID2D1RenderTarget;
86 #endif
87
88 class WebView final
89     : public IWebView
90     , public IWebViewPrivate5
91     , public IWebIBActions
92     , public IWebViewCSS
93     , public IWebViewEditing
94     , public IWebViewUndoableEditing
95     , public IWebViewEditingActions
96     , public IWebNotificationObserver
97     , public IDropTarget
98     , WebCore::WindowMessageListener
99     , WebCore::GraphicsLayerClient
100 #if USE(CA)
101     , WebCore::CACFLayerTreeHostClient
102 #endif
103 #if ENABLE(FULLSCREEN_API)
104     , WebCore::FullScreenControllerClient
105 #endif
106 {
107 public:
108     static WebView* createInstance();
109 protected:
110     WebView();
111     ~WebView();
112
113 public:
114     // IUnknown
115     HRESULT STDMETHODCALLTYPE QueryInterface(_In_ REFIID riid, _COM_Outptr_ void** ppvObject) override;
116     ULONG STDMETHODCALLTYPE AddRef() override;
117     ULONG STDMETHODCALLTYPE Release() override;
118
119     // IWebView
120     HRESULT STDMETHODCALLTYPE canShowMIMEType(_In_ BSTR mimeType, _Out_ BOOL*) override;
121     HRESULT STDMETHODCALLTYPE canShowMIMETypeAsHTML(_In_ BSTR mimeType, _Out_ BOOL*) override;
122     HRESULT STDMETHODCALLTYPE MIMETypesShownAsHTML(_COM_Outptr_opt_ IEnumVARIANT**) override;
123     HRESULT STDMETHODCALLTYPE setMIMETypesShownAsHTML(__inout_ecount_full(cMimeTypes) BSTR* mimeTypes, int cMimeTypes) override;
124     HRESULT STDMETHODCALLTYPE URLFromPasteboard(_In_opt_ IDataObject* pasteboard, _Deref_opt_out_ BSTR* url) override;
125     HRESULT STDMETHODCALLTYPE URLTitleFromPasteboard(_In_opt_ IDataObject* pasteboard, _Deref_opt_out_ BSTR* urlTitle) override;
126     HRESULT STDMETHODCALLTYPE initWithFrame(RECT frame, _In_ BSTR frameName, _In_ BSTR groupName) override;
127     HRESULT STDMETHODCALLTYPE setAccessibilityDelegate(_In_opt_ IAccessibilityDelegate*) override;
128     HRESULT STDMETHODCALLTYPE accessibilityDelegate(_COM_Outptr_opt_ IAccessibilityDelegate**) override;
129     HRESULT STDMETHODCALLTYPE setUIDelegate(_In_opt_ IWebUIDelegate*) override;
130     HRESULT STDMETHODCALLTYPE uiDelegate(_COM_Outptr_opt_ IWebUIDelegate**) override;
131     HRESULT STDMETHODCALLTYPE setResourceLoadDelegate(_In_opt_ IWebResourceLoadDelegate*) override;
132     HRESULT STDMETHODCALLTYPE resourceLoadDelegate(_COM_Outptr_opt_ IWebResourceLoadDelegate**) override;
133     HRESULT STDMETHODCALLTYPE setDownloadDelegate(_In_opt_ IWebDownloadDelegate*) override;
134     HRESULT STDMETHODCALLTYPE downloadDelegate(_COM_Outptr_opt_ IWebDownloadDelegate**) override;
135     HRESULT STDMETHODCALLTYPE setFrameLoadDelegate(_In_opt_ IWebFrameLoadDelegate*) override;
136     HRESULT STDMETHODCALLTYPE frameLoadDelegate(_COM_Outptr_opt_ IWebFrameLoadDelegate**) override;
137     HRESULT STDMETHODCALLTYPE setPolicyDelegate(_In_opt_ IWebPolicyDelegate*) override;
138     HRESULT STDMETHODCALLTYPE policyDelegate(_COM_Outptr_opt_ IWebPolicyDelegate**) override;
139     HRESULT STDMETHODCALLTYPE mainFrame(_COM_Outptr_opt_ IWebFrame**) override;
140     HRESULT STDMETHODCALLTYPE focusedFrame(_COM_Outptr_opt_ IWebFrame**) override;
141     HRESULT STDMETHODCALLTYPE backForwardList(_COM_Outptr_opt_ IWebBackForwardList**) override;
142     HRESULT STDMETHODCALLTYPE setMaintainsBackForwardList(BOOL) override;
143     HRESULT STDMETHODCALLTYPE goBack(_Out_ BOOL* succeeded) override;
144     HRESULT STDMETHODCALLTYPE goForward(_Out_ BOOL* succeeded) override;
145     HRESULT STDMETHODCALLTYPE goToBackForwardItem(_In_opt_ IWebHistoryItem*, _Out_ BOOL* succeeded) override;
146     HRESULT STDMETHODCALLTYPE setTextSizeMultiplier(float) override;
147     HRESULT STDMETHODCALLTYPE textSizeMultiplier(_Out_ float*) override;
148     HRESULT STDMETHODCALLTYPE setApplicationNameForUserAgent(_In_ BSTR) override;
149     HRESULT STDMETHODCALLTYPE applicationNameForUserAgent(_Deref_opt_out_ BSTR*) override;
150     HRESULT STDMETHODCALLTYPE setCustomUserAgent(_In_ BSTR) override;
151     HRESULT STDMETHODCALLTYPE customUserAgent(_Deref_opt_out_ BSTR*) override;
152     HRESULT STDMETHODCALLTYPE userAgentForURL(_In_ BSTR url, _Deref_opt_out_ BSTR* userAgent) override;
153     HRESULT STDMETHODCALLTYPE supportsTextEncoding(_Out_ BOOL*) override;
154     HRESULT STDMETHODCALLTYPE setCustomTextEncodingName(_In_ BSTR) override;
155     HRESULT STDMETHODCALLTYPE customTextEncodingName(_Deref_opt_out_ BSTR*) override;
156     HRESULT STDMETHODCALLTYPE setMediaStyle(_In_ BSTR) override;
157     HRESULT STDMETHODCALLTYPE mediaStyle(_Deref_opt_out_ BSTR*) override;
158     HRESULT STDMETHODCALLTYPE stringByEvaluatingJavaScriptFromString(_In_ BSTR script, _Deref_opt_out_ BSTR* result) override;
159     HRESULT STDMETHODCALLTYPE windowScriptObject(_COM_Outptr_opt_ IWebScriptObject**) override;
160     HRESULT STDMETHODCALLTYPE setPreferences(_In_opt_ IWebPreferences*) override;
161     HRESULT STDMETHODCALLTYPE preferences(_COM_Outptr_opt_ IWebPreferences**) override;
162     HRESULT STDMETHODCALLTYPE setPreferencesIdentifier(_In_ BSTR) override;
163     HRESULT STDMETHODCALLTYPE preferencesIdentifier(_Deref_opt_out_ BSTR*) override;
164     HRESULT STDMETHODCALLTYPE setHostWindow(_In_ HWND) override;
165     HRESULT STDMETHODCALLTYPE hostWindow(_Deref_opt_out_ HWND*) override;
166     HRESULT STDMETHODCALLTYPE searchFor(_In_ BSTR, BOOL forward, BOOL caseFlag, BOOL wrapFlag, _Out_ BOOL *found) override;
167     HRESULT STDMETHODCALLTYPE registerViewClass(_In_opt_ IWebDocumentView*, _In_opt_ IWebDocumentRepresentation*, _In_ BSTR forMIMEType) override;
168     HRESULT STDMETHODCALLTYPE setGroupName(_In_ BSTR) override;
169     HRESULT STDMETHODCALLTYPE groupName(_Deref_opt_out_ BSTR*) override;
170     HRESULT STDMETHODCALLTYPE estimatedProgress(_Out_ double*) override;
171     HRESULT STDMETHODCALLTYPE isLoading(_Out_ BOOL*) override;
172     HRESULT STDMETHODCALLTYPE elementAtPoint(_In_ LPPOINT, _COM_Outptr_opt_ IPropertyBag** elementDictionary) override;
173     HRESULT STDMETHODCALLTYPE pasteboardTypesForSelection(_COM_Outptr_opt_ IEnumVARIANT**) override;
174     HRESULT STDMETHODCALLTYPE writeSelectionWithPasteboardTypes(__inout_ecount_full(cTypes) BSTR* types, int cTypes, _In_opt_ IDataObject* pasteboard) override;
175     HRESULT STDMETHODCALLTYPE pasteboardTypesForElement(_In_opt_ IPropertyBag* elementDictionary, _COM_Outptr_opt_ IEnumVARIANT**) override;
176     HRESULT STDMETHODCALLTYPE writeElement(_In_opt_ IPropertyBag* elementDictionary, __inout_ecount_full(cWithPasteboardTypes) BSTR* withPasteboardTypes, int cWithPasteboardTypes, _In_opt_ IDataObject* pasteboard) override;
177     HRESULT STDMETHODCALLTYPE selectedText(_Deref_opt_out_ BSTR*) override;
178     HRESULT STDMETHODCALLTYPE centerSelectionInVisibleArea(_In_opt_ IUnknown* sender) override;
179     HRESULT STDMETHODCALLTYPE moveDragCaretToPoint(_In_ LPPOINT) override;
180     HRESULT STDMETHODCALLTYPE removeDragCaret() override;
181     HRESULT STDMETHODCALLTYPE setDrawsBackground(BOOL) override;
182     HRESULT STDMETHODCALLTYPE drawsBackground(_Out_ BOOL*) override;
183     HRESULT STDMETHODCALLTYPE setMainFrameURL(_In_ BSTR urlString) override;
184     HRESULT STDMETHODCALLTYPE mainFrameURL(_Deref_opt_out_ BSTR*) override;
185     HRESULT STDMETHODCALLTYPE mainFrameDocument(_COM_Outptr_opt_ IDOMDocument**) override;
186     HRESULT STDMETHODCALLTYPE mainFrameTitle(_Deref_opt_out_ BSTR*) override;
187     HRESULT STDMETHODCALLTYPE mainFrameIcon(_Deref_opt_out_ HBITMAP*) override;
188     HRESULT STDMETHODCALLTYPE registerURLSchemeAsLocal(_In_ BSTR scheme) override;
189     HRESULT STDMETHODCALLTYPE close() override;
190
191     // IWebIBActions
192     HRESULT STDMETHODCALLTYPE takeStringURLFrom(_In_opt_ IUnknown* sender) override;
193     HRESULT STDMETHODCALLTYPE stopLoading(_In_opt_ IUnknown* sender) override;
194     HRESULT STDMETHODCALLTYPE reload(_In_opt_ IUnknown* sender) override;
195     HRESULT STDMETHODCALLTYPE canGoBack(_In_opt_ IUnknown* sender, _Out_ BOOL* result) override;
196     HRESULT STDMETHODCALLTYPE goBack(_In_opt_ IUnknown* sender) override;
197     HRESULT STDMETHODCALLTYPE canGoForward(_In_opt_ IUnknown* sender, _Out_ BOOL* result) override;
198     HRESULT STDMETHODCALLTYPE goForward(_In_opt_ IUnknown* sender) override;
199     HRESULT STDMETHODCALLTYPE canMakeTextLarger(_In_opt_ IUnknown* sender, _Out_ BOOL* result) override;
200     HRESULT STDMETHODCALLTYPE makeTextLarger(_In_opt_ IUnknown* sender) override;
201     HRESULT STDMETHODCALLTYPE canMakeTextSmaller(_In_opt_ IUnknown* sender, _Out_ BOOL* result) override;
202     HRESULT STDMETHODCALLTYPE makeTextSmaller(_In_opt_ IUnknown* sender) override;
203     HRESULT STDMETHODCALLTYPE canMakeTextStandardSize(_In_opt_ IUnknown* sender, _Out_ BOOL* result) override;
204     HRESULT STDMETHODCALLTYPE makeTextStandardSize(_In_opt_ IUnknown* sender) override;
205     HRESULT STDMETHODCALLTYPE toggleContinuousSpellChecking(_In_opt_ IUnknown* sender) override;
206     HRESULT STDMETHODCALLTYPE toggleSmartInsertDelete(_In_opt_ IUnknown* sender) override;
207     HRESULT STDMETHODCALLTYPE toggleGrammarChecking(_In_opt_ IUnknown* sender) override;
208     HRESULT STDMETHODCALLTYPE reloadFromOrigin(_In_opt_ IUnknown* sender) override;
209
210     // IWebViewCSS
211     HRESULT STDMETHODCALLTYPE computedStyleForElement(_In_opt_ IDOMElement*, _In_ BSTR pseudoElement, _COM_Outptr_opt_ IDOMCSSStyleDeclaration**) override;
212
213     // IWebViewEditing
214     HRESULT STDMETHODCALLTYPE editableDOMRangeForPoint(_In_ LPPOINT, _COM_Outptr_opt_ IDOMRange**) override;
215     HRESULT STDMETHODCALLTYPE setSelectedDOMRange(_In_opt_ IDOMRange*, WebSelectionAffinity) override;
216     HRESULT STDMETHODCALLTYPE selectedDOMRange(_COM_Outptr_opt_ IDOMRange**) override;
217     HRESULT STDMETHODCALLTYPE selectionAffinity(_Out_ WebSelectionAffinity*) override;
218     HRESULT STDMETHODCALLTYPE setEditable(BOOL) override;
219     HRESULT STDMETHODCALLTYPE isEditable(_Out_ BOOL*) override;
220     HRESULT STDMETHODCALLTYPE setTypingStyle(_In_opt_ IDOMCSSStyleDeclaration*) override;
221     HRESULT STDMETHODCALLTYPE typingStyle(_COM_Outptr_opt_ IDOMCSSStyleDeclaration**) override;
222     HRESULT STDMETHODCALLTYPE setSmartInsertDeleteEnabled(BOOL) override;
223     HRESULT STDMETHODCALLTYPE smartInsertDeleteEnabled(_Out_ BOOL*) override;
224     HRESULT STDMETHODCALLTYPE setSelectTrailingWhitespaceEnabled(BOOL) override;
225     HRESULT STDMETHODCALLTYPE isSelectTrailingWhitespaceEnabled(_Out_ BOOL*) override;
226     HRESULT STDMETHODCALLTYPE setContinuousSpellCheckingEnabled(BOOL) override;
227     HRESULT STDMETHODCALLTYPE isContinuousSpellCheckingEnabled(_Out_ BOOL*) override;
228     HRESULT STDMETHODCALLTYPE spellCheckerDocumentTag(_Out_ int* tag) override;
229     HRESULT STDMETHODCALLTYPE undoManager(_COM_Outptr_opt_ IWebUndoManager**) override;
230     HRESULT STDMETHODCALLTYPE setEditingDelegate(_In_opt_ IWebEditingDelegate*) override;
231     HRESULT STDMETHODCALLTYPE editingDelegate(_COM_Outptr_opt_ IWebEditingDelegate**) override;
232     HRESULT STDMETHODCALLTYPE styleDeclarationWithText(_In_ BSTR text, _COM_Outptr_opt_ IDOMCSSStyleDeclaration**) override;
233     HRESULT STDMETHODCALLTYPE hasSelectedRange(_Out_ BOOL*) override;
234     HRESULT STDMETHODCALLTYPE cutEnabled(_Out_ BOOL*) override;
235     HRESULT STDMETHODCALLTYPE copyEnabled(_Out_ BOOL*) override;
236     HRESULT STDMETHODCALLTYPE pasteEnabled(_Out_ BOOL*) override;
237     HRESULT STDMETHODCALLTYPE deleteEnabled(_Out_ BOOL*) override;
238     HRESULT STDMETHODCALLTYPE editingEnabled(_Out_ BOOL*) override;
239     HRESULT STDMETHODCALLTYPE isGrammarCheckingEnabled(_Out_ BOOL*) override;
240     HRESULT STDMETHODCALLTYPE setGrammarCheckingEnabled(BOOL) override;
241     HRESULT STDMETHODCALLTYPE setPageSizeMultiplier(float) override;
242     HRESULT STDMETHODCALLTYPE pageSizeMultiplier(_Out_ float*) override;
243     HRESULT STDMETHODCALLTYPE canZoomPageIn(_In_opt_ IUnknown* sender, _Out_ BOOL* result) override;
244     HRESULT STDMETHODCALLTYPE zoomPageIn(_In_opt_ IUnknown* sender) override;
245     HRESULT STDMETHODCALLTYPE canZoomPageOut(_In_opt_ IUnknown* sender, _Out_ BOOL* result) override;
246     HRESULT STDMETHODCALLTYPE zoomPageOut(_In_opt_ IUnknown* sender) override;
247     HRESULT STDMETHODCALLTYPE canResetPageZoom(_In_opt_ IUnknown* sender, _Out_ BOOL* result) override;
248     HRESULT STDMETHODCALLTYPE resetPageZoom(_In_opt_ IUnknown* sender) override;
249
250     // IWebViewUndoableEditing
251     HRESULT STDMETHODCALLTYPE replaceSelectionWithNode(_In_opt_ IDOMNode*) override;
252     HRESULT STDMETHODCALLTYPE replaceSelectionWithText(_In_ BSTR) override;
253     HRESULT STDMETHODCALLTYPE replaceSelectionWithMarkupString(_In_ BSTR) override;
254     HRESULT STDMETHODCALLTYPE replaceSelectionWithArchive(_In_opt_ IWebArchive*) override;
255     HRESULT STDMETHODCALLTYPE deleteSelection() override;
256     HRESULT STDMETHODCALLTYPE clearSelection() override;
257     HRESULT STDMETHODCALLTYPE applyStyle(_In_opt_ IDOMCSSStyleDeclaration*) override;
258
259     // IWebViewEditingActions
260     HRESULT STDMETHODCALLTYPE copy(_In_opt_ IUnknown* sender) override;
261     HRESULT STDMETHODCALLTYPE cut(_In_opt_ IUnknown* sender) override;
262     HRESULT STDMETHODCALLTYPE paste(_In_opt_ IUnknown* sender) override;
263     HRESULT STDMETHODCALLTYPE copyURL(_In_ BSTR url) override;
264     HRESULT STDMETHODCALLTYPE copyFont(_In_opt_ IUnknown* sender) override;
265     HRESULT STDMETHODCALLTYPE pasteFont(_In_opt_ IUnknown* sender) override;
266     HRESULT STDMETHODCALLTYPE delete_(_In_opt_ IUnknown* sender) override;
267     HRESULT STDMETHODCALLTYPE pasteAsPlainText(_In_opt_ IUnknown* sender) override;
268     HRESULT STDMETHODCALLTYPE pasteAsRichText(_In_opt_ IUnknown* sender) override;
269     HRESULT STDMETHODCALLTYPE changeFont(_In_opt_ IUnknown* sender) override;
270     HRESULT STDMETHODCALLTYPE changeAttributes(_In_opt_ IUnknown* sender) override;
271     HRESULT STDMETHODCALLTYPE changeDocumentBackgroundColor(_In_opt_ IUnknown* sender) override;
272     HRESULT STDMETHODCALLTYPE changeColor(_In_opt_ IUnknown* sender) override;
273     HRESULT STDMETHODCALLTYPE alignCenter(_In_opt_ IUnknown* sender) override;
274     HRESULT STDMETHODCALLTYPE alignJustified(_In_opt_ IUnknown* sender) override;
275     HRESULT STDMETHODCALLTYPE alignLeft(_In_opt_ IUnknown* sender) override;
276     HRESULT STDMETHODCALLTYPE alignRight(_In_opt_ IUnknown* sender) override;
277     HRESULT STDMETHODCALLTYPE checkSpelling(_In_opt_ IUnknown* sender) override;
278     HRESULT STDMETHODCALLTYPE showGuessPanel(_In_opt_ IUnknown* sender) override;
279     HRESULT STDMETHODCALLTYPE performFindPanelAction(_In_opt_ IUnknown* sender) override;
280     HRESULT STDMETHODCALLTYPE startSpeaking(_In_opt_ IUnknown* sender) override;
281     HRESULT STDMETHODCALLTYPE stopSpeaking(_In_opt_ IUnknown* sender) override;
282
283     // IWebNotificationObserver
284     HRESULT STDMETHODCALLTYPE onNotify(_In_opt_ IWebNotification*) override;
285
286     // IWebViewPrivate
287     HRESULT STDMETHODCALLTYPE MIMETypeForExtension(_In_ BSTR extension, _Deref_opt_out_ BSTR *mimeType) override;
288     HRESULT STDMETHODCALLTYPE setCustomDropTarget(_In_opt_ IDropTarget*) override;
289     HRESULT STDMETHODCALLTYPE removeCustomDropTarget() override;
290     HRESULT STDMETHODCALLTYPE setInViewSourceMode(BOOL) override;
291     HRESULT STDMETHODCALLTYPE inViewSourceMode(_Out_ BOOL*) override;
292     HRESULT STDMETHODCALLTYPE viewWindow(_Deref_opt_out_ HWND*) override;
293     HRESULT STDMETHODCALLTYPE setFormDelegate(_In_opt_ IWebFormDelegate*) override;
294     HRESULT STDMETHODCALLTYPE formDelegate(_COM_Outptr_opt_ IWebFormDelegate**) override;
295     HRESULT STDMETHODCALLTYPE setFrameLoadDelegatePrivate(_In_opt_ IWebFrameLoadDelegatePrivate*) override;
296     HRESULT STDMETHODCALLTYPE frameLoadDelegatePrivate(_COM_Outptr_opt_ IWebFrameLoadDelegatePrivate**) override;
297     HRESULT STDMETHODCALLTYPE scrollOffset(_Out_ LPPOINT) override;
298     HRESULT STDMETHODCALLTYPE scrollBy(_In_ LPPOINT) override;
299     HRESULT STDMETHODCALLTYPE visibleContentRect(_Out_ LPRECT) override;
300     HRESULT STDMETHODCALLTYPE updateFocusedAndActiveState() override;
301     HRESULT STDMETHODCALLTYPE executeCoreCommandByName(_In_ BSTR name, _In_ BSTR value) override;
302     HRESULT STDMETHODCALLTYPE clearMainFrameName() override;
303     HRESULT STDMETHODCALLTYPE markAllMatchesForText(_In_ BSTR search, BOOL caseSensitive, BOOL highlight, UINT limit, _Out_ UINT* matches) override;
304     HRESULT STDMETHODCALLTYPE unmarkAllTextMatches() override;
305     HRESULT STDMETHODCALLTYPE rectsForTextMatches(_COM_Outptr_opt_ IEnumTextMatches**) override;
306     HRESULT STDMETHODCALLTYPE generateSelectionImage(BOOL forceWhiteText, _Deref_opt_out_ HBITMAP* hBitmap) override;
307     HRESULT STDMETHODCALLTYPE selectionRect(_Inout_ RECT*) override;
308     HRESULT STDMETHODCALLTYPE DragEnter(IDataObject*, DWORD grfKeyState, POINTL, DWORD* pdwEffect) override;
309     HRESULT STDMETHODCALLTYPE DragOver(DWORD grfKeyState, POINTL pt, DWORD* pdwEffect) override;
310     HRESULT STDMETHODCALLTYPE DragLeave() override;
311     HRESULT STDMETHODCALLTYPE Drop(IDataObject*, DWORD grfKeyState, POINTL, DWORD* pdwEffect) override;
312     HRESULT STDMETHODCALLTYPE canHandleRequest(_In_opt_ IWebURLRequest*, _Out_ BOOL*) override;
313     HRESULT STDMETHODCALLTYPE standardUserAgentWithApplicationName(_In_ BSTR applicationName, _Deref_opt_out_ BSTR *groupName) override;
314     HRESULT STDMETHODCALLTYPE clearFocusNode() override;
315     HRESULT STDMETHODCALLTYPE setInitialFocus(BOOL forward) override;
316     HRESULT STDMETHODCALLTYPE setTabKeyCyclesThroughElements(BOOL) override;
317     HRESULT STDMETHODCALLTYPE tabKeyCyclesThroughElements(_Out_ BOOL*) override;
318     HRESULT STDMETHODCALLTYPE setAllowSiteSpecificHacks(BOOL) override;
319     HRESULT STDMETHODCALLTYPE addAdditionalPluginDirectory(_In_ BSTR) override;
320     HRESULT STDMETHODCALLTYPE loadBackForwardListFromOtherView(_In_opt_ IWebView*) override;
321     HRESULT STDMETHODCALLTYPE inspector(_COM_Outptr_opt_ IWebInspector**) override;
322     HRESULT STDMETHODCALLTYPE clearUndoRedoOperations(void) override;
323     HRESULT STDMETHODCALLTYPE shouldClose(_Out_ BOOL*) override;
324     HRESULT STDMETHODCALLTYPE setProhibitsMainFrameScrolling(BOOL) override;
325     HRESULT STDMETHODCALLTYPE setShouldApplyMacFontAscentHack(BOOL) override;
326     HRESULT STDMETHODCALLTYPE windowAncestryDidChange() override;
327     HRESULT STDMETHODCALLTYPE paintDocumentRectToContext(RECT, _In_ HDC) override;
328     HRESULT STDMETHODCALLTYPE paintScrollViewRectToContextAtPoint(RECT, POINT, _In_ HDC) override;
329     HRESULT STDMETHODCALLTYPE reportException(_In_ JSContextRef, _In_ JSValueRef exception) override;
330     HRESULT STDMETHODCALLTYPE elementFromJS(_In_ JSContextRef, _In_ JSValueRef nodeObject, _COM_Outptr_opt_ IDOMElement**) override;
331     HRESULT STDMETHODCALLTYPE setCustomHTMLTokenizerTimeDelay(double) override;
332     HRESULT STDMETHODCALLTYPE setCustomHTMLTokenizerChunkSize(int) override;
333     HRESULT STDMETHODCALLTYPE backingStore(_Deref_opt_out_ HBITMAP*) override;
334     HRESULT STDMETHODCALLTYPE setTransparent(BOOL) override;
335     HRESULT STDMETHODCALLTYPE transparent(_Out_ BOOL*) override;
336     HRESULT STDMETHODCALLTYPE setDefersCallbacks(BOOL) override;
337     HRESULT STDMETHODCALLTYPE defersCallbacks(_Out_ BOOL*) override;
338     HRESULT STDMETHODCALLTYPE globalHistoryItem(_COM_Outptr_opt_ IWebHistoryItem**) override;
339     HRESULT STDMETHODCALLTYPE setAlwaysUsesComplexTextCodePath(BOOL) override;
340     HRESULT STDMETHODCALLTYPE alwaysUsesComplexTextCodePath(_Out_ BOOL*) override;
341     HRESULT STDMETHODCALLTYPE setCookieEnabled(BOOL) override;
342     HRESULT STDMETHODCALLTYPE cookieEnabled(_Out_ BOOL*) override;
343     HRESULT STDMETHODCALLTYPE setMediaVolume(float) override;
344     HRESULT STDMETHODCALLTYPE mediaVolume(_Out_ float* volume) override;
345     HRESULT STDMETHODCALLTYPE registerEmbeddedViewMIMEType(_In_ BSTR) override;
346     HRESULT STDMETHODCALLTYPE setMemoryCacheDelegateCallsEnabled(BOOL) override;
347     HRESULT STDMETHODCALLTYPE setJavaScriptURLsAreAllowed(BOOL) override;
348     HRESULT STDMETHODCALLTYPE setCanStartPlugins(BOOL) override;
349     HRESULT STDMETHODCALLTYPE addUserScriptToGroup(_In_ BSTR groupName, _In_opt_ IWebScriptWorld*, _In_ BSTR source, _In_ BSTR url,
350         unsigned whitelistCount, __inout_ecount_full(whitelistCount) BSTR* whitelist, unsigned blacklistCount,
351         __inout_ecount_full(blacklistCount) BSTR* blacklist, WebUserScriptInjectionTime) override;
352     HRESULT STDMETHODCALLTYPE addUserStyleSheetToGroup(_In_ BSTR groupName, _In_opt_ IWebScriptWorld*, _In_ BSTR source, _In_ BSTR url,
353         unsigned whitelistCount, __inout_ecount_full(whitelistCount) BSTR* whitelist, unsigned blacklistCount, __inout_ecount_full(blacklistCount) BSTR* blacklist) override;
354     HRESULT STDMETHODCALLTYPE removeUserScriptFromGroup(_In_ BSTR groupName, _In_opt_ IWebScriptWorld*, _In_ BSTR url) override;
355     HRESULT STDMETHODCALLTYPE removeUserStyleSheetFromGroup(_In_ BSTR groupName, _In_opt_ IWebScriptWorld*, _In_ BSTR url) override;
356     HRESULT STDMETHODCALLTYPE removeUserScriptsFromGroup(_In_ BSTR groupName, _In_opt_ IWebScriptWorld*) override;
357     HRESULT STDMETHODCALLTYPE removeUserStyleSheetsFromGroup(_In_ BSTR groupName, _In_opt_ IWebScriptWorld*) override;
358     HRESULT STDMETHODCALLTYPE removeAllUserContentFromGroup(_In_ BSTR groupName) override;
359     HRESULT STDMETHODCALLTYPE unused1() override;
360     HRESULT STDMETHODCALLTYPE unused2() override;
361     HRESULT STDMETHODCALLTYPE invalidateBackingStore(_In_opt_ const RECT*) override;
362     HRESULT STDMETHODCALLTYPE addOriginAccessWhitelistEntry(_In_ BSTR sourceOrigin, _In_ BSTR destinationProtocol, _In_ BSTR destinationHost, BOOL allowDestinationSubdomains) override;
363     HRESULT STDMETHODCALLTYPE removeOriginAccessWhitelistEntry(_In_ BSTR sourceOrigin, _In_ BSTR destinationProtocol, _In_ BSTR destinationHost, BOOL allowDestinationSubdomains) override;
364     HRESULT STDMETHODCALLTYPE resetOriginAccessWhitelists() override;
365     HRESULT STDMETHODCALLTYPE setHistoryDelegate(_In_ IWebHistoryDelegate*) override;
366     HRESULT STDMETHODCALLTYPE historyDelegate(_COM_Outptr_opt_ IWebHistoryDelegate**) override;
367     HRESULT STDMETHODCALLTYPE addVisitedLinks(__inout_ecount_full(visitedURLCount) BSTR* visitedURLs, unsigned visitedURLCount) override;
368     HRESULT STDMETHODCALLTYPE unused3() override;
369     HRESULT STDMETHODCALLTYPE unused4() override;
370     HRESULT STDMETHODCALLTYPE unused5() override;
371     HRESULT STDMETHODCALLTYPE setGeolocationProvider(_In_opt_ IWebGeolocationProvider*) override;
372     HRESULT STDMETHODCALLTYPE geolocationProvider(_COM_Outptr_opt_ IWebGeolocationProvider**) override;
373     HRESULT STDMETHODCALLTYPE geolocationDidChangePosition(_In_opt_ IWebGeolocationPosition*) override;
374     HRESULT STDMETHODCALLTYPE geolocationDidFailWithError(_In_opt_ IWebError*) override;
375     HRESULT STDMETHODCALLTYPE setDomainRelaxationForbiddenForURLScheme(BOOL forbidden, _In_ BSTR scheme) override;
376     HRESULT STDMETHODCALLTYPE registerURLSchemeAsSecure(_In_ BSTR) override;
377     HRESULT STDMETHODCALLTYPE registerURLSchemeAsAllowingLocalStorageAccessInPrivateBrowsing(_In_ BSTR) override;
378     HRESULT STDMETHODCALLTYPE registerURLSchemeAsAllowingDatabaseAccessInPrivateBrowsing(_In_ BSTR) override;
379     HRESULT STDMETHODCALLTYPE nextDisplayIsSynchronous() override;
380     HRESULT STDMETHODCALLTYPE defaultMinimumTimerInterval(_Out_ double*) override;
381     HRESULT STDMETHODCALLTYPE setMinimumTimerInterval(double) override;
382     HRESULT STDMETHODCALLTYPE httpPipeliningEnabled(_Out_ BOOL*) override;
383     HRESULT STDMETHODCALLTYPE setHTTPPipeliningEnabled(BOOL) override;
384     HRESULT STDMETHODCALLTYPE setUsesLayeredWindow(BOOL) override;
385     HRESULT STDMETHODCALLTYPE usesLayeredWindow(_Out_ BOOL*) override;
386
387     // IWebViewPrivate2
388     HRESULT STDMETHODCALLTYPE setLoadResourcesSerially(BOOL) override;
389     HRESULT STDMETHODCALLTYPE scaleWebView(double scale, POINT origin) override;
390     HRESULT STDMETHODCALLTYPE dispatchPendingLoadRequests() override;
391     HRESULT STDMETHODCALLTYPE setCustomBackingScaleFactor(double) override;
392     HRESULT STDMETHODCALLTYPE backingScaleFactor(_Out_ double*) override;
393     HRESULT STDMETHODCALLTYPE addUserScriptToGroup(_In_ BSTR groupName, _In_opt_ IWebScriptWorld*, _In_ BSTR source, _In_ BSTR url,
394         unsigned whitelistCount, __inout_ecount_full(whitelistCount) BSTR* whitelist, unsigned blacklistCount, __inout_ecount_full(blacklistCount) BSTR* blacklist, WebUserScriptInjectionTime, WebUserContentInjectedFrames) override;
395     HRESULT STDMETHODCALLTYPE addUserStyleSheetToGroup(_In_ BSTR groupName, _In_opt_ IWebScriptWorld*, _In_ BSTR source, _In_ BSTR url,
396         unsigned whitelistCount, __inout_ecount_full(whitelistCount) BSTR* whitelist, unsigned blacklistCount, __inout_ecount_full(blacklistCount) BSTR* blacklist, WebUserContentInjectedFrames) override;
397
398     // IWebViewPrivate3
399     HRESULT STDMETHODCALLTYPE layerTreeAsString(_Deref_opt_out_ BSTR*) override;
400     HRESULT STDMETHODCALLTYPE findString(_In_ BSTR, WebFindOptions, _Deref_opt_out_ BOOL*) override;
401
402     // IWebViewPrivate4
403     HRESULT STDMETHODCALLTYPE setVisibilityState(WebPageVisibilityState) override;
404
405     // IWebViewPrivate5
406     HRESULT STDMETHODCALLTYPE exitFullscreenIfNeeded() override;
407
408     // WebView
409     bool shouldUseEmbeddedView(const WTF::String& mimeType) const;
410
411     WebCore::Page* page();
412     bool handleMouseEvent(UINT, WPARAM, LPARAM);
413     void setMouseActivated(bool flag) { m_mouseActivated = flag; }
414     bool handleContextMenuEvent(WPARAM, LPARAM);
415     HMENU createContextMenu();
416     bool onMeasureItem(WPARAM, LPARAM);
417     bool onDrawItem(WPARAM, LPARAM);
418     bool onInitMenuPopup(WPARAM, LPARAM);
419     bool onUninitMenuPopup(WPARAM, LPARAM);
420     void onMenuCommand(WPARAM, LPARAM);
421     bool mouseWheel(WPARAM, LPARAM, bool isMouseHWheel);
422     bool verticalScroll(WPARAM, LPARAM);
423     bool horizontalScroll(WPARAM, LPARAM);
424     bool gesture(WPARAM, LPARAM);
425     bool gestureNotify(WPARAM, LPARAM);
426     bool execCommand(WPARAM wParam, LPARAM lParam);
427     bool keyDown(WPARAM, LPARAM, bool systemKeyDown = false);
428     bool keyUp(WPARAM, LPARAM, bool systemKeyDown = false);
429     bool keyPress(WPARAM, LPARAM, bool systemKeyDown = false);
430     void paintWithDirect2D();
431     void paint(HDC, LPARAM);
432     void paintIntoWindow(HDC bitmapDC, HDC windowDC, const WebCore::IntRect& dirtyRect);
433     bool ensureBackingStore();
434     void addToDirtyRegion(const WebCore::IntRect&);
435     void addToDirtyRegion(GDIObject<HRGN>);
436     void scrollBackingStore(WebCore::FrameView*, int dx, int dy, const WebCore::IntRect& scrollViewRect, const WebCore::IntRect& clipRect);
437     void deleteBackingStore();
438     void repaint(const WebCore::IntRect&, bool contentChanged, bool immediate = false, bool repaintContentOnly = false);
439     void frameRect(RECT* rect);
440     void closeWindow();
441     void closeWindowSoon();
442     void closeWindowTimerFired();
443     bool didClose() const { return m_didClose; }
444
445     bool transparent() const { return m_transparent; }
446     bool usesLayeredWindow() const { return m_usesLayeredWindow; }
447     bool needsDisplay() const { return m_needsDisplay; }
448
449     bool onIMEStartComposition();
450     bool onIMEComposition(LPARAM);
451     bool onIMEEndComposition();
452     bool onIMEChar(WPARAM, LPARAM);
453     bool onIMENotify(WPARAM, LPARAM, LRESULT*);
454     LRESULT onIMERequest(WPARAM, LPARAM);
455     bool onIMESelect(WPARAM, LPARAM);
456     bool onIMESetContext(WPARAM, LPARAM);
457     void selectionChanged();
458     void resetIME(WebCore::Frame*);
459     void setInputMethodState(bool);
460
461     HRESULT registerDragDrop();
462     HRESULT revokeDragDrop();
463
464     // Convenient to be able to violate the rules of COM here for easy movement to the frame.
465     WebFrame* topLevelFrame() const { return m_mainFrame; }
466     const WTF::String& userAgentForKURL(const URL& url);
467
468     static bool canHandleRequest(const WebCore::ResourceRequest&);
469
470     static WTF::String standardUserAgentWithApplicationName(const WTF::String&);
471
472     void setIsBeingDestroyed();
473     bool isBeingDestroyed() const { return m_isBeingDestroyed; }
474
475     const char* interpretKeyEvent(const WebCore::KeyboardEvent*);
476     bool handleEditingKeyboardEvent(WebCore::KeyboardEvent&);
477
478     bool isPainting() const { return m_paintCount > 0; }
479
480     void setToolTip(const WTF::String&);
481
482     void registerForIconNotification(bool listen);
483     void dispatchDidReceiveIconFromWebFrame(WebFrame*);
484
485     HRESULT notifyDidAddIcon(IWebNotification*);
486     HRESULT notifyPreferencesChanged(IWebNotification*);
487
488     static void setCacheModel(WebCacheModel);
489     static WebCacheModel cacheModel();
490     static bool didSetCacheModel();
491     static WebCacheModel maxCacheModelInAnyInstance();
492
493     void updateActiveStateSoon() const;
494     void deleteBackingStoreSoon();
495     void cancelDeleteBackingStoreSoon();
496
497     HWND topLevelParent() const { return m_topLevelParent; }
498     HWND viewWindow() const { return m_viewWindow; }
499
500     void updateActiveState();
501
502     bool onGetObject(WPARAM, LPARAM, LRESULT&) const;
503     static STDMETHODIMP AccessibleObjectFromWindow(HWND, DWORD objectID, REFIID, void** ppObject);
504
505     void downloadURL(const URL&);
506
507     void flushPendingGraphicsLayerChangesSoon();
508     void setRootChildLayer(WebCore::GraphicsLayer*);
509
510 #if PLATFORM(WIN) && USE(AVFOUNDATION)
511     WebCore::GraphicsDeviceAdapter* graphicsDeviceAdapter() const;
512 #endif
513
514     void enterVideoFullscreenForVideoElement(WebCore::HTMLVideoElement&);
515     void exitVideoFullscreenForVideoElement(WebCore::HTMLVideoElement&);
516
517     void setLastCursor(HCURSOR cursor) { m_lastSetCursor = cursor; }
518
519 #if ENABLE(FULLSCREEN_API)
520     bool supportsFullScreenForElement(const WebCore::Element*, bool withKeyboard) const;
521     bool isFullScreen() const;
522     WebCore::FullScreenController* fullScreenController();
523     void setFullScreenElement(RefPtr<WebCore::Element>&&);
524     WebCore::Element* fullScreenElement() const { return m_fullScreenElement.get(); }
525 #endif
526
527     bool canShowMIMEType(const String& mimeType);
528     bool canShowMIMETypeAsHTML(const String& mimeType);
529
530     // Used by TextInputController in DumpRenderTree
531     HRESULT STDMETHODCALLTYPE setCompositionForTesting(_In_ BSTR composition, UINT from, UINT length) override;
532     HRESULT STDMETHODCALLTYPE hasCompositionForTesting(_Out_ BOOL*) override;
533     HRESULT STDMETHODCALLTYPE confirmCompositionForTesting(_In_ BSTR composition) override;
534     HRESULT STDMETHODCALLTYPE compositionRangeForTesting(_Out_ UINT* startPosition, _Out_ UINT* length) override;
535     HRESULT STDMETHODCALLTYPE firstRectForCharacterRangeForTesting(UINT location, UINT length, _Out_ RECT* resultRect) override;
536     HRESULT STDMETHODCALLTYPE selectedRangeForTesting(_Out_ UINT* location, _Out_ UINT* length) override;
537
538     float deviceScaleFactor() const override;
539
540 private:
541     void setZoomMultiplier(float multiplier, bool isTextOnly);
542     float zoomMultiplier(bool isTextOnly);
543     bool canZoomIn(bool isTextOnly);
544     HRESULT zoomIn(bool isTextOnly);
545     bool canZoomOut(bool isTextOnly);
546     HRESULT zoomOut(bool isTextOnly);
547     bool canResetZoom(bool isTextOnly);
548     HRESULT resetZoom(bool isTextOnly);
549     bool active();
550
551     void sizeChanged(const WebCore::IntSize&);
552     bool dpiChanged(float, const WebCore::IntSize&);
553
554     enum WindowsToPaint { PaintWebViewOnly, PaintWebViewAndChildren };
555     void paintIntoBackingStore(WebCore::FrameView*, HDC bitmapDC, const WebCore::IntRect& dirtyRect, WindowsToPaint);
556     void updateBackingStore(WebCore::FrameView*, HDC = 0, bool backingStoreCompletelyDirty = false, WindowsToPaint = PaintWebViewOnly);
557
558     void performLayeredWindowUpdate();
559
560     WebCore::DragOperation keyStateToDragOperation(DWORD grfKeyState) const;
561
562     // FIXME: This variable is part of a workaround. The drop effect (pdwEffect) passed to Drop is incorrect. 
563     // We set this variable in DragEnter and DragOver so that it can be used in Drop to set the correct drop effect. 
564     // Thus, on return from DoDragDrop we have the correct pdwEffect for the drag-and-drop operation.
565     // (see https://bugs.webkit.org/show_bug.cgi?id=29264)
566     DWORD m_lastDropEffect { 0 };
567
568     // GraphicsLayerClient
569     void notifyAnimationStarted(const WebCore::GraphicsLayer*, const String&, MonotonicTime) override;
570     void notifyFlushRequired(const WebCore::GraphicsLayer*) override;
571     void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::FloatRect& inClip, WebCore::GraphicsLayerPaintBehavior) override;
572
573 #if USE(CA)
574     // CACFLayerTreeHostClient
575     void flushPendingGraphicsLayerChanges() override;
576 #endif
577
578     bool m_shouldInvertColors { false };
579     void setShouldInvertColors(bool);
580
581 protected:
582     static bool registerWebViewWindowClass();
583     static LRESULT CALLBACK WebViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
584
585     void updateWindowIfNeeded(HWND hWnd, UINT message);
586     bool paintCompositedContentToHDC(HDC);
587
588     HIMC getIMMContext();
589     void releaseIMMContext(HIMC);
590     static bool allowSiteSpecificHacks() { return s_allowSiteSpecificHacks; } 
591     void preflightSpellChecker();
592     bool continuousCheckingAllowed();
593     void initializeToolTipWindow();
594     void prepareCandidateWindow(WebCore::Frame*, HIMC);
595     void updateSelectionForIME();
596     LRESULT onIMERequestCharPosition(WebCore::Frame*, IMECHARPOSITION*);
597     LRESULT onIMERequestReconvertString(WebCore::Frame*, RECONVERTSTRING*);
598     bool developerExtrasEnabled() const;
599
600     bool shouldInitializeTrackPointHack();
601
602     // AllWebViewSet functions
603     void addToAllWebViewsSet();
604     void removeFromAllWebViewsSet();
605
606     void windowReceivedMessage(HWND, UINT message, WPARAM, LPARAM) override;
607
608 #if ENABLE(FULLSCREEN_API)
609     HWND fullScreenClientWindow() const override;
610     HWND fullScreenClientParentWindow() const override;
611     void fullScreenClientSetParentWindow(HWND) override;
612     void fullScreenClientWillEnterFullScreen() override;
613     void fullScreenClientDidEnterFullScreen() override;
614     void fullScreenClientWillExitFullScreen() override;
615     void fullScreenClientDidExitFullScreen() override;
616     void fullScreenClientForceRepaint() override;
617     void fullScreenClientSaveScrollPosition() override;
618     void fullScreenClientRestoreScrollPosition() override;
619 #endif
620
621     ULONG m_refCount { 0 };
622 #if !ASSERT_DISABLED
623     bool m_deletionHasBegun { false };
624 #endif
625     HWND m_hostWindow { nullptr };
626     HWND m_viewWindow { nullptr };
627     WebFrame* m_mainFrame { nullptr };
628     WebCore::Page* m_page { nullptr };
629     WebInspectorClient* m_inspectorClient { nullptr };
630
631     HMENU m_currentContextMenu { nullptr };
632     RefPtr<WebCore::SharedGDIObject<HBITMAP>> m_backingStoreBitmap;
633 #if USE(DIRECT2D)
634     COMPtr<ID2D1HwndRenderTarget> m_renderTarget;
635     COMPtr<ID2D1Bitmap> m_backingStoreD2DBitmap;
636     COMPtr<ID2D1BitmapRenderTarget> m_backingStoreRenderTarget;
637     COMPtr<ID2D1GdiInteropRenderTarget> m_backingStoreGdiInterop;
638 #endif
639     SIZE m_backingStoreSize;
640     RefPtr<WebCore::SharedGDIObject<HRGN>> m_backingStoreDirtyRegion;
641
642     COMPtr<IAccessibilityDelegate> m_accessibilityDelegate;
643     COMPtr<IWebEditingDelegate> m_editingDelegate;
644     COMPtr<IWebFrameLoadDelegate> m_frameLoadDelegate;
645     COMPtr<IWebFrameLoadDelegatePrivate> m_frameLoadDelegatePrivate;
646     COMPtr<IWebUIDelegate> m_uiDelegate;
647     COMPtr<IWebUIDelegatePrivate> m_uiDelegatePrivate;
648     COMPtr<IWebFormDelegate> m_formDelegate;
649     COMPtr<IWebPolicyDelegate> m_policyDelegate;
650     COMPtr<IWebResourceLoadDelegate> m_resourceLoadDelegate;
651     COMPtr<IWebDownloadDelegate> m_downloadDelegate;
652     COMPtr<IWebHistoryDelegate> m_historyDelegate;
653     COMPtr<WebPreferences> m_preferences;
654     COMPtr<WebInspector> m_webInspector;
655     COMPtr<IWebGeolocationProvider> m_geolocationProvider;
656
657     bool m_userAgentOverridden { false };
658     bool m_useBackForwardList { true };
659     WTF::String m_userAgentCustom;
660     WTF::String m_userAgentStandard;
661     float m_zoomMultiplier { 1.0f };
662     float m_customDeviceScaleFactor { 0 };
663     bool m_zoomsTextOnly { false };
664     WTF::String m_overrideEncoding;
665     WTF::String m_applicationName;
666     bool m_mouseActivated { false };
667     // WebCore dragging logic needs to be able to inspect the drag data
668     // this is updated in DragEnter/Leave/Drop
669     COMPtr<IDataObject> m_dragData;
670     COMPtr<IDropTargetHelper> m_dropTargetHelper;
671     UChar m_currentCharacterCode { 0 };
672     bool m_isBeingDestroyed { false };
673     unsigned m_paintCount { 0 };
674     bool m_hasSpellCheckerDocumentTag { false };
675     bool m_didClose { false };
676     bool m_hasCustomDropTarget { false };
677     unsigned m_inIMEComposition { 0 };
678     HWND m_toolTipHwnd { nullptr };
679     WTF::String m_toolTip;
680     bool m_deleteBackingStoreTimerActive { false };
681
682     bool m_transparent { false };
683
684     static bool s_allowSiteSpecificHacks;
685
686     WebCore::SuspendableTimer* m_closeWindowTimer { nullptr };
687     std::unique_ptr<TRACKMOUSEEVENT> m_mouseOutTracker;
688
689     HWND m_topLevelParent { nullptr };
690
691     std::unique_ptr<HashSet<WTF::String>> m_embeddedViewMIMETypes;
692
693     //Variables needed to store gesture information
694     RefPtr<WebCore::Node> m_gestureTargetNode;
695     long m_lastPanX { 0 };
696     long m_lastPanY { 0 };
697     long m_xOverpan { 0 };
698     long m_yOverpan { 0 };
699
700 #if ENABLE(VIDEO)
701     std::unique_ptr<FullscreenVideoController> m_fullScreenVideoController;
702 #endif
703
704     bool isAcceleratedCompositing() const { return m_isAcceleratedCompositing; }
705     void setAcceleratedCompositing(bool);
706 #if USE(CA)
707     RefPtr<WebCore::CACFLayerTreeHost> m_layerTreeHost;
708     RefPtr<WebCore::GraphicsLayer> m_backingLayer;
709 #elif USE(TEXTURE_MAPPER_GL)
710     std::unique_ptr<AcceleratedCompositingContext> m_acceleratedCompositingContext;
711 #endif
712     bool m_isAcceleratedCompositing { false };
713
714     bool m_nextDisplayIsSynchronous { false };
715     bool m_usesLayeredWindow { false };
716     bool m_needsDisplay { false };
717
718     HCURSOR m_lastSetCursor { nullptr };
719
720 #if ENABLE(FULLSCREEN_API)
721     RefPtr<WebCore::Element> m_fullScreenElement;
722     std::unique_ptr<WebCore::FullScreenController> m_fullscreenController;
723     WebCore::IntPoint m_scrollPosition;
724 #endif
725
726     RefPtr<WebViewGroup> m_webViewGroup;
727 };
728
729 #endif