Fix Windows build.
[WebKit-https.git] / Source / WebKit2 / UIProcess / win / WebView.h
1 /*
2  * Copyright (C) 2010 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef WebView_h
27 #define WebView_h
28
29 #include "APIObject.h"
30 #include "PageClient.h"
31 #include "WKView.h"
32 #include "WebPageProxy.h"
33 #include <ShlObj.h>
34 #include <WebCore/COMPtr.h>
35 #include <WebCore/DragActions.h>
36 #include <WebCore/DragData.h>
37 #include <WebCore/WindowMessageListener.h>
38 #include <wtf/Forward.h>
39 #include <wtf/PassRefPtr.h>
40 #include <wtf/RefPtr.h>
41
42 interface IDropTargetHelper;
43
44 namespace WebKit {
45
46 class DrawingAreaProxy;
47
48 class WebView : public APIObject, public PageClient, WebCore::WindowMessageListener, public IDropTarget {
49 public:
50     static PassRefPtr<WebView> create(RECT rect, WebContext* context, WebPageGroup* pageGroup, HWND parentWindow)
51     {
52         RefPtr<WebView> webView = adoptRef(new WebView(rect, context, pageGroup, parentWindow));
53         webView->initialize();
54         return webView;
55     }
56     ~WebView();
57
58     HWND window() const { return m_window; }
59     void setParentWindow(HWND);
60     void windowAncestryDidChange();
61     void setIsInWindow(bool);
62     void setOverrideCursor(HCURSOR);
63     void setInitialFocus(bool forward);
64     void setFindIndicatorCallback(WKViewFindIndicatorCallback, void*);
65     WKViewFindIndicatorCallback getFindIndicatorCallback(void**);
66     void initialize();
67
68     // IUnknown
69     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
70     virtual ULONG STDMETHODCALLTYPE AddRef(void);
71     virtual ULONG STDMETHODCALLTYPE Release(void);
72
73     // IDropTarget
74     virtual HRESULT STDMETHODCALLTYPE DragEnter(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
75     virtual HRESULT STDMETHODCALLTYPE DragOver(DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
76     virtual HRESULT STDMETHODCALLTYPE DragLeave();
77     virtual HRESULT STDMETHODCALLTYPE Drop(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
78
79     WebPageProxy* page() const { return m_page.get(); }
80
81 private:
82     WebView(RECT, WebContext*, WebPageGroup*, HWND parentWindow);
83
84     virtual Type type() const { return TypeView; }
85
86     static bool registerWebViewWindowClass();
87     static LRESULT CALLBACK WebViewWndProc(HWND, UINT, WPARAM, LPARAM);
88     LRESULT wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
89
90     void setWasActivatedByMouseEvent(bool flag) { m_wasActivatedByMouseEvent = flag; }
91     LRESULT onMouseEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
92     LRESULT onWheelEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
93     LRESULT onKeyEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
94     LRESULT onPaintEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
95     LRESULT onPrintClientEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
96     LRESULT onSizeEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
97     LRESULT onWindowPositionChangedEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
98     LRESULT onSetFocusEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
99     LRESULT onKillFocusEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
100     LRESULT onTimerEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
101     LRESULT onShowWindowEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
102     LRESULT onSetCursor(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
103     bool onIMEStartComposition();
104     bool onIMEComposition(LPARAM);
105     bool onIMEEndComposition();
106     LRESULT onIMERequest(WPARAM, LPARAM);
107     bool onIMESelect(WPARAM, LPARAM);
108     bool onIMESetContext(WPARAM, LPARAM);
109     void resetIME();
110     void setInputMethodState(bool);
111     HIMC getIMMContext();
112     void prepareCandidateWindow(HIMC);
113     LRESULT onIMERequestCharPosition(IMECHARPOSITION*);
114     LRESULT onIMERequestReconvertString(RECONVERTSTRING*);
115
116     void updateActiveState();
117     void updateActiveStateSoon();
118
119     void initializeToolTipWindow();
120
121     void startTrackingMouseLeave();
122     void stopTrackingMouseLeave();
123
124     void close();
125
126     HCURSOR cursorToShow() const;
127     void updateNativeCursor();
128
129     // PageClient
130     virtual PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
131     virtual void setViewNeedsDisplay(const WebCore::IntRect&);
132     virtual void displayView();
133     virtual void scrollView(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
134     
135     virtual WebCore::IntSize viewSize();
136     virtual bool isViewWindowActive();
137     virtual bool isViewFocused();
138     virtual bool isViewVisible();
139     virtual bool isViewInWindow();
140     virtual void processDidCrash();
141     virtual void didRelaunchProcess();
142     virtual void pageClosed();
143     virtual void takeFocus(bool direction);
144     virtual void toolTipChanged(const WTF::String&, const WTF::String&);
145     virtual void setCursor(const WebCore::Cursor&);
146     virtual void setViewportArguments(const WebCore::ViewportArguments&);
147     virtual void registerEditCommand(PassRefPtr<WebEditCommandProxy>, WebPageProxy::UndoOrRedo);
148     virtual void clearAllEditCommands();
149     virtual void setEditCommandState(const WTF::String&, bool, int);
150     virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&);
151     virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&);
152     virtual void didNotHandleKeyEvent(const NativeWebKeyboardEvent&);
153     virtual void compositionSelectionChanged(bool);
154     virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*);
155     virtual PassRefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy*);
156     virtual void setFindIndicator(PassRefPtr<FindIndicator>, bool fadeOut);
157
158 #if USE(ACCELERATED_COMPOSITING)
159     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&);
160     virtual void exitAcceleratedCompositingMode();
161
162     virtual void pageDidEnterAcceleratedCompositing();
163     virtual void pageDidLeaveAcceleratedCompositing();
164     void switchToDrawingAreaTypeIfNecessary(DrawingAreaInfo::Type);
165 #endif
166
167     void didCommitLoadForMainFrame(bool useCustomRepresentation);
168     void didFinishLoadingDataForCustomRepresentation(const CoreIPC::DataReference&);
169     virtual double customRepresentationZoomFactor();
170     virtual void setCustomRepresentationZoomFactor(double);
171     WebCore::DragOperation keyStateToDragOperation(DWORD grfKeyState) const;
172
173     virtual HWND nativeWindow();
174
175     // WebCore::WindowMessageListener
176     virtual void windowReceivedMessage(HWND, UINT message, WPARAM, LPARAM);
177
178     HWND m_window;
179     HWND m_topLevelParentWindow;
180     HWND m_toolTipWindow;
181
182     HCURSOR m_lastCursorSet;
183     HCURSOR m_webCoreCursor;
184     HCURSOR m_overrideCursor;
185
186     bool m_isInWindow;
187     bool m_isVisible;
188     bool m_wasActivatedByMouseEvent;
189     bool m_trackingMouseLeave;
190     bool m_isBeingDestroyed;
191
192     RefPtr<WebPageProxy> m_page;
193
194     unsigned m_inIMEComposition;
195
196     WKViewFindIndicatorCallback m_findIndicatorCallback;
197     void* m_findIndicatorCallbackContext;
198
199     COMPtr<IDataObject> m_dragData;
200     COMPtr<IDropTargetHelper> m_dropTargetHelper;
201     // FIXME: This variable is part of a workaround. The drop effect (pdwEffect) passed to Drop is incorrect. 
202     // We set this variable in DragEnter and DragOver so that it can be used in Drop to set the correct drop effect. 
203     // Thus, on return from DoDragDrop we have the correct pdwEffect for the drag-and-drop operation.
204     // (see https://bugs.webkit.org/show_bug.cgi?id=29264)
205     DWORD m_lastDropEffect;
206 };
207
208 } // namespace WebKit
209
210 #endif // WebView_h