WebKit/qt/Api/qwebpage.h
changeset 0 4f2f89ce4247
child 2 303757a437d3
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     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 #include <QtGui/qwidget.h>
       
    30 
       
    31 QT_BEGIN_NAMESPACE
       
    32 class QNetworkProxy;
       
    33 class QUndoStack;
       
    34 class QMenu;
       
    35 class QNetworkRequest;
       
    36 class QNetworkReply;
       
    37 class QNetworkAccessManager;
       
    38 QT_END_NAMESPACE
       
    39 
       
    40 class QWebElement;
       
    41 class QWebFrame;
       
    42 class QWebNetworkRequest;
       
    43 class QWebHistory;
       
    44 
       
    45 class QWebFrameData;
       
    46 class QWebHistoryItem;
       
    47 class QWebHitTestResult;
       
    48 class QWebNetworkInterface;
       
    49 class QWebPagePrivate;
       
    50 class QWebPluginFactory;
       
    51 class QtViewportHintsPrivate;
       
    52 
       
    53 namespace WebCore {
       
    54     class ChromeClientQt;
       
    55     class EditorClientQt;
       
    56     class FrameLoaderClientQt;
       
    57     class InspectorClientQt;
       
    58     class InspectorFrontendClientQt;
       
    59     class NotificationPresenterClientQt;
       
    60     class ResourceHandle;
       
    61     class HitTestResult;
       
    62     class QNetworkReplyHandler;
       
    63 
       
    64     struct FrameLoadRequest;
       
    65 }
       
    66 
       
    67 class QWEBKIT_EXPORT QWebPage : public QObject {
       
    68     Q_OBJECT
       
    69 
       
    70     Q_PROPERTY(bool modified READ isModified)
       
    71     Q_PROPERTY(QString selectedText READ selectedText)
       
    72     Q_PROPERTY(QSize viewportSize READ viewportSize WRITE setViewportSize)
       
    73     Q_PROPERTY(QSize preferredContentsSize READ preferredContentsSize WRITE setPreferredContentsSize)
       
    74     Q_PROPERTY(bool forwardUnsupportedContent READ forwardUnsupportedContent WRITE setForwardUnsupportedContent)
       
    75     Q_PROPERTY(LinkDelegationPolicy linkDelegationPolicy READ linkDelegationPolicy WRITE setLinkDelegationPolicy)
       
    76     Q_PROPERTY(QPalette palette READ palette WRITE setPalette)
       
    77     Q_PROPERTY(bool contentEditable READ isContentEditable WRITE setContentEditable)
       
    78     Q_ENUMS(LinkDelegationPolicy NavigationType WebAction)
       
    79 public:
       
    80     enum NavigationType {
       
    81         NavigationTypeLinkClicked,
       
    82         NavigationTypeFormSubmitted,
       
    83         NavigationTypeBackOrForward,
       
    84         NavigationTypeReload,
       
    85         NavigationTypeFormResubmitted,
       
    86         NavigationTypeOther
       
    87     };
       
    88 
       
    89     enum WebAction {
       
    90         NoWebAction = - 1,
       
    91 
       
    92         OpenLink,
       
    93 
       
    94         OpenLinkInNewWindow,
       
    95         OpenFrameInNewWindow,
       
    96 
       
    97         DownloadLinkToDisk,
       
    98         CopyLinkToClipboard,
       
    99 
       
   100         OpenImageInNewWindow,
       
   101         DownloadImageToDisk,
       
   102         CopyImageToClipboard,
       
   103 
       
   104         Back,
       
   105         Forward,
       
   106         Stop,
       
   107         Reload,
       
   108 
       
   109         Cut,
       
   110         Copy,
       
   111         Paste,
       
   112 
       
   113         Undo,
       
   114         Redo,
       
   115         MoveToNextChar,
       
   116         MoveToPreviousChar,
       
   117         MoveToNextWord,
       
   118         MoveToPreviousWord,
       
   119         MoveToNextLine,
       
   120         MoveToPreviousLine,
       
   121         MoveToStartOfLine,
       
   122         MoveToEndOfLine,
       
   123         MoveToStartOfBlock,
       
   124         MoveToEndOfBlock,
       
   125         MoveToStartOfDocument,
       
   126         MoveToEndOfDocument,
       
   127         SelectNextChar,
       
   128         SelectPreviousChar,
       
   129         SelectNextWord,
       
   130         SelectPreviousWord,
       
   131         SelectNextLine,
       
   132         SelectPreviousLine,
       
   133         SelectStartOfLine,
       
   134         SelectEndOfLine,
       
   135         SelectStartOfBlock,
       
   136         SelectEndOfBlock,
       
   137         SelectStartOfDocument,
       
   138         SelectEndOfDocument,
       
   139         DeleteStartOfWord,
       
   140         DeleteEndOfWord,
       
   141 
       
   142         SetTextDirectionDefault,
       
   143         SetTextDirectionLeftToRight,
       
   144         SetTextDirectionRightToLeft,
       
   145 
       
   146         ToggleBold,
       
   147         ToggleItalic,
       
   148         ToggleUnderline,
       
   149 
       
   150         InspectElement,
       
   151 
       
   152         InsertParagraphSeparator,
       
   153         InsertLineSeparator,
       
   154 
       
   155         SelectAll,
       
   156         ReloadAndBypassCache,
       
   157 
       
   158         PasteAndMatchStyle,
       
   159         RemoveFormat,
       
   160 
       
   161         ToggleStrikethrough,
       
   162         ToggleSubscript,
       
   163         ToggleSuperscript,
       
   164         InsertUnorderedList,
       
   165         InsertOrderedList,
       
   166         Indent,
       
   167         Outdent,
       
   168 
       
   169         AlignCenter,
       
   170         AlignJustified,
       
   171         AlignLeft,
       
   172         AlignRight,
       
   173 
       
   174         StopScheduledPageRefresh,
       
   175 
       
   176         WebActionCount
       
   177     };
       
   178 
       
   179     enum FindFlag {
       
   180         FindBackward = 1,
       
   181         FindCaseSensitively = 2,
       
   182         FindWrapsAroundDocument = 4,
       
   183         HighlightAllOccurrences = 8
       
   184     };
       
   185     Q_DECLARE_FLAGS(FindFlags, FindFlag)
       
   186 
       
   187     enum LinkDelegationPolicy {
       
   188         DontDelegateLinks,
       
   189         DelegateExternalLinks,
       
   190         DelegateAllLinks
       
   191     };
       
   192 
       
   193     enum WebWindowType {
       
   194         WebBrowserWindow,
       
   195         WebModalDialog
       
   196     };
       
   197 
       
   198     enum PermissionPolicy {
       
   199         PermissionGranted,
       
   200         PermissionUnknown,
       
   201         PermissionDenied
       
   202     };
       
   203 
       
   204     enum PermissionDomain {
       
   205         NotificationsPermissionDomain
       
   206     };
       
   207 
       
   208     class ViewportHints {
       
   209     public:
       
   210         ViewportHints();
       
   211         ViewportHints(const QWebPage::ViewportHints& other);
       
   212 
       
   213         ~ViewportHints();
       
   214 
       
   215         QWebPage::ViewportHints& operator=(const QWebPage::ViewportHints& other);
       
   216 
       
   217         inline qreal initialScaleFactor() const { return m_initialScaleFactor; };
       
   218         inline qreal minimumScaleFactor() const { return m_minimumScaleFactor; };
       
   219         inline qreal maximumScaleFactor() const { return m_maximumScaleFactor; };
       
   220         inline bool isUserScalable() const { return m_isUserScalable; };
       
   221         inline bool isValid() const { return m_isValid; };
       
   222         inline QSize size() const { return m_size; };
       
   223 
       
   224     private:
       
   225         QSharedDataPointer<QtViewportHintsPrivate> d;
       
   226         qreal m_initialScaleFactor;
       
   227         qreal m_minimumScaleFactor;
       
   228         qreal m_maximumScaleFactor;
       
   229         bool m_isUserScalable;
       
   230         bool m_isValid;
       
   231         QSize m_size;
       
   232 
       
   233         friend class WebCore::ChromeClientQt;
       
   234     };
       
   235 
       
   236 
       
   237     explicit QWebPage(QObject *parent = 0);
       
   238     ~QWebPage();
       
   239 
       
   240     QWebFrame *mainFrame() const;
       
   241     QWebFrame *currentFrame() const;
       
   242     QWebFrame* frameAt(const QPoint& pos) const;
       
   243 
       
   244     QWebHistory *history() const;
       
   245     QWebSettings *settings() const;
       
   246 
       
   247     void setView(QWidget *view);
       
   248     QWidget *view() const;
       
   249 
       
   250     bool isModified() const;
       
   251 #ifndef QT_NO_UNDOSTACK
       
   252     QUndoStack *undoStack() const;
       
   253 #endif
       
   254 
       
   255     void setNetworkAccessManager(QNetworkAccessManager *manager);
       
   256     QNetworkAccessManager *networkAccessManager() const;
       
   257 
       
   258     void setPluginFactory(QWebPluginFactory *factory);
       
   259     QWebPluginFactory *pluginFactory() const;
       
   260 
       
   261     quint64 totalBytes() const;
       
   262     quint64 bytesReceived() const;
       
   263 
       
   264     QString selectedText() const;
       
   265 
       
   266 #ifndef QT_NO_ACTION
       
   267     QAction *action(WebAction action) const;
       
   268 #endif
       
   269     virtual void triggerAction(WebAction action, bool checked = false);
       
   270 
       
   271     QSize viewportSize() const;
       
   272     void setViewportSize(const QSize &size) const;
       
   273 
       
   274     QSize preferredContentsSize() const;
       
   275     void setPreferredContentsSize(const QSize &size) const;
       
   276 
       
   277     virtual bool event(QEvent*);
       
   278     bool focusNextPrevChild(bool next);
       
   279 
       
   280     QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
       
   281 
       
   282     bool findText(const QString &subString, FindFlags options = 0);
       
   283 
       
   284     void setForwardUnsupportedContent(bool forward);
       
   285     bool forwardUnsupportedContent() const;
       
   286 
       
   287     void setLinkDelegationPolicy(LinkDelegationPolicy policy);
       
   288     LinkDelegationPolicy linkDelegationPolicy() const;
       
   289 
       
   290     void setPalette(const QPalette &palette);
       
   291     QPalette palette() const;
       
   292 
       
   293     void setContentEditable(bool editable);
       
   294     bool isContentEditable() const;
       
   295 
       
   296 #ifndef QT_NO_CONTEXTMENU
       
   297     bool swallowContextMenuEvent(QContextMenuEvent *event);
       
   298 #endif
       
   299     void updatePositionDependentActions(const QPoint &pos);
       
   300 
       
   301     QMenu *createStandardContextMenu();
       
   302 
       
   303     void setUserPermission(QWebFrame* frame, PermissionDomain domain, PermissionPolicy policy);
       
   304 
       
   305     enum Extension {
       
   306         ChooseMultipleFilesExtension,
       
   307         ErrorPageExtension
       
   308     };
       
   309     class ExtensionOption
       
   310     {};
       
   311     class ExtensionReturn
       
   312     {};
       
   313 
       
   314     class ChooseMultipleFilesExtensionOption : public ExtensionOption {
       
   315     public:
       
   316         QWebFrame *parentFrame;
       
   317         QStringList suggestedFileNames;
       
   318     };
       
   319 
       
   320     class ChooseMultipleFilesExtensionReturn : public ExtensionReturn {
       
   321     public:
       
   322         QStringList fileNames;
       
   323     };
       
   324 
       
   325     enum ErrorDomain { QtNetwork, Http, WebKit };
       
   326     class ErrorPageExtensionOption : public ExtensionOption {
       
   327     public:
       
   328         QUrl url;
       
   329         QWebFrame* frame;
       
   330         ErrorDomain domain;
       
   331         int error;
       
   332         QString errorString;
       
   333     };
       
   334 
       
   335     class ErrorPageExtensionReturn : public ExtensionReturn {
       
   336     public:
       
   337         ErrorPageExtensionReturn() : contentType(QLatin1String("text/html")), encoding(QLatin1String("utf-8")) {};
       
   338         QString contentType;
       
   339         QString encoding;
       
   340         QUrl baseUrl;
       
   341         QByteArray content;
       
   342     };
       
   343 
       
   344 
       
   345     virtual bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0);
       
   346     virtual bool supportsExtension(Extension extension) const;
       
   347 
       
   348     inline QWebPagePrivate* handle() const { return d; }
       
   349 
       
   350 public Q_SLOTS:
       
   351     bool shouldInterruptJavaScript();
       
   352     bool allowGeolocationRequest(QWebFrame *frame);
       
   353 
       
   354 Q_SIGNALS:
       
   355     void loadStarted();
       
   356     void loadProgress(int progress);
       
   357     void loadFinished(bool ok);
       
   358 
       
   359     void linkHovered(const QString &link, const QString &title, const QString &textContent);
       
   360     void statusBarMessage(const QString& text);
       
   361     void selectionChanged();
       
   362     void frameCreated(QWebFrame *frame);
       
   363     void geometryChangeRequested(const QRect& geom);
       
   364     void repaintRequested(const QRect& dirtyRect);
       
   365     void scrollRequested(int dx, int dy, const QRect& scrollViewRect);
       
   366     void windowCloseRequested();
       
   367     void printRequested(QWebFrame *frame);
       
   368     void linkClicked(const QUrl &url);
       
   369 
       
   370     void toolBarVisibilityChangeRequested(bool visible);
       
   371     void statusBarVisibilityChangeRequested(bool visible);
       
   372     void menuBarVisibilityChangeRequested(bool visible);
       
   373 
       
   374     void unsupportedContent(QNetworkReply *reply);
       
   375     void downloadRequested(const QNetworkRequest &request);
       
   376 
       
   377     void microFocusChanged();
       
   378     void contentsChanged();
       
   379     void databaseQuotaExceeded(QWebFrame* frame, QString databaseName);
       
   380 
       
   381     void saveFrameStateRequested(QWebFrame* frame, QWebHistoryItem* item);
       
   382     void restoreFrameStateRequested(QWebFrame* frame);
       
   383 
       
   384     void viewportChangeRequested(const QWebPage::ViewportHints& hints);
       
   385 
       
   386     void requestPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain);
       
   387     void checkPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy);
       
   388     void cancelRequestsForPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
       
   389 
       
   390 protected:
       
   391     virtual QWebPage *createWindow(WebWindowType type);
       
   392     virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues);
       
   393 
       
   394     virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);
       
   395     virtual QString chooseFile(QWebFrame *originatingFrame, const QString& oldFile);
       
   396     virtual void javaScriptAlert(QWebFrame *originatingFrame, const QString& msg);
       
   397     virtual bool javaScriptConfirm(QWebFrame *originatingFrame, const QString& msg);
       
   398     virtual bool javaScriptPrompt(QWebFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result);
       
   399     virtual void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID);
       
   400 
       
   401     virtual QString userAgentForUrl(const QUrl& url) const;
       
   402 
       
   403 private:
       
   404     Q_PRIVATE_SLOT(d, void _q_onLoadProgressChanged(int))
       
   405 #ifndef QT_NO_ACTION
       
   406     Q_PRIVATE_SLOT(d, void _q_webActionTriggered(bool checked))
       
   407 #endif
       
   408     Q_PRIVATE_SLOT(d, void _q_cleanupLeakMessages())
       
   409 
       
   410     QWebPagePrivate *d;
       
   411 
       
   412     friend class QWebFrame;
       
   413     friend class QWebPagePrivate;
       
   414     friend class QWebView;
       
   415     friend class QWebViewPrivate;
       
   416     friend class QGraphicsWebView;
       
   417     friend class QGraphicsWebViewPrivate;
       
   418     friend class QWebInspector;
       
   419     friend class WebCore::ChromeClientQt;
       
   420     friend class WebCore::EditorClientQt;
       
   421     friend class WebCore::FrameLoaderClientQt;
       
   422     friend class WebCore::InspectorClientQt;
       
   423     friend class WebCore::InspectorFrontendClientQt;
       
   424     friend class WebCore::NotificationPresenterClientQt;
       
   425     friend class WebCore::ResourceHandle;
       
   426     friend class WebCore::QNetworkReplyHandler;
       
   427     friend class DumpRenderTreeSupportQt;
       
   428 };
       
   429 
       
   430 Q_DECLARE_OPERATORS_FOR_FLAGS(QWebPage::FindFlags)
       
   431 
       
   432 #endif