ad7b2d039994d50e466f3c14b6fd5d832f8cb23f
[WebKit-https.git] / Source / WebKit2 / UIProcess / API / qt / qquickwebview_p_p.h
1 /*
2  * Copyright (C) 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 qquickwebview_p_p_h
22 #define qquickwebview_p_p_h
23
24 #include "DrawingAreaProxy.h"
25 #include "QtDialogRunner.h"
26 #include "QtPageClient.h"
27 #include "QtViewportInteractionEngine.h"
28 #include "QtWebPageLoadClient.h"
29 #include "QtWebPagePolicyClient.h"
30 #include "QtWebPageUIClient.h"
31 #include "QtWebUndoController.h"
32 #include "WebPageProxy.h"
33
34 #include "qquickwebview_p.h"
35 #include "qquickwebpage_p.h"
36
37 #include <QtCore/QObject>
38 #include <QtCore/QScopedPointer>
39 #include <WebCore/ViewportArguments.h>
40 #include <wtf/OwnPtr.h>
41 #include <wtf/RefPtr.h>
42
43 namespace WebKit {
44 class DownloadProxy;
45 class QtWebContext;
46 class WebPageProxy;
47 }
48 class QWebNavigationHistory;
49 class QWebViewportInfo;
50
51 QT_BEGIN_NAMESPACE
52 class QDeclarativeComponent;
53 QT_END_NAMESPACE
54
55 class QQuickWebViewPrivate {
56     Q_DECLARE_PUBLIC(QQuickWebView)
57     friend class QQuickWebViewExperimental;
58     friend class QQuickWebPage;
59     friend class QWebPreferencesPrivate;
60     friend class QWebViewportInfo;
61
62 public:
63     static QQuickWebViewPrivate* get(QQuickWebView* q) { return q->d_ptr.data(); }
64
65     virtual ~QQuickWebViewPrivate();
66
67     virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
68
69     virtual void enableMouseEvents() { }
70     virtual void disableMouseEvents() { }
71
72     virtual QPointF pageItemPos();
73     virtual void updateContentsSize(const QSizeF&) { }
74
75     virtual void loadDidSucceed();
76     virtual void onComponentComplete();
77     virtual void loadDidCommit() { }
78     virtual void didFinishFirstNonEmptyLayout() { }
79     virtual void didChangeViewportProperties(const WebCore::ViewportAttributes& attr) { }
80     void didChangeLoadingState(QWebLoadRequest* loadRequest);
81     void didChangeBackForwardList();
82
83     void setNeedsDisplay();
84
85     virtual QtViewportInteractionEngine* viewportInteractionEngine() { return 0; }
86     virtual void updateViewportSize() { }
87     void updateTouchViewportSize();
88
89     virtual void _q_suspend() { }
90     virtual void _q_resume() { }
91     virtual void _q_contentViewportChanged(const QPointF& trajectory) { };
92
93     void _q_onVisibleChanged();
94     void _q_onUrlChanged();
95     void _q_onReceivedResponseFromDownload(QWebDownloadItem*);
96     void _q_onIconChangedForPageURL(const QUrl& pageURL, const QUrl& iconURLString);
97
98     void chooseFiles(WKOpenPanelResultListenerRef, const QStringList& selectedFileNames, QtWebPageUIClient::FileChooserType);
99     quint64 exceededDatabaseQuota(const QString& databaseName, const QString& displayName, WKSecurityOriginRef securityOrigin, quint64 currentQuota, quint64 currentOriginUsage, quint64 currentDatabaseUsage, quint64 expectedUsage);
100     void runJavaScriptAlert(const QString&);
101     bool runJavaScriptConfirm(const QString&);
102     QString runJavaScriptPrompt(const QString&, const QString& defaultValue, bool& ok);
103
104     void handleAuthenticationRequiredRequest(const QString& hostname, const QString& realm, const QString& prefilledUsername, QString& username, QString& password);
105     bool handleCertificateVerificationRequest(const QString& hostname);
106     void handleProxyAuthenticationRequiredRequest(const QString& hostname, uint16_t port, const QString& prefilledUsername, QString& username, QString& password);
107
108     void execDialogRunner(QtDialogRunner&);
109
110     void setRenderToOffscreenBuffer(bool enable) { m_renderToOffscreenBuffer = enable; }
111     void setTransparentBackground(bool);
112     void setViewInAttachedProperties(QObject*);
113     void setIcon(const QUrl&);
114
115     bool navigatorQtObjectEnabled() const;
116     bool renderToOffscreenBuffer() const { return m_renderToOffscreenBuffer; }
117     bool transparentBackground() const;
118     void setNavigatorQtObjectEnabled(bool);
119
120     QPointF contentPos() const;
121     void setContentPos(const QPointF&);
122
123     QRect visibleContentsRect() const;
124
125     void setDialogActive(bool active) { m_dialogActive = active; }
126
127     // PageClient.
128     WebCore::IntSize viewSize() const;
129     void didReceiveMessageFromNavigatorQtObject(const String& message);
130     virtual void pageDidRequestScroll(const QPoint& pos) { }
131     virtual void didChangeContentsSize(const QSize& newSize) { }
132     void processDidCrash();
133     void didRelaunchProcess();
134     PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
135     void handleDownloadRequest(DownloadProxy*);
136
137 protected:
138     QQuickWebViewPrivate(QQuickWebView* viewport);
139     RefPtr<QtWebContext> context;
140     RefPtr<WebKit::WebPageProxy> webPageProxy;
141
142     QtPageClient pageClient;
143     QtWebUndoController undoController;
144     OwnPtr<QWebNavigationHistory> navigationHistory;
145     OwnPtr<QWebPreferences> preferences;
146
147     QScopedPointer<QtWebPageLoadClient> pageLoadClient;
148     QScopedPointer<QtWebPagePolicyClient> pagePolicyClient;
149     QScopedPointer<QtWebPageUIClient> pageUIClient;
150
151     QScopedPointer<QQuickWebPage> pageView;
152     QQuickWebView* q_ptr;
153
154     QDeclarativeComponent* alertDialog;
155     QDeclarativeComponent* confirmDialog;
156     QDeclarativeComponent* promptDialog;
157     QDeclarativeComponent* authenticationDialog;
158     QDeclarativeComponent* certificateVerificationDialog;
159     QDeclarativeComponent* itemSelector;
160     QDeclarativeComponent* proxyAuthenticationDialog;
161     QDeclarativeComponent* filePicker;
162     QDeclarativeComponent* databaseQuotaDialog;
163
164     WebCore::ViewportAttributes attributes;
165
166     bool m_useDefaultContentItemSize;
167     bool m_navigatorQtObjectEnabled;
168     bool m_renderToOffscreenBuffer;
169     bool m_loadStartedSignalSent;
170     bool m_dialogActive;
171     QUrl m_iconURL;
172     QUrl m_deferedUrlToLoad;
173 };
174
175 class QQuickWebViewLegacyPrivate : public QQuickWebViewPrivate {
176     Q_DECLARE_PUBLIC(QQuickWebView)
177 public:
178     QQuickWebViewLegacyPrivate(QQuickWebView* viewport);
179     virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
180
181     virtual void updateViewportSize();
182     virtual void enableMouseEvents();
183     virtual void disableMouseEvents();
184 };
185
186 class QQuickWebViewFlickablePrivate : public QQuickWebViewPrivate {
187     Q_DECLARE_PUBLIC(QQuickWebView)
188 public:
189     QQuickWebViewFlickablePrivate(QQuickWebView* viewport);
190     virtual ~QQuickWebViewFlickablePrivate();
191     virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
192
193     virtual QPointF pageItemPos();
194     virtual void updateContentsSize(const QSizeF&);
195
196     virtual void loadDidSucceed();
197     virtual void onComponentComplete();
198     virtual void loadDidCommit();
199     virtual void didFinishFirstNonEmptyLayout();
200     virtual void didChangeViewportProperties(const WebCore::ViewportAttributes&);
201     virtual QtViewportInteractionEngine* viewportInteractionEngine() { return interactionEngine.data(); }
202     virtual void updateViewportSize();
203
204     virtual void _q_suspend();
205     virtual void _q_resume();
206     virtual void _q_contentViewportChanged(const QPointF& trajectory);
207
208     virtual void pageDidRequestScroll(const QPoint& pos);
209     virtual void didChangeContentsSize(const QSize& newSize);
210
211 private:
212     QScopedPointer<QtViewportInteractionEngine> interactionEngine;
213     bool pageIsSuspended;
214     bool loadSuccessDispatchIsPending;
215 };
216
217 #endif // qquickwebview_p_p_h