2 * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
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.
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.
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.
21 #ifndef qquickwebview_p_p_h
22 #define qquickwebview_p_p_h
24 #include "QtPageClient.h"
25 #include "QtWebPageUIClient.h"
26 #include "QtWebUndoController.h"
28 #include "qquickwebview_p.h"
29 #include "qquickwebpage_p.h"
31 #include <QtCore/QObject>
32 #include <QtCore/QScopedPointer>
33 #include <WebCore/ViewportArguments.h>
34 #include <wtf/OwnPtr.h>
35 #include <wtf/RefPtr.h>
39 class DrawingAreaProxy;
41 class QtViewportInteractionEngine;
43 class QtWebPageLoadClient;
44 class QtWebPagePolicyClient;
48 class QWebNavigationHistory;
49 class QWebViewportInfo;
52 class QDeclarativeComponent;
55 class QQuickWebViewPrivate {
56 Q_DECLARE_PUBLIC(QQuickWebView)
57 friend class QQuickWebViewExperimental;
58 friend class QQuickWebPage;
59 friend class QWebPreferencesPrivate;
60 friend class QWebViewportInfo;
63 static QQuickWebViewPrivate* get(QQuickWebView* q) { return q->d_ptr.data(); }
65 virtual ~QQuickWebViewPrivate();
67 virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
69 virtual void enableMouseEvents() { }
70 virtual void disableMouseEvents() { }
72 virtual QPointF pageItemPos();
73 virtual void updateContentsSize(const QSizeF&) { }
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();
83 void setNeedsDisplay();
85 virtual WebKit::QtViewportInteractionEngine* viewportInteractionEngine() { return 0; }
86 virtual void updateViewportSize() { }
87 void updateTouchViewportSize();
89 virtual void _q_suspend() { }
90 virtual void _q_resume() { }
91 virtual void _q_contentViewportChanged(const QPointF& trajectory) { };
93 void _q_onVisibleChanged();
94 void _q_onUrlChanged();
95 void _q_onReceivedResponseFromDownload(QWebDownloadItem*);
96 void _q_onIconChangedForPageURL(const QUrl& pageURL, const QUrl& iconURLString);
98 void chooseFiles(WKOpenPanelResultListenerRef, const QStringList& selectedFileNames, WebKit::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);
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);
108 void execDialogRunner(WebKit::QtDialogRunner&);
110 void setRenderToOffscreenBuffer(bool enable) { m_renderToOffscreenBuffer = enable; }
111 void setTransparentBackground(bool);
112 void setViewInAttachedProperties(QObject*);
113 void setIcon(const QUrl&);
115 bool navigatorQtObjectEnabled() const;
116 bool renderToOffscreenBuffer() const { return m_renderToOffscreenBuffer; }
117 bool transparentBackground() const;
118 void setNavigatorQtObjectEnabled(bool);
120 QPointF contentPos() const;
121 void setContentPos(const QPointF&);
123 QRect visibleContentsRect() const;
125 void setDialogActive(bool active) { m_dialogActive = active; }
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<WebKit::DrawingAreaProxy> createDrawingAreaProxy();
135 void handleDownloadRequest(WebKit::DownloadProxy*);
138 QQuickWebViewPrivate(QQuickWebView* viewport);
139 RefPtr<WebKit::QtWebContext> context;
140 RefPtr<WebKit::WebPageProxy> webPageProxy;
142 WebKit::QtPageClient pageClient;
143 WebKit::QtWebUndoController undoController;
144 OwnPtr<QWebNavigationHistory> navigationHistory;
145 OwnPtr<QWebPreferences> preferences;
147 QScopedPointer<WebKit::QtWebPageLoadClient> pageLoadClient;
148 QScopedPointer<WebKit::QtWebPagePolicyClient> pagePolicyClient;
149 QScopedPointer<WebKit::QtWebPageUIClient> pageUIClient;
151 QScopedPointer<QQuickWebPage> pageView;
152 QQuickWebView* q_ptr;
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;
164 WebCore::ViewportAttributes attributes;
166 bool m_useDefaultContentItemSize;
167 bool m_navigatorQtObjectEnabled;
168 bool m_renderToOffscreenBuffer;
169 bool m_loadStartedSignalSent;
172 QUrl m_deferedUrlToLoad;
175 class QQuickWebViewLegacyPrivate : public QQuickWebViewPrivate {
176 Q_DECLARE_PUBLIC(QQuickWebView)
178 QQuickWebViewLegacyPrivate(QQuickWebView* viewport);
179 virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
181 virtual void updateViewportSize();
182 virtual void enableMouseEvents();
183 virtual void disableMouseEvents();
186 class QQuickWebViewFlickablePrivate : public QQuickWebViewPrivate {
187 Q_DECLARE_PUBLIC(QQuickWebView)
189 QQuickWebViewFlickablePrivate(QQuickWebView* viewport);
190 virtual ~QQuickWebViewFlickablePrivate();
191 virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
193 virtual QPointF pageItemPos();
194 virtual void updateContentsSize(const QSizeF&);
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 WebKit::QtViewportInteractionEngine* viewportInteractionEngine() { return interactionEngine.data(); }
202 virtual void updateViewportSize();
204 virtual void _q_suspend();
205 virtual void _q_resume();
206 virtual void _q_contentViewportChanged(const QPointF& trajectory);
208 virtual void pageDidRequestScroll(const QPoint& pos);
209 virtual void didChangeContentsSize(const QSize& newSize);
212 QScopedPointer<WebKit::QtViewportInteractionEngine> interactionEngine;
213 bool pageIsSuspended;
214 bool loadSuccessDispatchIsPending;
217 #endif // qquickwebview_p_p_h