[Qt][WK2] History is not accessible in QML.
[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 QWebNavigationHistory;
44 class QWebPreferences;
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     void goBackTo(int index);
101     bool canGoForward() const;
102     void goForward();
103     void goForwardTo(int index);
104     bool loading() const;
105     void stop();
106     bool canReload() const;
107     void reload();
108
109     void updateNavigationState();
110     void updateEditorActions();
111
112     WKPageRef pageRef() const;
113
114     void load(const QUrl& url);
115     void loadHTMLString(const QString& html, const QUrl& baseUrl);
116     QUrl url() const;
117
118     void setDrawingAreaSize(const QSize&);
119
120     QWebPreferences* preferences() const;
121
122     QString title() const;
123
124     void setCustomUserAgent(const QString&);
125     QString customUserAgent() const;
126
127     void setNavigatorQtObjectEnabled(bool);
128     bool navigatorQtObjectEnabled() const { return m_navigatorQtObjectEnabled; }
129
130     void postMessageToNavigatorQtObject(const QString&);
131
132     qreal textZoomFactor() const;
133     qreal pageZoomFactor() const;
134     void setTextZoomFactor(qreal zoomFactor);
135     void setPageZoomFactor(qreal zoomFactor);
136     void setPageAndTextZoomFactors(qreal pageZoomFactor, qreal textZoomFactor);
137
138     void setVisibleContentRectAndScale(const QRectF&, float);
139     void setVisibleContentRectTrajectoryVector(const QPointF&);
140     void renderToCurrentGLContext(const WebCore::TransformationMatrix&, float);
141     void purgeGLResources();
142
143     QWebNavigationHistory* navigationHistory() const;
144
145     void contextMenuItemSelected(const WebContextMenuItemData& data)
146     {
147         m_webPageProxy->contextMenuItemSelected(data);
148     }
149
150     void handleDownloadRequest(DownloadProxy*);
151     void init(QtWebPageEventHandler*);
152
153     void showContextMenu(QSharedPointer<QMenu>);
154     void hideContextMenu();
155
156     QtWebPageEventHandler* eventHandler() { return m_eventHandler; }
157
158 public Q_SLOTS:
159     void didReceiveDownloadResponse(QWebDownloadItem* downloadItem);
160
161 public:
162     Q_SIGNAL void zoomableAreaFound(const QRect&);
163     Q_SIGNAL void receivedMessageFromNavigatorQtObject(const QVariantMap&);
164
165 protected:
166     QQuickWebPage* m_qmlWebPage;
167     QQuickWebView* m_qmlWebView;
168     RefPtr<WebKit::WebPageProxy> m_webPageProxy;
169
170 private:
171 #if ENABLE(TOUCH_EVENTS)
172     void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled);
173 #endif
174
175     RefPtr<QtWebContext> m_context;
176     OwnPtr<QWebNavigationHistory> m_navigationHistory;
177
178     mutable OwnPtr<QWebPreferences> m_preferences;
179
180     OwnPtr<QUndoStack> m_undoStack;
181
182     bool m_navigatorQtObjectEnabled;
183
184     QSharedPointer<QMenu> activeMenu;
185     QtWebPageEventHandler* m_eventHandler;
186 };
187
188 #endif /* QtWebPageProxy_h */