[Qt] [WK2] Move PageLoadClient related code to QtWebPageLoadClient
[WebKit.git] / Source / WebKit2 / UIProcess / qt / QtWebPageProxy.h
1 /*
2  * Copyright (C) 2010, 2011 Nokia Corporation and/or its subsidiary(-ies)
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this program; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  *
19  */
20
21 #ifndef QtWebPageProxy_h
22 #define QtWebPageProxy_h
23
24 #include "DrawingAreaProxy.h"
25 #include "LayerTreeContext.h"
26 #include "PageClient.h"
27 #include "QtDownloadManager.h"
28 #include "QtPanGestureRecognizer.h"
29 #include "QtPinchGestureRecognizer.h"
30 #include "QtPolicyInterface.h"
31 #include "QtTapGestureRecognizer.h"
32 #include "ShareableBitmap.h"
33 #include "ViewportArguments.h"
34 #include "WebContext.h"
35 #include "WebPageProxy.h"
36 #include <wtf/RefPtr.h>
37 #include <QBasicTimer>
38 #include <QGraphicsView>
39 #include <QKeyEvent>
40 #include <QTouchEvent>
41 #include <QMenu>
42 #include <QSharedPointer>
43
44 QT_BEGIN_NAMESPACE
45 class QUndoStack;
46 QT_END_NAMESPACE
47
48 class QtWebError;
49 class QWebPreferences;
50 class QWKHistory;
51 class QQuickWebPage;
52 class QQuickWebView;
53
54 using namespace WebKit;
55
56 WebCore::DragOperation dropActionToDragOperation(Qt::DropActions actions);
57
58 // FIXME: needs focus in/out, window activation, support through viewStateDidChange().
59 class QtWebPageProxy : public QObject, WebKit::PageClient {
60     Q_OBJECT
61
62 public:
63     enum WebAction {
64         NoWebAction = - 1,
65
66         Back,
67         Forward,
68         Stop,
69         Reload,
70
71         Undo,
72         Redo,
73
74         WebActionCount
75     };
76
77     QtWebPageProxy(QQuickWebPage*, QQuickWebView*, WebKit::QtViewportInteractionEngine* = 0, WebKit::QtPolicyInterface* = 0, WKContextRef = 0, WKPageGroupRef = 0);
78     ~QtWebPageProxy();
79
80     virtual PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
81
82     virtual bool handleEvent(QEvent*);
83
84     // PageClient
85     virtual void setViewNeedsDisplay(const WebCore::IntRect&);
86     virtual void displayView();
87     virtual void scrollView(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
88
89     virtual WebCore::IntSize viewSize();
90     virtual bool isViewWindowActive();
91     virtual bool isViewFocused();
92     virtual bool isViewVisible();
93     virtual bool isViewInWindow();
94
95 #if USE(ACCELERATED_COMPOSITING)
96     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&);
97     virtual void exitAcceleratedCompositingMode();
98 #endif // USE(ACCELERATED_COMPOSITING)
99     virtual void pageDidRequestScroll(const WebCore::IntPoint&);
100     virtual void processDidCrash();
101     virtual void pageClosed() { }
102     virtual void didRelaunchProcess();
103
104     virtual void didChangeContentsSize(const WebCore::IntSize&);
105     virtual void didChangeViewportProperties(const WebCore::ViewportArguments&);
106
107     virtual void startDrag(const WebCore::DragData&, PassRefPtr<ShareableBitmap> dragImage);
108     virtual void setCursor(const WebCore::Cursor&);
109     virtual void setCursorHiddenUntilMouseMoves(bool hiddenUntilMouseMoves);
110     virtual void toolTipChanged(const WTF::String&, const WTF::String&);
111     virtual void registerEditCommand(PassRefPtr<WebKit::WebEditCommandProxy>, WebKit::WebPageProxy::UndoOrRedo);
112     virtual void clearAllEditCommands();
113     virtual bool canUndoRedo(WebPageProxy::UndoOrRedo);
114     virtual void executeUndoRedo(WebPageProxy::UndoOrRedo);
115     virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&);
116     virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&);
117     virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&);
118     virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&);
119
120     virtual void doneWithKeyEvent(const WebKit::NativeWebKeyboardEvent&, bool wasEventHandled);
121     virtual void selectionChanged(bool, bool, bool, bool);
122     virtual PassRefPtr<WebKit::WebPopupMenuProxy> createPopupMenuProxy(WebKit::WebPageProxy*);
123     virtual PassRefPtr<WebKit::WebContextMenuProxy> createContextMenuProxy(WebKit::WebPageProxy*);
124
125     virtual void setFindIndicator(PassRefPtr<WebKit::FindIndicator>, bool fadeOut, bool animate);
126
127     virtual void didCommitLoadForMainFrame(bool useCustomRepresentation);
128     virtual void didFinishLoadingDataForCustomRepresentation(const String& suggestedFilename, const CoreIPC::DataReference&);
129     virtual double customRepresentationZoomFactor() { return 1; }
130     virtual void setCustomRepresentationZoomFactor(double) { }
131     virtual void didChangeScrollbarsForMainFrame() const { }
132
133     virtual void flashBackingStoreUpdates(const Vector<WebCore::IntRect>& updateRects);
134     virtual void findStringInCustomRepresentation(const String&, FindOptions, unsigned maxMatchCount) { }
135     virtual void countStringMatchesInCustomRepresentation(const String&, FindOptions, unsigned maxMatchCount) { }
136
137     virtual void didFindZoomableArea(const WebCore::IntPoint&, const WebCore::IntRect&);
138     virtual void didReceiveMessageFromNavigatorQtObject(const String&);
139
140     bool canGoBack() const;
141     void goBack();
142     bool canGoForward() const;
143     void goForward();
144     bool canStop() const;
145     void stop();
146     bool canReload() const;
147     void reload();
148
149     void updateNavigationState();
150     void updateEditorActions();
151
152     WKPageRef pageRef() const;
153
154     void load(const QUrl& url);
155     void loadHTMLString(const QString& html, const QUrl& baseUrl);
156     QUrl url() const;
157
158     void setDrawingAreaSize(const QSize&);
159
160     QWebPreferences* preferences() const;
161
162     QString title() const;
163
164     void setCustomUserAgent(const QString&);
165     QString customUserAgent() const;
166
167     void setNavigatorQtObjectEnabled(bool);
168     bool navigatorQtObjectEnabled() const { return m_navigatorQtObjectEnabled; }
169
170     void setViewportInteractionEngine(QtViewportInteractionEngine*);
171
172     void postMessageToNavigatorQtObject(const QString&);
173
174     qreal textZoomFactor() const;
175     qreal pageZoomFactor() const;
176     void setTextZoomFactor(qreal zoomFactor);
177     void setPageZoomFactor(qreal zoomFactor);
178     void setPageAndTextZoomFactors(qreal pageZoomFactor, qreal textZoomFactor);
179
180     void setVisibleContentRectAndScale(const QRectF&, float);
181     void setVisibleContentRectTrajectoryVector(const QPointF&);
182     void findZoomableAreaForPoint(const QPoint&);
183     void renderToCurrentGLContext(const WebCore::TransformationMatrix&, float);
184
185     QWKHistory* history() const;
186
187     void contextMenuItemSelected(const WebContextMenuItemData& data)
188     {
189         m_webPageProxy->contextMenuItemSelected(data);
190     }
191
192     void handleDownloadRequest(DownloadProxy*);
193     void init();
194
195     void handleSingleTapEvent(const QTouchEvent::TouchPoint&);
196     void handleDoubleTapEvent(const QTouchEvent::TouchPoint&);
197
198     void showContextMenu(QSharedPointer<QMenu>);
199     void hideContextMenu();
200
201 public Q_SLOTS:
202     void didReceiveDownloadResponse(QWebDownloadItem* downloadItem);
203
204 public:
205     Q_SIGNAL void zoomableAreaFound(const QRect&);
206     Q_SIGNAL void receivedMessageFromNavigatorQtObject(const QVariantMap&);
207
208 protected:
209     QQuickWebPage* m_qmlWebPage;
210     QQuickWebView* m_qmlWebView;
211     RefPtr<WebKit::WebPageProxy> m_webPageProxy;
212     QtViewportInteractionEngine* m_interactionEngine;
213     QtPanGestureRecognizer m_panGestureRecognizer;
214     QtPinchGestureRecognizer m_pinchGestureRecognizer;
215     QtTapGestureRecognizer m_tapGestureRecognizer;
216     WebKit::QtPolicyInterface* const m_policyInterface;
217
218 private:
219     bool handleKeyPressEvent(QKeyEvent*);
220     bool handleKeyReleaseEvent(QKeyEvent*);
221     bool handleFocusInEvent(QFocusEvent*);
222     bool handleFocusOutEvent(QFocusEvent*);
223     bool handleMouseMoveEvent(QMouseEvent*);
224     bool handleMousePressEvent(QMouseEvent*);
225     bool handleMouseReleaseEvent(QMouseEvent*);
226     bool handleMouseDoubleClickEvent(QMouseEvent*);
227     bool handleWheelEvent(QWheelEvent*);
228     bool handleHoverLeaveEvent(QHoverEvent*);
229     bool handleHoverMoveEvent(QHoverEvent*);
230     bool handleDragEnterEvent(QDragEnterEvent*);
231     bool handleDragLeaveEvent(QDragLeaveEvent*);
232     bool handleDragMoveEvent(QDragMoveEvent*);
233     bool handleDropEvent(QDropEvent*);
234
235     virtual void timerEvent(QTimerEvent*);
236
237 #if ENABLE(TOUCH_EVENTS)
238     virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled);
239 #endif
240
241     void touchEvent(QTouchEvent*);
242
243     static PassRefPtr<WebContext> defaultWKContext();
244     static RefPtr<WebContext> s_defaultContext;
245     static RefPtr<QtDownloadManager> s_downloadManager;
246     static unsigned s_defaultPageProxyCount;
247
248     RefPtr<WebContext> m_context;
249     QWKHistory* m_history;
250
251     mutable OwnPtr<QWebPreferences> m_preferences;
252
253     OwnPtr<QUndoStack> m_undoStack;
254
255     bool m_navigatorQtObjectEnabled;
256     QPoint m_tripleClick;
257     QBasicTimer m_tripleClickTimer;
258
259     QSharedPointer<QMenu> activeMenu;
260 };
261
262 #endif /* QtWebPageProxy_h */