[Qt WK2] Disable/enable mouse events when displaying dialogs only for desktop view
[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 "QtFlickProvider.h"
27 #include "QtPageClient.h"
28 #include "QtViewportInteractionEngine.h"
29 #include "QtWebPageLoadClient.h"
30 #include "QtWebPagePolicyClient.h"
31 #include "QtWebPageUIClient.h"
32 #include "QtWebUndoController.h"
33 #include "WebPageProxy.h"
34
35 #include "qquickwebview_p.h"
36 #include "qquickwebpage_p.h"
37
38 #include <QtCore/QObject>
39 #include <QtCore/QScopedPointer>
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::ViewportArguments& args) { }
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     QRect visibleContentsRect() const;
121
122     void setDialogActive(bool active) { m_dialogActive = active; }
123
124     // PageClient.
125     WebCore::IntSize viewSize() const;
126     void didReceiveMessageFromNavigatorQtObject(const String& message);
127     virtual void pageDidRequestScroll(const QPoint& pos) { }
128     virtual void didChangeContentsSize(const QSize& newSize) { }
129     void processDidCrash();
130     void didRelaunchProcess();
131     PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
132     void handleDownloadRequest(DownloadProxy*);
133
134 protected:
135     QQuickWebViewPrivate(QQuickWebView* viewport);
136     RefPtr<QtWebContext> context;
137     RefPtr<WebKit::WebPageProxy> webPageProxy;
138
139     QtPageClient pageClient;
140     QtWebUndoController undoController;
141     OwnPtr<QWebNavigationHistory> navigationHistory;
142     OwnPtr<QWebPreferences> preferences;
143
144     QScopedPointer<QtWebPageLoadClient> pageLoadClient;
145     QScopedPointer<QtWebPagePolicyClient> pagePolicyClient;
146     QScopedPointer<QtWebPageUIClient> pageUIClient;
147
148     QScopedPointer<QQuickWebPage> pageView;
149     QQuickWebView* q_ptr;
150     QtFlickProvider* flickProvider;
151
152     QDeclarativeComponent* alertDialog;
153     QDeclarativeComponent* confirmDialog;
154     QDeclarativeComponent* promptDialog;
155     QDeclarativeComponent* authenticationDialog;
156     QDeclarativeComponent* certificateVerificationDialog;
157     QDeclarativeComponent* itemSelector;
158     QDeclarativeComponent* proxyAuthenticationDialog;
159     QDeclarativeComponent* filePicker;
160     QDeclarativeComponent* databaseQuotaDialog;
161
162     WebCore::ViewportArguments viewportArguments;
163
164     bool userDidOverrideContentWidth;
165     bool userDidOverrideContentHeight;
166     bool m_navigatorQtObjectEnabled;
167     bool m_renderToOffscreenBuffer;
168     bool m_loadStartedSignalSent;
169     bool m_dialogActive;
170     QUrl m_iconURL;
171     QUrl m_deferedUrlToLoad;
172 };
173
174 class QQuickWebViewLegacyPrivate : public QQuickWebViewPrivate {
175     Q_DECLARE_PUBLIC(QQuickWebView)
176 public:
177     QQuickWebViewLegacyPrivate(QQuickWebView* viewport);
178     virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
179
180     virtual void updateViewportSize();
181     virtual void enableMouseEvents();
182     virtual void disableMouseEvents();
183 };
184
185 class QQuickWebViewFlickablePrivate : public QQuickWebViewPrivate {
186     Q_DECLARE_PUBLIC(QQuickWebView)
187 public:
188     QQuickWebViewFlickablePrivate(QQuickWebView* viewport);
189     virtual ~QQuickWebViewFlickablePrivate();
190     virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
191
192     virtual QPointF pageItemPos();
193     virtual void updateContentsSize(const QSizeF&);
194
195     virtual void loadDidSucceed();
196     virtual void onComponentComplete();
197     virtual void loadDidCommit();
198     virtual void didFinishFirstNonEmptyLayout();
199     virtual void didChangeViewportProperties(const WebCore::ViewportArguments& args);
200     virtual QtViewportInteractionEngine* viewportInteractionEngine() { return interactionEngine.data(); }
201     virtual void updateViewportSize();
202
203     virtual void _q_suspend();
204     virtual void _q_resume();
205     virtual void _q_contentViewportChanged(const QPointF& trajectory);
206
207     virtual void pageDidRequestScroll(const QPoint& pos);
208     virtual void didChangeContentsSize(const QSize& newSize);
209
210     QtViewportInteractionEngine::Constraints computeViewportConstraints();
211
212 private:
213     QScopedPointer<QtViewportInteractionEngine> interactionEngine;
214     bool pageIsSuspended;
215     bool loadSuccessDispatchIsPending;
216 };
217
218 #endif // qquickwebview_p_p_h