c1812e932cc76fae3ba369458182598ffb74c259
[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 didFinishFirstNonEmptyLayout();
105     virtual void didChangeContentsSize(const WebCore::IntSize&);
106     virtual void didChangeViewportProperties(const WebCore::ViewportArguments&);
107
108     virtual void startDrag(const WebCore::DragData&, PassRefPtr<ShareableBitmap> dragImage);
109     virtual void setCursor(const WebCore::Cursor&);
110     virtual void setCursorHiddenUntilMouseMoves(bool hiddenUntilMouseMoves);
111     virtual void toolTipChanged(const WTF::String&, const WTF::String&);
112     virtual void registerEditCommand(PassRefPtr<WebKit::WebEditCommandProxy>, WebKit::WebPageProxy::UndoOrRedo);
113     virtual void clearAllEditCommands();
114     virtual bool canUndoRedo(WebPageProxy::UndoOrRedo);
115     virtual void executeUndoRedo(WebPageProxy::UndoOrRedo);
116     virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&);
117     virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&);
118     virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&);
119     virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&);
120
121     virtual void doneWithKeyEvent(const WebKit::NativeWebKeyboardEvent&, bool wasEventHandled);
122     virtual void selectionChanged(bool, bool, bool, bool);
123     virtual PassRefPtr<WebKit::WebPopupMenuProxy> createPopupMenuProxy(WebKit::WebPageProxy*);
124     virtual PassRefPtr<WebKit::WebContextMenuProxy> createContextMenuProxy(WebKit::WebPageProxy*);
125
126     virtual void setFindIndicator(PassRefPtr<WebKit::FindIndicator>, bool fadeOut, bool animate);
127
128     virtual void didCommitLoadForMainFrame(bool useCustomRepresentation);
129     virtual void didFinishLoadingDataForCustomRepresentation(const String& suggestedFilename, const CoreIPC::DataReference&);
130     virtual double customRepresentationZoomFactor() { return 1; }
131     virtual void setCustomRepresentationZoomFactor(double) { }
132     virtual void didChangeScrollbarsForMainFrame() const { }
133
134     virtual void flashBackingStoreUpdates(const Vector<WebCore::IntRect>& updateRects);
135     virtual void findStringInCustomRepresentation(const String&, FindOptions, unsigned maxMatchCount) { }
136     virtual void countStringMatchesInCustomRepresentation(const String&, FindOptions, unsigned maxMatchCount) { }
137
138     virtual void didFindZoomableArea(const WebCore::IntPoint&, const WebCore::IntRect&);
139     virtual void didReceiveMessageFromNavigatorQtObject(const String&);
140
141     void didChangeUrl(const QUrl&);
142     void didChangeTitle(const QString&);
143
144     void loadDidBegin();
145     void loadDidCommit();
146     void loadDidSucceed();
147     void loadDidFail(const QtWebError&);
148     void didChangeLoadProgress(int);
149     int loadProgress() const { return m_loadProgress; }
150
151     bool canGoBack() const;
152     void goBack();
153     bool canGoForward() const;
154     void goForward();
155     bool canStop() const;
156     void stop();
157     bool canReload() const;
158     void reload();
159
160     void updateEditorActions();
161
162     WKPageRef pageRef() const;
163
164     void load(const QUrl& url);
165     void loadHTMLString(const QString& html, const QUrl& baseUrl);
166     QUrl url() const;
167
168     void setDrawingAreaSize(const QSize&);
169
170     QWebPreferences* preferences() const;
171
172     QString title() const;
173
174     void setCustomUserAgent(const QString&);
175     QString customUserAgent() const;
176
177     void setNavigatorQtObjectEnabled(bool);
178     bool navigatorQtObjectEnabled() const { return m_navigatorQtObjectEnabled; }
179
180     void setViewportInteractionEngine(QtViewportInteractionEngine*);
181
182     void postMessageToNavigatorQtObject(const QString&);
183
184     qreal textZoomFactor() const;
185     qreal pageZoomFactor() const;
186     void setTextZoomFactor(qreal zoomFactor);
187     void setPageZoomFactor(qreal zoomFactor);
188     void setPageAndTextZoomFactors(qreal pageZoomFactor, qreal textZoomFactor);
189
190     void setVisibleContentRectAndScale(const QRectF&, float);
191     void setVisibleContentRectTrajectoryVector(const QPointF&);
192     void findZoomableAreaForPoint(const QPoint&);
193     void renderToCurrentGLContext(const WebCore::TransformationMatrix&, float);
194
195     QWKHistory* history() const;
196
197     void contextMenuItemSelected(const WebContextMenuItemData& data)
198     {
199         m_webPageProxy->contextMenuItemSelected(data);
200     }
201
202     void handleDownloadRequest(DownloadProxy*);
203     void init();
204
205     void handleSingleTapEvent(const QTouchEvent::TouchPoint&);
206     void handleDoubleTapEvent(const QTouchEvent::TouchPoint&);
207
208     void showContextMenu(QSharedPointer<QMenu>);
209     void hideContextMenu();
210
211 public Q_SLOTS:
212     void navigationStateChanged();
213     void didReceiveDownloadResponse(QWebDownloadItem* downloadItem);
214
215 public:
216     Q_SIGNAL void zoomableAreaFound(const QRect&);
217     Q_SIGNAL void updateNavigationState();
218     Q_SIGNAL void receivedMessageFromNavigatorQtObject(const QVariantMap&);
219
220 protected:
221     QQuickWebPage* m_qmlWebPage;
222     QQuickWebView* m_qmlWebView;
223     RefPtr<WebKit::WebPageProxy> m_webPageProxy;
224     QtViewportInteractionEngine* m_interactionEngine;
225     QtPanGestureRecognizer m_panGestureRecognizer;
226     QtPinchGestureRecognizer m_pinchGestureRecognizer;
227     QtTapGestureRecognizer m_tapGestureRecognizer;
228     WebKit::QtPolicyInterface* const m_policyInterface;
229
230 private:
231     bool handleKeyPressEvent(QKeyEvent*);
232     bool handleKeyReleaseEvent(QKeyEvent*);
233     bool handleFocusInEvent(QFocusEvent*);
234     bool handleFocusOutEvent(QFocusEvent*);
235     bool handleMouseMoveEvent(QMouseEvent*);
236     bool handleMousePressEvent(QMouseEvent*);
237     bool handleMouseReleaseEvent(QMouseEvent*);
238     bool handleMouseDoubleClickEvent(QMouseEvent*);
239     bool handleWheelEvent(QWheelEvent*);
240     bool handleHoverLeaveEvent(QHoverEvent*);
241     bool handleHoverMoveEvent(QHoverEvent*);
242     bool handleDragEnterEvent(QDragEnterEvent*);
243     bool handleDragLeaveEvent(QDragLeaveEvent*);
244     bool handleDragMoveEvent(QDragMoveEvent*);
245     bool handleDropEvent(QDropEvent*);
246
247     virtual void timerEvent(QTimerEvent*);
248
249 #if ENABLE(TOUCH_EVENTS)
250     virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled);
251 #endif
252
253     void touchEvent(QTouchEvent*);
254
255     static PassRefPtr<WebContext> defaultWKContext();
256     static RefPtr<WebContext> s_defaultContext;
257     static RefPtr<QtDownloadManager> s_downloadManager;
258     static unsigned s_defaultPageProxyCount;
259
260     RefPtr<WebContext> m_context;
261     QWKHistory* m_history;
262
263     mutable OwnPtr<QWebPreferences> m_preferences;
264
265     OwnPtr<QUndoStack> m_undoStack;
266     int m_loadProgress;
267
268     bool m_navigatorQtObjectEnabled;
269     QPoint m_tripleClick;
270     QBasicTimer m_tripleClickTimer;
271
272     QSharedPointer<QMenu> activeMenu;
273 };
274
275 #endif /* QtWebPageProxy_h */