331704454e3c9c1fd041265b0868118e194b4312
[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 "QtWebContext.h"
28 #include "ShareableBitmap.h"
29 #include "ViewportArguments.h"
30 #include "WebPageProxy.h"
31 #include <wtf/RefPtr.h>
32 #include <QGraphicsView>
33 #include <QMenu>
34 #include <QSharedPointer>
35
36 QT_BEGIN_NAMESPACE
37 class QUndoStack;
38 QT_END_NAMESPACE
39
40 class QQuickWebPage;
41 class QQuickWebView;
42 class QtWebError;
43 class QtWebPageEventHandler;
44 class QWebDownloadItem;
45 class QWebPreferences;
46 class QWKHistory;
47
48 namespace WebKit {
49 class QtWebContext;
50 }
51
52 using namespace WebKit;
53
54 // FIXME: needs focus in/out, window activation, support through viewStateDidChange().
55 class QtWebPageProxy : public QObject, WebKit::PageClient {
56     Q_OBJECT
57
58 public:
59     enum WebAction {
60         NoWebAction = - 1,
61
62         Back,
63         Forward,
64         Stop,
65         Reload,
66
67         Undo,
68         Redo,
69
70         WebActionCount
71     };
72
73     QtWebPageProxy(QQuickWebPage*, QQuickWebView*, WKContextRef = 0, WKPageGroupRef = 0);
74     ~QtWebPageProxy();
75
76     virtual PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
77
78     // PageClient
79     virtual void setViewNeedsDisplay(const WebCore::IntRect&);
80     virtual void displayView();
81     virtual void scrollView(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
82
83     virtual WebCore::IntSize viewSize();
84     virtual bool isViewWindowActive();
85     virtual bool isViewFocused();
86     virtual bool isViewVisible();
87     virtual bool isViewInWindow();
88
89 #if USE(ACCELERATED_COMPOSITING)
90     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&);
91     virtual void exitAcceleratedCompositingMode();
92 #endif // USE(ACCELERATED_COMPOSITING)
93     virtual void pageDidRequestScroll(const WebCore::IntPoint&);
94     virtual void processDidCrash();
95     virtual void pageClosed() { }
96     virtual void didRelaunchProcess();
97
98     virtual void didChangeContentsSize(const WebCore::IntSize&);
99     virtual void didChangeViewportProperties(const WebCore::ViewportArguments&);
100
101     virtual void startDrag(const WebCore::DragData&, PassRefPtr<ShareableBitmap> dragImage);
102     virtual void setCursor(const WebCore::Cursor&);
103     virtual void setCursorHiddenUntilMouseMoves(bool hiddenUntilMouseMoves);
104     virtual void toolTipChanged(const WTF::String&, const WTF::String&);
105     virtual void registerEditCommand(PassRefPtr<WebKit::WebEditCommandProxy>, WebKit::WebPageProxy::UndoOrRedo);
106     virtual void clearAllEditCommands();
107     virtual bool canUndoRedo(WebPageProxy::UndoOrRedo);
108     virtual void executeUndoRedo(WebPageProxy::UndoOrRedo);
109     virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&);
110     virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&);
111     virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&);
112     virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&);
113
114     virtual void doneWithKeyEvent(const WebKit::NativeWebKeyboardEvent&, bool wasEventHandled);
115     virtual void selectionChanged(bool, bool, bool, bool);
116     virtual PassRefPtr<WebKit::WebPopupMenuProxy> createPopupMenuProxy(WebKit::WebPageProxy*);
117     virtual PassRefPtr<WebKit::WebContextMenuProxy> createContextMenuProxy(WebKit::WebPageProxy*);
118
119     virtual void setFindIndicator(PassRefPtr<WebKit::FindIndicator>, bool fadeOut, bool animate);
120
121     virtual void didCommitLoadForMainFrame(bool useCustomRepresentation);
122     virtual void didFinishLoadingDataForCustomRepresentation(const String& suggestedFilename, const CoreIPC::DataReference&);
123     virtual double customRepresentationZoomFactor() { return 1; }
124     virtual void setCustomRepresentationZoomFactor(double) { }
125     virtual void didChangeScrollbarsForMainFrame() const { }
126
127     virtual void flashBackingStoreUpdates(const Vector<WebCore::IntRect>& updateRects);
128     virtual void findStringInCustomRepresentation(const String&, FindOptions, unsigned maxMatchCount) { }
129     virtual void countStringMatchesInCustomRepresentation(const String&, FindOptions, unsigned maxMatchCount) { }
130
131     virtual void didFindZoomableArea(const WebCore::IntPoint&, const WebCore::IntRect&);
132     virtual void didReceiveMessageFromNavigatorQtObject(const String&);
133
134     bool canGoBack() const;
135     void goBack();
136     bool canGoForward() const;
137     void goForward();
138     bool canStop() const;
139     void stop();
140     bool canReload() const;
141     void reload();
142
143     void updateNavigationState();
144     void updateEditorActions();
145
146     WKPageRef pageRef() const;
147
148     void load(const QUrl& url);
149     void loadHTMLString(const QString& html, const QUrl& baseUrl);
150     QUrl url() const;
151
152     void setDrawingAreaSize(const QSize&);
153
154     QWebPreferences* preferences() const;
155
156     QString title() const;
157
158     void setCustomUserAgent(const QString&);
159     QString customUserAgent() const;
160
161     void setNavigatorQtObjectEnabled(bool);
162     bool navigatorQtObjectEnabled() const { return m_navigatorQtObjectEnabled; }
163
164     void postMessageToNavigatorQtObject(const QString&);
165
166     qreal textZoomFactor() const;
167     qreal pageZoomFactor() const;
168     void setTextZoomFactor(qreal zoomFactor);
169     void setPageZoomFactor(qreal zoomFactor);
170     void setPageAndTextZoomFactors(qreal pageZoomFactor, qreal textZoomFactor);
171
172     void setVisibleContentRectAndScale(const QRectF&, float);
173     void setVisibleContentRectTrajectoryVector(const QPointF&);
174     void renderToCurrentGLContext(const WebCore::TransformationMatrix&, float);
175
176     QWKHistory* history() const;
177
178     void contextMenuItemSelected(const WebContextMenuItemData& data)
179     {
180         m_webPageProxy->contextMenuItemSelected(data);
181     }
182
183     void handleDownloadRequest(DownloadProxy*);
184     void init(QtWebPageEventHandler*);
185
186     void showContextMenu(QSharedPointer<QMenu>);
187     void hideContextMenu();
188
189     QtWebPageEventHandler* eventHandler() { return m_eventHandler; }
190
191 public Q_SLOTS:
192     void didReceiveDownloadResponse(QWebDownloadItem* downloadItem);
193
194 public:
195     Q_SIGNAL void zoomableAreaFound(const QRect&);
196     Q_SIGNAL void receivedMessageFromNavigatorQtObject(const QVariantMap&);
197
198 protected:
199     QQuickWebPage* m_qmlWebPage;
200     QQuickWebView* m_qmlWebView;
201     RefPtr<WebKit::WebPageProxy> m_webPageProxy;
202
203 private:
204 #if ENABLE(TOUCH_EVENTS)
205     virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled);
206 #endif
207
208     RefPtr<QtWebContext> m_context;
209     QWKHistory* m_history;
210
211     mutable OwnPtr<QWebPreferences> m_preferences;
212
213     OwnPtr<QUndoStack> m_undoStack;
214
215     bool m_navigatorQtObjectEnabled;
216
217     QSharedPointer<QMenu> activeMenu;
218     QtWebPageEventHandler* m_eventHandler;
219 };
220
221 #endif /* QtWebPageProxy_h */