66dc47d60927e08b40a73c548f6f0be8b4adfa76
[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 "QtViewInterface.h"
33 #include "ShareableBitmap.h"
34 #include "ViewportArguments.h"
35 #include "WebContext.h"
36 #include "WebPageProxy.h"
37 #include <wtf/RefPtr.h>
38 #include <QBasicTimer>
39 #include <QGraphicsView>
40 #include <QKeyEvent>
41 #include <QTouchEvent>
42 #include <QMenu>
43 #include <QSharedPointer>
44
45 QT_BEGIN_NAMESPACE
46 class QUndoStack;
47 QT_END_NAMESPACE
48
49 class QtWebError;
50 class QWebPreferences;
51 class QWKHistory;
52
53 using namespace WebKit;
54
55 WebCore::DragOperation dropActionToDragOperation(Qt::DropActions actions);
56
57 // FIXME: needs focus in/out, window activation, support through viewStateDidChange().
58 class QtWebPageProxy : public QObject, WebKit::PageClient {
59     Q_OBJECT
60
61 public:
62     enum WebAction {
63         NoWebAction = - 1,
64
65         Back,
66         Forward,
67         Stop,
68         Reload,
69
70         Undo,
71         Redo,
72
73         WebActionCount
74     };
75
76     QtWebPageProxy(WebKit::QtViewInterface*, WebKit::QtViewportInteractionEngine* = 0, WebKit::QtPolicyInterface* = 0, WKContextRef = 0, WKPageGroupRef = 0);
77     ~QtWebPageProxy();
78
79     virtual PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
80
81     virtual bool handleEvent(QEvent*);
82
83     // PageClient
84     virtual void setViewNeedsDisplay(const WebCore::IntRect&);
85     virtual void displayView();
86     virtual void scrollView(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
87
88     virtual WebCore::IntSize viewSize();
89     virtual bool isViewWindowActive();
90     virtual bool isViewFocused();
91     virtual bool isViewVisible();
92     virtual bool isViewInWindow();
93
94 #if USE(ACCELERATED_COMPOSITING)
95     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&);
96     virtual void exitAcceleratedCompositingMode();
97 #endif // USE(ACCELERATED_COMPOSITING)
98     virtual void pageDidRequestScroll(const WebCore::IntPoint&);
99     virtual void processDidCrash();
100     virtual void pageClosed() { }
101     virtual void didRelaunchProcess();
102     virtual void didChangeContentsSize(const WebCore::IntSize&);
103
104     virtual void startDrag(const WebCore::DragData&, PassRefPtr<ShareableBitmap> dragImage);
105     virtual void didChangeViewportProperties(const WebCore::ViewportArguments&);
106     virtual void setCursor(const WebCore::Cursor&);
107     virtual void setCursorHiddenUntilMouseMoves(bool hiddenUntilMouseMoves);
108     virtual void toolTipChanged(const WTF::String&, const WTF::String&);
109     virtual void registerEditCommand(PassRefPtr<WebKit::WebEditCommandProxy>, WebKit::WebPageProxy::UndoOrRedo);
110     virtual void clearAllEditCommands();
111     virtual bool canUndoRedo(WebPageProxy::UndoOrRedo);
112     virtual void executeUndoRedo(WebPageProxy::UndoOrRedo);
113     virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&);
114     virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&);
115     virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&);
116     virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&);
117
118     virtual void doneWithKeyEvent(const WebKit::NativeWebKeyboardEvent&, bool wasEventHandled);
119     virtual void selectionChanged(bool, bool, bool, bool);
120     virtual PassRefPtr<WebKit::WebPopupMenuProxy> createPopupMenuProxy(WebKit::WebPageProxy*);
121     virtual PassRefPtr<WebKit::WebContextMenuProxy> createContextMenuProxy(WebKit::WebPageProxy*);
122
123     virtual void setFindIndicator(PassRefPtr<WebKit::FindIndicator>, bool fadeOut, bool animate);
124
125     virtual void didCommitLoadForMainFrame(bool useCustomRepresentation);
126     virtual void didFinishLoadingDataForCustomRepresentation(const String& suggestedFilename, const CoreIPC::DataReference&);
127     virtual double customRepresentationZoomFactor() { return 1; }
128     virtual void setCustomRepresentationZoomFactor(double) { }
129     virtual void didChangeScrollbarsForMainFrame() const { }
130
131     virtual void flashBackingStoreUpdates(const Vector<WebCore::IntRect>& updateRects);
132     virtual void findStringInCustomRepresentation(const String&, FindOptions, unsigned maxMatchCount) { }
133     virtual void countStringMatchesInCustomRepresentation(const String&, FindOptions, unsigned maxMatchCount) { }
134
135     virtual void didFindZoomableArea(const WebCore::IntPoint&, const WebCore::IntRect&);
136     virtual void didReceiveMessageFromNavigatorQtObject(const String&);
137
138     void didChangeUrl(const QUrl&);
139     void didChangeTitle(const QString&);
140
141     void loadDidBegin();
142     void loadDidCommit();
143     void loadDidSucceed();
144     void loadDidFail(const QtWebError&);
145     void didChangeLoadProgress(int);
146     int loadProgress() const { return m_loadProgress; }
147
148     void paint(QPainter*, const QRect&);
149
150     bool canGoBack() const;
151     void goBack();
152     bool canGoForward() const;
153     void goForward();
154     bool canStop() const;
155     void stop();
156     bool canReload() const;
157     void reload();
158
159     void updateEditorActions();
160
161     WKPageRef pageRef() const;
162
163     void load(const QUrl& url);
164     QUrl url() const;
165
166     void setDrawingAreaSize(const QSize&);
167
168     QWebPreferences* preferences() const;
169
170     QString title() const;
171
172     void setCustomUserAgent(const QString&);
173     QString customUserAgent() const;
174
175     void setNavigatorQtObjectEnabled(bool);
176     bool navigatorQtObjectEnabled() const { return m_navigatorQtObjectEnabled; }
177
178     void setViewportInteractionEngine(QtViewportInteractionEngine* engine) { m_interactionEngine = engine; m_panGestureRecognizer.setViewportInteractionEngine(engine); m_pinchGestureRecognizer.setViewportInteractionEngine(engine);}
179
180     void postMessageToNavigatorQtObject(const QString&);
181
182     qreal textZoomFactor() const;
183     qreal pageZoomFactor() const;
184     void setTextZoomFactor(qreal zoomFactor);
185     void setPageZoomFactor(qreal zoomFactor);
186     void setPageAndTextZoomFactors(qreal pageZoomFactor, qreal textZoomFactor);
187
188     void setVisibleContentRectAndScale(const QRectF&, float);
189     void setVisibleContentRectTrajectoryVector(const QPointF&);
190     void findZoomableAreaForPoint(const QPoint&);
191     void renderToCurrentGLContext(const WebCore::TransformationMatrix&, float);
192
193     QWKHistory* history() const;
194     QtViewInterface* viewInterface() const { return m_viewInterface; }
195
196     void handleDownloadRequest(DownloadProxy*);
197     void init();
198
199     void handleSingleTapEvent(const QTouchEvent::TouchPoint&);
200     void handleDoubleTapEvent(const QTouchEvent::TouchPoint&);
201
202 public Q_SLOTS:
203     void navigationStateChanged();
204     void didReceiveDownloadResponse(QWebDownloadItem*);
205
206 public:
207     Q_SIGNAL void zoomableAreaFound(const QRect&);
208     Q_SIGNAL void updateNavigationState();
209     Q_SIGNAL void receivedMessageFromNavigatorQtObject(const QVariantMap&);
210
211 protected:
212     virtual void paintContent(QPainter* painter, const QRect& area);
213     RefPtr<WebKit::WebPageProxy> m_webPageProxy;
214     WebKit::QtViewInterface* const m_viewInterface;
215     QtViewportInteractionEngine* m_interactionEngine;
216     QtPanGestureRecognizer m_panGestureRecognizer;
217     QtPinchGestureRecognizer m_pinchGestureRecognizer;
218     QtTapGestureRecognizer m_tapGestureRecognizer;
219     WebKit::QtPolicyInterface* const m_policyInterface;
220
221 private:
222     bool handleKeyPressEvent(QKeyEvent*);
223     bool handleKeyReleaseEvent(QKeyEvent*);
224     bool handleFocusInEvent(QFocusEvent*);
225     bool handleFocusOutEvent(QFocusEvent*);
226     bool handleMouseMoveEvent(QMouseEvent*);
227     bool handleMousePressEvent(QMouseEvent*);
228     bool handleMouseReleaseEvent(QMouseEvent*);
229     bool handleMouseDoubleClickEvent(QMouseEvent*);
230     bool handleWheelEvent(QWheelEvent*);
231     bool handleHoverLeaveEvent(QHoverEvent*);
232     bool handleHoverMoveEvent(QHoverEvent*);
233     bool handleDragEnterEvent(QDragEnterEvent*);
234     bool handleDragLeaveEvent(QDragLeaveEvent*);
235     bool handleDragMoveEvent(QDragMoveEvent*);
236     bool handleDropEvent(QDropEvent*);
237
238     virtual void timerEvent(QTimerEvent*);
239
240 #if ENABLE(TOUCH_EVENTS)
241     virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled);
242 #endif
243
244     void touchEvent(QTouchEvent*);
245
246     static PassRefPtr<WebContext> defaultWKContext();
247     static RefPtr<WebContext> s_defaultContext;
248     static RefPtr<QtDownloadManager> s_downloadManager;
249     static unsigned s_defaultPageProxyCount;
250
251     RefPtr<WebContext> m_context;
252     QWKHistory* m_history;
253
254     mutable OwnPtr<QWebPreferences> m_preferences;
255
256     OwnPtr<QUndoStack> m_undoStack;
257     int m_loadProgress;
258
259     bool m_navigatorQtObjectEnabled;
260     QPoint m_tripleClick;
261     QBasicTimer m_tripleClickTimer;
262 };
263
264 #endif /* QtWebPageProxy_h */