b0b5dbab7342dbd85f1b36af3ce46789de6c3ae6
[WebKit-https.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 "QtWebContext.h"
26 #include "ShareableBitmap.h"
27 #include "ViewportArguments.h"
28 #include "WebPageProxy.h"
29 #include <wtf/RefPtr.h>
30 #include <QMenu>
31 #include <QSharedPointer>
32
33 QT_BEGIN_NAMESPACE
34 class QUndoStack;
35 QT_END_NAMESPACE
36
37 class QtPageClient;
38 class QQuickWebPage;
39 class QQuickWebView;
40 class QtWebError;
41 class QtWebPageEventHandler;
42 class QWebDownloadItem;
43 class QWebPreferences;
44 class QWKHistory;
45
46 namespace WebKit {
47 class QtWebContext;
48 }
49
50 using namespace WebKit;
51
52 // FIXME: needs focus in/out, window activation, support through viewStateDidChange().
53 class QtWebPageProxy : public QObject {
54     Q_OBJECT
55
56 public:
57     enum WebAction {
58         NoWebAction = - 1,
59
60         Back,
61         Forward,
62         Stop,
63         Reload,
64
65         Undo,
66         Redo,
67
68         WebActionCount
69     };
70
71     QtWebPageProxy(QQuickWebPage*, QQuickWebView*, QtPageClient*, WKContextRef = 0, WKPageGroupRef = 0);
72     ~QtWebPageProxy();
73
74     PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
75
76     void setViewNeedsDisplay(const WebCore::IntRect&);
77     WebCore::IntSize viewSize();
78     bool isViewFocused();
79     bool isViewVisible();
80
81     void pageDidRequestScroll(const WebCore::IntPoint&);
82     void processDidCrash();
83     void didRelaunchProcess();
84
85     void didChangeContentsSize(const WebCore::IntSize&);
86     void didChangeViewportProperties(const WebCore::ViewportArguments&);
87
88     void registerEditCommand(PassRefPtr<WebKit::WebEditCommandProxy>, WebKit::WebPageProxy::UndoOrRedo);
89     void clearAllEditCommands();
90     bool canUndoRedo(WebPageProxy::UndoOrRedo);
91     void executeUndoRedo(WebPageProxy::UndoOrRedo);
92
93     void selectionChanged(bool, bool, bool, bool);
94     PassRefPtr<WebKit::WebPopupMenuProxy> createPopupMenuProxy(WebKit::WebPageProxy*);
95
96     void didReceiveMessageFromNavigatorQtObject(const String&);
97
98     bool canGoBack() const;
99     void goBack();
100     bool canGoForward() const;
101     void goForward();
102     bool loading() const;
103     void stop();
104     bool canReload() const;
105     void reload();
106
107     void updateNavigationState();
108     void updateEditorActions();
109
110     WKPageRef pageRef() const;
111
112     void load(const QUrl& url);
113     void loadHTMLString(const QString& html, const QUrl& baseUrl);
114     QUrl url() const;
115
116     void setDrawingAreaSize(const QSize&);
117
118     QWebPreferences* preferences() const;
119
120     QString title() const;
121
122     void setCustomUserAgent(const QString&);
123     QString customUserAgent() const;
124
125     void setNavigatorQtObjectEnabled(bool);
126     bool navigatorQtObjectEnabled() const { return m_navigatorQtObjectEnabled; }
127
128     void postMessageToNavigatorQtObject(const QString&);
129
130     qreal textZoomFactor() const;
131     qreal pageZoomFactor() const;
132     void setTextZoomFactor(qreal zoomFactor);
133     void setPageZoomFactor(qreal zoomFactor);
134     void setPageAndTextZoomFactors(qreal pageZoomFactor, qreal textZoomFactor);
135
136     void setVisibleContentRectAndScale(const QRectF&, float);
137     void setVisibleContentRectTrajectoryVector(const QPointF&);
138     void renderToCurrentGLContext(const WebCore::TransformationMatrix&, float);
139     void purgeGLResources();
140
141     QWKHistory* history() const;
142
143     void contextMenuItemSelected(const WebContextMenuItemData& data)
144     {
145         m_webPageProxy->contextMenuItemSelected(data);
146     }
147
148     void handleDownloadRequest(DownloadProxy*);
149     void init(QtWebPageEventHandler*);
150
151     void showContextMenu(QSharedPointer<QMenu>);
152     void hideContextMenu();
153
154     QtWebPageEventHandler* eventHandler() { return m_eventHandler; }
155
156 public Q_SLOTS:
157     void didReceiveDownloadResponse(QWebDownloadItem* downloadItem);
158
159 public:
160     Q_SIGNAL void zoomableAreaFound(const QRect&);
161     Q_SIGNAL void receivedMessageFromNavigatorQtObject(const QVariantMap&);
162
163 protected:
164     QQuickWebPage* m_qmlWebPage;
165     QQuickWebView* m_qmlWebView;
166     RefPtr<WebKit::WebPageProxy> m_webPageProxy;
167
168 private:
169 #if ENABLE(TOUCH_EVENTS)
170     void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled);
171 #endif
172
173     RefPtr<QtWebContext> m_context;
174     QWKHistory* m_history;
175
176     mutable OwnPtr<QWebPreferences> m_preferences;
177
178     OwnPtr<QUndoStack> m_undoStack;
179
180     bool m_navigatorQtObjectEnabled;
181
182     QSharedPointer<QMenu> activeMenu;
183     QtWebPageEventHandler* m_eventHandler;
184 };
185
186 #endif /* QtWebPageProxy_h */