[Qt][WK2] Move QQuickWebView::downloadRequested signal into experimental
[WebKit.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 <QtDeclarative/qquickitem.h>
26
27 class QDeclarativeComponent;
28 class QQuickWebPage;
29 class QQuickWebViewAttached;
30 class QQuickWebViewPrivate;
31 class QQuickWebViewExperimental;
32 class QWebDownloadItem;
33 class QWebPreferences;
34
35 namespace WTR {
36 class PlatformWebView;
37 }
38
39 typedef const struct OpaqueWKContext* WKContextRef;
40 typedef const struct OpaqueWKPageGroup* WKPageGroupRef;
41 typedef const struct OpaqueWKPage* WKPageRef;
42
43 QT_BEGIN_NAMESPACE
44 class QPainter;
45 class QUrl;
46 QT_END_NAMESPACE
47
48 class QWEBKIT_EXPORT QQuickWebView : public QQuickItem {
49     Q_OBJECT
50     Q_PROPERTY(QString title READ title NOTIFY titleChanged)
51     Q_PROPERTY(QUrl url READ url NOTIFY urlChanged)
52     Q_PROPERTY(int loadProgress READ loadProgress NOTIFY loadProgressChanged)
53     Q_PROPERTY(bool canGoBack READ canGoBack NOTIFY navigationStateChanged FINAL)
54     Q_PROPERTY(bool canGoForward READ canGoForward NOTIFY navigationStateChanged FINAL)
55     Q_PROPERTY(bool canStop READ canStop NOTIFY navigationStateChanged FINAL)
56     Q_PROPERTY(bool canReload READ canReload NOTIFY navigationStateChanged FINAL)
57     Q_PROPERTY(QWebPreferences* preferences READ preferences CONSTANT FINAL)
58     Q_PROPERTY(QQuickWebPage* page READ page CONSTANT FINAL)
59     Q_ENUMS(NavigationRequestAction)
60     Q_ENUMS(ErrorType)
61
62 public:
63     enum NavigationRequestAction {
64         AcceptRequest,
65         IgnoreRequest,
66         DownloadRequest
67     };
68
69     enum ErrorType {
70         EngineError,
71         NetworkError,
72         HttpError,
73         DownloadError
74     };
75     QQuickWebView(QQuickItem* parent = 0);
76     virtual ~QQuickWebView();
77
78     QUrl url() const;
79     QString title() const;
80     int loadProgress() const;
81
82     bool canGoBack() const;
83     bool canGoForward() const;
84     bool canStop() const;
85     bool canReload() const;
86
87     QWebPreferences* preferences() const;
88     QQuickWebPage* page();
89
90     QQuickWebViewExperimental* experimental() const;
91     static QQuickWebViewAttached* qmlAttachedProperties(QObject*);
92
93 public Q_SLOTS:
94     void load(const QUrl&);
95     void postMessage(const QString&);
96     void loadHtml(const QString& html, const QUrl& baseUrl = QUrl());
97
98     void goBack();
99     void goForward();
100     void stop();
101     void reload();
102
103 Q_SIGNALS:
104     void titleChanged(const QString& title);
105     void statusBarMessageChanged(const QString& message);
106     void loadStarted();
107     void loadSucceeded();
108     void loadFailed(QQuickWebView::ErrorType errorType, int errorCode, const QUrl& url);
109     void loadProgressChanged(int progress);
110     void urlChanged(const QUrl& url);
111     void messageReceived(const QVariantMap& message);
112     void linkHovered(const QUrl& url, const QString& title);
113     void viewModeChanged();
114     void navigationStateChanged();
115     void navigationRequested(QObject* request);
116
117 protected:
118     virtual void geometryChanged(const QRectF&, const QRectF&);
119     virtual void focusInEvent(QFocusEvent*);
120     virtual void focusOutEvent(QFocusEvent*);
121     virtual void touchEvent(QTouchEvent* event);
122
123 private:
124     Q_DECLARE_PRIVATE(QQuickWebView)
125
126     QQuickWebView(WKContextRef, WKPageGroupRef, QQuickItem* parent = 0);
127     WKPageRef pageRef() const;
128
129     Q_PRIVATE_SLOT(d_func(), void _q_viewportUpdated());
130     Q_PRIVATE_SLOT(d_func(), void _q_viewportTrajectoryVectorChanged(const QPointF&));
131     Q_PRIVATE_SLOT(d_func(), void _q_onOpenPanelFilesSelected());
132     Q_PRIVATE_SLOT(d_func(), void _q_onOpenPanelFinished(int result));
133     Q_PRIVATE_SLOT(d_func(), void _q_onVisibleChanged());
134     // Hides QObject::d_ptr allowing us to use the convenience macros.
135     QScopedPointer<QQuickWebViewPrivate> d_ptr;
136     QQuickWebViewExperimental* m_experimental;
137
138     friend class QtWebPageLoadClient;
139     friend class QtWebPagePolicyClient;
140     friend class QtWebPageProxy;
141     friend class QtWebPageUIClient;
142     friend class WTR::PlatformWebView;
143     friend class QQuickWebViewExperimental;
144 };
145
146 QML_DECLARE_TYPE(QQuickWebView)
147
148 class QWEBKIT_EXPORT QQuickWebViewAttached : public QObject {
149     Q_OBJECT
150     Q_PROPERTY(QQuickWebView* view READ view NOTIFY viewChanged FINAL)
151
152 public:
153     QQuickWebViewAttached(QObject* object);
154     QQuickWebView* view() const { return m_view; }
155     void setView(QQuickWebView*);
156
157 Q_SIGNALS:
158     void viewChanged();
159
160 private:
161     QQuickWebView* m_view;
162 };
163
164 QML_DECLARE_TYPEINFO(QQuickWebView, QML_HAS_ATTACHED_PROPERTIES)
165
166 class QWEBKIT_EXPORT QQuickWebViewExperimental : public QObject {
167     Q_OBJECT
168     Q_PROPERTY(QDeclarativeComponent* alertDialog READ alertDialog WRITE setAlertDialog NOTIFY alertDialogChanged)
169     Q_PROPERTY(QDeclarativeComponent* confirmDialog READ confirmDialog WRITE setConfirmDialog NOTIFY confirmDialogChanged)
170     Q_PROPERTY(QDeclarativeComponent* promptDialog READ promptDialog WRITE setPromptDialog NOTIFY promptDialogChanged)
171
172 public:
173     QQuickWebViewExperimental(QQuickWebView* webView);
174     virtual ~QQuickWebViewExperimental();
175
176     QDeclarativeComponent* alertDialog() const;
177     void setAlertDialog(QDeclarativeComponent*);
178     QDeclarativeComponent* confirmDialog() const;
179     void setConfirmDialog(QDeclarativeComponent*);
180     QDeclarativeComponent* promptDialog() const;
181     void setPromptDialog(QDeclarativeComponent*);
182
183 public Q_SLOTS:
184     void setUseTraditionalDesktopBehaviour(bool enable);
185
186 Q_SIGNALS:
187     void alertDialogChanged();
188     void confirmDialogChanged();
189     void promptDialogChanged();
190     void downloadRequested(QWebDownloadItem* downloadItem);
191
192 private:
193     QQuickWebView* q_ptr;
194     QQuickWebViewPrivate* d_ptr;
195
196     friend class QtWebPageProxy;
197
198     Q_DECLARE_PRIVATE(QQuickWebView)
199     Q_DECLARE_PUBLIC(QQuickWebView)
200 };
201
202 #endif // qquickwebview_p_h