f1b4cbb366605a639356b13476591f7007aeea47
[WebKit-https.git] / Source / WebKit2 / UIProcess / API / qt / qquickwebview_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_h
22 #define qquickwebview_p_h
23
24 #include "qwebkitglobal.h"
25 #include <QtQuick/qquickitem.h>
26
27 class QWebNavigationRequest;
28 class QDeclarativeComponent;
29 class QQuickWebPage;
30 class QQuickWebViewAttached;
31 class QQuickWebViewPrivate;
32 class QQuickWebViewExperimental;
33 class QWebDownloadItem;
34 class QWebNavigationHistory;
35 class QWebPreferences;
36 class QWebPermissionRequest;
37 class QWebViewportInfo;
38
39 namespace WTR {
40 class PlatformWebView;
41 }
42
43 typedef const struct OpaqueWKContext* WKContextRef;
44 typedef const struct OpaqueWKPageGroup* WKPageGroupRef;
45 typedef const struct OpaqueWKPage* WKPageRef;
46
47 QT_BEGIN_NAMESPACE
48 class QPainter;
49 class QUrl;
50 QT_END_NAMESPACE
51
52 class QWEBKIT_EXPORT QQuickWebView : public QQuickItem {
53     Q_OBJECT
54     Q_PROPERTY(QString title READ title NOTIFY titleChanged)
55     Q_PROPERTY(QUrl url READ url NOTIFY urlChanged)
56     Q_PROPERTY(QUrl icon READ icon NOTIFY iconChanged FINAL)
57     Q_PROPERTY(int loadProgress READ loadProgress NOTIFY loadProgressChanged)
58     Q_PROPERTY(bool canGoBack READ canGoBack NOTIFY navigationStateChanged FINAL)
59     Q_PROPERTY(bool canGoForward READ canGoForward NOTIFY navigationStateChanged FINAL)
60     Q_PROPERTY(bool loading READ loading NOTIFY navigationStateChanged FINAL)
61     Q_PROPERTY(bool canReload READ canReload NOTIFY navigationStateChanged FINAL)
62     Q_ENUMS(NavigationRequestAction)
63     Q_ENUMS(ErrorDomain)
64
65 public:
66     enum NavigationRequestAction {
67         AcceptRequest,
68         IgnoreRequest
69     };
70
71     enum ErrorDomain {
72         InternalErrorDomain,
73         NetworkErrorDomain,
74         HttpErrorDomain,
75         DownloadErrorDomain
76     };
77     QQuickWebView(QQuickItem* parent = 0);
78     virtual ~QQuickWebView();
79
80     QUrl url() const;
81     QUrl icon() const;
82     QString title() const;
83     int loadProgress() const;
84
85     bool canGoBack() const;
86     bool canGoForward() const;
87     bool loading() const;
88     bool canReload() const;
89
90     virtual QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
91
92     QQuickWebPage* page();
93
94     QQuickWebViewExperimental* experimental() const;
95     static QQuickWebViewAttached* qmlAttachedProperties(QObject*);
96
97     static void platformInitialize(); // Only needed by WTR.
98
99 public Q_SLOTS:
100     void load(const QUrl&);
101     void loadHtml(const QString& html, const QUrl& baseUrl = QUrl());
102
103     void goBack();
104     void goForward();
105     void stop();
106     void reload();
107
108 Q_SIGNALS:
109     void titleChanged(const QString& title);
110     void loadStarted();
111     void loadSucceeded();
112     void loadFailed(QQuickWebView::ErrorDomain errorDomain, int errorCode, const QUrl& url, const QString& description);
113     void loadProgressChanged(int progress);
114     void urlChanged(const QUrl& url);
115     void iconChanged(const QUrl& iconURL);
116     void linkHovered(const QUrl& url, const QString& title);
117     void navigationStateChanged();
118     void navigationRequested(QWebNavigationRequest* request);
119
120 protected:
121     virtual void geometryChanged(const QRectF&, const QRectF&);
122     virtual void focusInEvent(QFocusEvent*);
123     virtual void focusOutEvent(QFocusEvent*);
124
125 private:
126     Q_DECLARE_PRIVATE(QQuickWebView)
127
128     QQuickWebView(WKContextRef, WKPageGroupRef, QQuickItem* parent = 0);
129     WKPageRef pageRef() const;
130
131     Q_PRIVATE_SLOT(d_func(), void _q_suspend());
132     Q_PRIVATE_SLOT(d_func(), void _q_resume());
133     Q_PRIVATE_SLOT(d_func(), void _q_viewportTrajectoryVectorChanged(const QPointF&));
134     Q_PRIVATE_SLOT(d_func(), void _q_onOpenPanelFilesSelected());
135     Q_PRIVATE_SLOT(d_func(), void _q_onOpenPanelFinished(int result));
136     Q_PRIVATE_SLOT(d_func(), void _q_onVisibleChanged());
137     Q_PRIVATE_SLOT(d_func(), void _q_onReceivedResponseFromDownload(QWebDownloadItem*));
138     Q_PRIVATE_SLOT(d_func(), void _q_onIconChangedForPageURL(const QUrl&, const QUrl&));
139     // Hides QObject::d_ptr allowing us to use the convenience macros.
140     QScopedPointer<QQuickWebViewPrivate> d_ptr;
141     QQuickWebViewExperimental* m_experimental;
142
143     friend class QtWebPageLoadClient;
144     friend class QtWebPagePolicyClient;
145     friend class QtWebPageUIClient;
146     friend class WTR::PlatformWebView;
147     friend class QQuickWebViewExperimental;
148 };
149
150 QML_DECLARE_TYPE(QQuickWebView)
151
152 class QWEBKIT_EXPORT QQuickWebViewAttached : public QObject {
153     Q_OBJECT
154     Q_PROPERTY(QQuickWebView* view READ view NOTIFY viewChanged FINAL)
155
156 public:
157     QQuickWebViewAttached(QObject* object);
158     QQuickWebView* view() const { return m_view; }
159     void setView(QQuickWebView*);
160
161 Q_SIGNALS:
162     void viewChanged();
163
164 private:
165     QQuickWebView* m_view;
166 };
167
168 QML_DECLARE_TYPEINFO(QQuickWebView, QML_HAS_ATTACHED_PROPERTIES)
169
170 class QWEBKIT_EXPORT QQuickWebViewExperimental : public QObject {
171     Q_OBJECT
172     Q_PROPERTY(QQuickWebPage* page READ page CONSTANT FINAL)
173     Q_PROPERTY(QWebNavigationHistory* navigationHistory READ navigationHistory CONSTANT FINAL)
174     Q_PROPERTY(QDeclarativeComponent* alertDialog READ alertDialog WRITE setAlertDialog NOTIFY alertDialogChanged)
175     Q_PROPERTY(QDeclarativeComponent* confirmDialog READ confirmDialog WRITE setConfirmDialog NOTIFY confirmDialogChanged)
176     Q_PROPERTY(QDeclarativeComponent* promptDialog READ promptDialog WRITE setPromptDialog NOTIFY promptDialogChanged)
177     Q_PROPERTY(QDeclarativeComponent* itemSelector READ itemSelector WRITE setItemSelector NOTIFY itemSelectorChanged)
178     Q_PROPERTY(QWebPreferences* preferences READ preferences CONSTANT FINAL)
179     Q_PROPERTY(bool useTraditionalDesktopBehaviour READ useTraditionalDesktopBehaviour WRITE setUseTraditionalDesktopBehaviour)
180     Q_PROPERTY(QWebViewportInfo* viewportInfo READ viewportInfo CONSTANT FINAL)
181     Q_ENUMS(NavigationRequestAction)
182
183 public:
184     enum NavigationRequestAction {
185         DownloadRequest = 2
186     };
187
188     QQuickWebViewExperimental(QQuickWebView* webView);
189     virtual ~QQuickWebViewExperimental();
190
191     QDeclarativeComponent* alertDialog() const;
192     void setAlertDialog(QDeclarativeComponent*);
193     QDeclarativeComponent* confirmDialog() const;
194     void setConfirmDialog(QDeclarativeComponent*);
195     QDeclarativeComponent* promptDialog() const;
196     void setPromptDialog(QDeclarativeComponent*);
197     QDeclarativeComponent* itemSelector() const;
198     void setItemSelector(QDeclarativeComponent*);
199     
200     QWebViewportInfo* viewportInfo();
201
202     QWebPreferences* preferences() const;
203     bool useTraditionalDesktopBehaviour() const;
204     QWebNavigationHistory* navigationHistory() const;
205     QQuickWebPage* page();
206
207 public Q_SLOTS:
208     void setUseTraditionalDesktopBehaviour(bool enable);
209     void goBackTo(int index);
210     void goForwardTo(int index);
211     void postMessage(const QString&);
212
213 Q_SIGNALS:
214     void alertDialogChanged();
215     void confirmDialogChanged();
216     void promptDialogChanged();
217     void itemSelectorChanged();
218     void downloadRequested(QWebDownloadItem* downloadItem);
219     void permissionRequested(QWebPermissionRequest* permission);
220     void messageReceived(const QVariantMap& message);
221
222 private:
223     QQuickWebView* q_ptr;
224     QQuickWebViewPrivate* d_ptr;
225     QWebViewportInfo* m_viewportInfo;
226
227     friend class QtWebPageUIClient;
228
229     Q_DECLARE_PRIVATE(QQuickWebView)
230     Q_DECLARE_PUBLIC(QQuickWebView)
231 };
232
233 #endif // qquickwebview_p_h