[Qt] Simplify QT_VERSION_CHECKS for Qt5 by introducing HAVE(QT5)
[WebKit-https.git] / Source / WebKit / qt / Api / qwebpage.h
1 /*
2     Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
3     Copyright (C) 2007 Staikos Computing Services Inc.
4
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Library General Public
7     License as published by the Free Software Foundation; either
8     version 2 of the License, or (at your option) any later version.
9
10     This library is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13     Library General Public License for more details.
14
15     You should have received a copy of the GNU Library General Public License
16     along with this library; see the file COPYING.LIB.  If not, write to
17     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18     Boston, MA 02110-1301, USA.
19 */
20
21 #ifndef QWEBPAGE_H
22 #define QWEBPAGE_H
23
24 #include "qwebsettings.h"
25 #include "qwebkitglobal.h"
26
27 #include <QtCore/qobject.h>
28 #include <QtCore/qurl.h>
29 #if defined(HAVE_QT5) && HAVE_QT5
30 #include <QtWidgets/qwidget.h>
31 #else
32 #include <QtGui/qwidget.h>
33 #endif
34
35 QT_BEGIN_NAMESPACE
36 class QNetworkProxy;
37 class QUndoStack;
38 class QMenu;
39 class QNetworkRequest;
40 class QNetworkReply;
41 class QNetworkAccessManager;
42 QT_END_NAMESPACE
43
44 class QWebElement;
45 class QWebFrame;
46 class QWebNetworkRequest;
47 class QWebHistory;
48
49 class QWebFrameData;
50 class QWebHistoryItem;
51 class QWebHitTestResult;
52 class QWebNetworkInterface;
53 class QWebPagePrivate;
54 class QWebPluginFactory;
55 class QWebSecurityOrigin;
56 class QtViewportAttributesPrivate;
57
58 namespace WebCore {
59     class ChromeClientQt;
60     class EditorClientQt;
61     class FrameLoaderClientQt;
62     class InspectorClientQt;
63     class InspectorServerRequestHandlerQt;
64     class InspectorFrontendClientQt;
65     class NotificationPresenterClientQt;
66     class GeolocationPermissionClientQt;
67     class ResourceHandle;
68     class HitTestResult;
69     class QNetworkReplyHandler;
70
71     struct FrameLoadRequest;
72 }
73
74 class QWEBKIT_EXPORT QWebPage : public QObject {
75     Q_OBJECT
76
77     Q_PROPERTY(bool modified READ isModified)
78     Q_PROPERTY(QString selectedText READ selectedText)
79     Q_PROPERTY(QString selectedHtml READ selectedHtml)
80     Q_PROPERTY(bool hasSelection READ hasSelection)
81     Q_PROPERTY(QSize viewportSize READ viewportSize WRITE setViewportSize)
82     Q_PROPERTY(QSize preferredContentsSize READ preferredContentsSize WRITE setPreferredContentsSize)
83     Q_PROPERTY(bool forwardUnsupportedContent READ forwardUnsupportedContent WRITE setForwardUnsupportedContent)
84     Q_PROPERTY(LinkDelegationPolicy linkDelegationPolicy READ linkDelegationPolicy WRITE setLinkDelegationPolicy)
85     Q_PROPERTY(QPalette palette READ palette WRITE setPalette)
86     Q_PROPERTY(bool contentEditable READ isContentEditable WRITE setContentEditable)
87     Q_ENUMS(LinkDelegationPolicy NavigationType WebAction)
88 public:
89     enum NavigationType {
90         NavigationTypeLinkClicked,
91         NavigationTypeFormSubmitted,
92         NavigationTypeBackOrForward,
93         NavigationTypeReload,
94         NavigationTypeFormResubmitted,
95         NavigationTypeOther
96     };
97
98     enum WebAction {
99         NoWebAction = - 1,
100
101         OpenLink,
102
103         OpenLinkInNewWindow,
104         OpenFrameInNewWindow,
105
106         DownloadLinkToDisk,
107         CopyLinkToClipboard,
108
109         OpenImageInNewWindow,
110         DownloadImageToDisk,
111         CopyImageToClipboard,
112
113         Back,
114         Forward,
115         Stop,
116         Reload,
117
118         Cut,
119         Copy,
120         Paste,
121
122         Undo,
123         Redo,
124         MoveToNextChar,
125         MoveToPreviousChar,
126         MoveToNextWord,
127         MoveToPreviousWord,
128         MoveToNextLine,
129         MoveToPreviousLine,
130         MoveToStartOfLine,
131         MoveToEndOfLine,
132         MoveToStartOfBlock,
133         MoveToEndOfBlock,
134         MoveToStartOfDocument,
135         MoveToEndOfDocument,
136         SelectNextChar,
137         SelectPreviousChar,
138         SelectNextWord,
139         SelectPreviousWord,
140         SelectNextLine,
141         SelectPreviousLine,
142         SelectStartOfLine,
143         SelectEndOfLine,
144         SelectStartOfBlock,
145         SelectEndOfBlock,
146         SelectStartOfDocument,
147         SelectEndOfDocument,
148         DeleteStartOfWord,
149         DeleteEndOfWord,
150
151         SetTextDirectionDefault,
152         SetTextDirectionLeftToRight,
153         SetTextDirectionRightToLeft,
154
155         ToggleBold,
156         ToggleItalic,
157         ToggleUnderline,
158
159         InspectElement,
160
161         InsertParagraphSeparator,
162         InsertLineSeparator,
163
164         SelectAll,
165         ReloadAndBypassCache,
166
167         PasteAndMatchStyle,
168         RemoveFormat,
169
170         ToggleStrikethrough,
171         ToggleSubscript,
172         ToggleSuperscript,
173         InsertUnorderedList,
174         InsertOrderedList,
175         Indent,
176         Outdent,
177
178         AlignCenter,
179         AlignJustified,
180         AlignLeft,
181         AlignRight,
182
183         StopScheduledPageRefresh,
184
185         CopyImageUrlToClipboard,
186
187         WebActionCount
188     };
189
190     enum FindFlag {
191         FindBackward = 1,
192         FindCaseSensitively = 2,
193         FindWrapsAroundDocument = 4,
194         HighlightAllOccurrences = 8
195     };
196     Q_DECLARE_FLAGS(FindFlags, FindFlag)
197
198     enum LinkDelegationPolicy {
199         DontDelegateLinks,
200         DelegateExternalLinks,
201         DelegateAllLinks
202     };
203
204     enum WebWindowType {
205         WebBrowserWindow,
206         WebModalDialog
207     };
208
209     enum PermissionPolicy {
210         PermissionUnknown,
211         PermissionGrantedByUser,
212         PermissionDeniedByUser
213     };
214
215     enum Feature {
216         Notifications,
217         Geolocation
218     };
219
220     class QWEBKIT_EXPORT ViewportAttributes {
221     public:
222         ViewportAttributes();
223         ViewportAttributes(const QWebPage::ViewportAttributes& other);
224
225         ~ViewportAttributes();
226
227         QWebPage::ViewportAttributes& operator=(const QWebPage::ViewportAttributes& other);
228
229         inline qreal initialScaleFactor() const { return m_initialScaleFactor; }
230         inline qreal minimumScaleFactor() const { return m_minimumScaleFactor; }
231         inline qreal maximumScaleFactor() const { return m_maximumScaleFactor; }
232         inline qreal devicePixelRatio() const { return m_devicePixelRatio; }
233         inline bool isUserScalable() const { return m_isUserScalable; }
234         inline bool isValid() const { return m_isValid; }
235         inline QSizeF size() const { return m_size; }
236
237     private:
238         QSharedDataPointer<QtViewportAttributesPrivate> d;
239         qreal m_initialScaleFactor;
240         qreal m_minimumScaleFactor;
241         qreal m_maximumScaleFactor;
242         qreal m_devicePixelRatio;
243         bool m_isUserScalable;
244         bool m_isValid;
245         QSizeF m_size;
246
247         friend class WebCore::ChromeClientQt;
248         friend class QWebPage;
249     };
250
251
252     explicit QWebPage(QObject *parent = 0);
253     ~QWebPage();
254
255     QWebFrame *mainFrame() const;
256     QWebFrame *currentFrame() const;
257     QWebFrame* frameAt(const QPoint& pos) const;
258
259     QWebHistory *history() const;
260     QWebSettings *settings() const;
261
262     void setView(QWidget *view);
263     QWidget *view() const;
264
265     bool isModified() const;
266 #ifndef QT_NO_UNDOSTACK
267     QUndoStack *undoStack() const;
268 #endif
269
270     void setNetworkAccessManager(QNetworkAccessManager *manager);
271     QNetworkAccessManager *networkAccessManager() const;
272
273     void setPluginFactory(QWebPluginFactory *factory);
274     QWebPluginFactory *pluginFactory() const;
275
276     quint64 totalBytes() const;
277     quint64 bytesReceived() const;
278
279     bool hasSelection() const;
280     QString selectedText() const;
281     QString selectedHtml() const;
282
283 #ifndef QT_NO_ACTION
284     QAction *action(WebAction action) const;
285 #endif
286     virtual void triggerAction(WebAction action, bool checked = false);
287
288     QSize viewportSize() const;
289     void setViewportSize(const QSize &size) const;
290     ViewportAttributes viewportAttributesForSize(const QSize& availableSize) const;
291
292     QSize preferredContentsSize() const;
293     void setPreferredContentsSize(const QSize &size) const;
294     void setActualVisibleContentRect(const QRect& rect) const;
295
296     virtual bool event(QEvent*);
297     bool focusNextPrevChild(bool next);
298
299     QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
300
301     bool findText(const QString &subString, FindFlags options = 0);
302
303     void setForwardUnsupportedContent(bool forward);
304     bool forwardUnsupportedContent() const;
305
306     void setLinkDelegationPolicy(LinkDelegationPolicy policy);
307     LinkDelegationPolicy linkDelegationPolicy() const;
308
309     void setPalette(const QPalette &palette);
310     QPalette palette() const;
311
312     void setContentEditable(bool editable);
313     bool isContentEditable() const;
314
315 #ifndef QT_NO_CONTEXTMENU
316     bool swallowContextMenuEvent(QContextMenuEvent *event);
317 #endif
318     void updatePositionDependentActions(const QPoint &pos);
319
320     QMenu *createStandardContextMenu();
321
322     void setFeaturePermission(QWebFrame* frame, Feature feature, PermissionPolicy policy);
323
324     QStringList supportedContentTypes() const;
325     bool supportsContentType(const QString& mimeType) const;
326
327     enum Extension {
328         ChooseMultipleFilesExtension,
329         ErrorPageExtension
330     };
331     class ExtensionOption
332     {};
333     class ExtensionReturn
334     {};
335
336     class ChooseMultipleFilesExtensionOption : public ExtensionOption {
337     public:
338         QWebFrame *parentFrame;
339         QStringList suggestedFileNames;
340     };
341
342     class ChooseMultipleFilesExtensionReturn : public ExtensionReturn {
343     public:
344         QStringList fileNames;
345     };
346
347     enum ErrorDomain { QtNetwork, Http, WebKit };
348     class ErrorPageExtensionOption : public ExtensionOption {
349     public:
350         QUrl url;
351         QWebFrame* frame;
352         ErrorDomain domain;
353         int error;
354         QString errorString;
355     };
356
357     class ErrorPageExtensionReturn : public ExtensionReturn {
358     public:
359         ErrorPageExtensionReturn() : contentType(QLatin1String("text/html")), encoding(QLatin1String("utf-8")) {};
360         QString contentType;
361         QString encoding;
362         QUrl baseUrl;
363         QByteArray content;
364     };
365
366
367     virtual bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0);
368     virtual bool supportsExtension(Extension extension) const;
369
370     inline QWebPagePrivate* handle() const { return d; }
371
372 public Q_SLOTS:
373     bool shouldInterruptJavaScript();
374
375 Q_SIGNALS:
376     void loadStarted();
377     void loadProgress(int progress);
378     void loadFinished(bool ok);
379
380     void linkHovered(const QString &link, const QString &title, const QString &textContent);
381     void statusBarMessage(const QString& text);
382     void selectionChanged();
383     void frameCreated(QWebFrame *frame);
384     void geometryChangeRequested(const QRect& geom);
385     void repaintRequested(const QRect& dirtyRect);
386     void scrollRequested(int dx, int dy, const QRect& scrollViewRect);
387     void windowCloseRequested();
388     void printRequested(QWebFrame *frame);
389     void linkClicked(const QUrl &url);
390
391     void toolBarVisibilityChangeRequested(bool visible);
392     void statusBarVisibilityChangeRequested(bool visible);
393     void menuBarVisibilityChangeRequested(bool visible);
394
395     void unsupportedContent(QNetworkReply *reply);
396     void downloadRequested(const QNetworkRequest &request);
397
398     void microFocusChanged();
399     void contentsChanged();
400     void databaseQuotaExceeded(QWebFrame* frame, QString databaseName);
401     void applicationCacheQuotaExceeded(QWebSecurityOrigin* origin, quint64 defaultOriginQuota, quint64 totalSpaceNeeded);
402
403     void saveFrameStateRequested(QWebFrame* frame, QWebHistoryItem* item);
404     void restoreFrameStateRequested(QWebFrame* frame);
405
406     void viewportChangeRequested();
407
408     void featurePermissionRequested(QWebFrame* frame, QWebPage::Feature feature);
409     void featurePermissionRequestCanceled(QWebFrame* frame, QWebPage::Feature feature);
410
411 protected:
412     virtual QWebPage *createWindow(WebWindowType type);
413     virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues);
414
415     virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);
416     virtual QString chooseFile(QWebFrame *originatingFrame, const QString& oldFile);
417     virtual void javaScriptAlert(QWebFrame *originatingFrame, const QString& msg);
418     virtual bool javaScriptConfirm(QWebFrame *originatingFrame, const QString& msg);
419     virtual bool javaScriptPrompt(QWebFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result);
420     virtual void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID);
421
422     virtual QString userAgentForUrl(const QUrl& url) const;
423
424 private:
425     Q_PRIVATE_SLOT(d, void _q_onLoadProgressChanged(int))
426 #ifndef QT_NO_ACTION
427     Q_PRIVATE_SLOT(d, void _q_webActionTriggered(bool checked))
428 #endif
429     Q_PRIVATE_SLOT(d, void _q_cleanupLeakMessages())
430
431     QWebPagePrivate *d;
432
433     friend class QWebFrame;
434     friend class QWebPagePrivate;
435     friend class QWebView;
436     friend class QWebViewPrivate;
437     friend class QGraphicsWebView;
438     friend class QGraphicsWebViewPrivate;
439     friend class QWebInspector;
440     friend class WebCore::ChromeClientQt;
441     friend class WebCore::EditorClientQt;
442     friend class WebCore::FrameLoaderClientQt;
443     friend class WebCore::InspectorClientQt;
444     friend class WebCore::InspectorServerRequestHandlerQt;
445     friend class WebCore::InspectorFrontendClientQt;
446     friend class WebCore::NotificationPresenterClientQt;
447     friend class WebCore::GeolocationPermissionClientQt;
448     friend class WebCore::ResourceHandle;
449     friend class WebCore::QNetworkReplyHandler;
450     friend class DumpRenderTreeSupportQt;
451 };
452
453 Q_DECLARE_OPERATORS_FOR_FLAGS(QWebPage::FindFlags)
454
455 #endif