summaryrefslogtreecommitdiffstats
path: root/src/core/api/qwebenginepage.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/api/qwebenginepage.h')
-rw-r--r--src/core/api/qwebenginepage.h405
1 files changed, 405 insertions, 0 deletions
diff --git a/src/core/api/qwebenginepage.h b/src/core/api/qwebenginepage.h
new file mode 100644
index 000000000..e5a4e9551
--- /dev/null
+++ b/src/core/api/qwebenginepage.h
@@ -0,0 +1,405 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QWEBENGINEPAGE_H
+#define QWEBENGINEPAGE_H
+
+#include <QtWebEngineCore/qtwebenginecoreglobal.h>
+#include <QtWebEngineCore/qwebengineclientcertificateselection.h>
+#include <QtWebEngineCore/qwebenginedownloadrequest.h>
+#include <QtWebEngineCore/qwebenginequotarequest.h>
+#include <QtWebEngineCore/qwebengineframe.h>
+
+#include <QtCore/qobject.h>
+#include <QtCore/qurl.h>
+#include <QtGui/qpagelayout.h>
+#include <QtGui/qpageranges.h>
+#include <QtGui/qtgui-config.h>
+
+#include <functional>
+#include <optional>
+
+QT_BEGIN_NAMESPACE
+
+class QAction;
+class QAuthenticator;
+class QContextMenuBuilder;
+class QRect;
+class QVariant;
+class QWebChannel;
+class QWebEngineCertificateError;
+class QWebEngineDesktopMediaRequest;
+class QWebEngineFileSystemAccessRequest;
+class QWebEngineFindTextResult;
+class QWebEngineFullScreenRequest;
+class QWebEngineHistory;
+class QWebEngineHttpRequest;
+class QWebEngineLoadingInfo;
+class QWebEngineNavigationRequest;
+class QWebEngineNewWindowRequest;
+class QWebEnginePagePrivate;
+class QWebEngineProfile;
+class QWebEngineRegisterProtocolHandlerRequest;
+class QWebEngineScriptCollection;
+class QWebEngineSettings;
+class QWebEngineUrlRequestInterceptor;
+class QWebEngineWebAuthUxRequest;
+
+class Q_WEBENGINECORE_EXPORT QWebEnginePage : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString selectedText READ selectedText)
+ Q_PROPERTY(bool hasSelection READ hasSelection)
+ Q_PROPERTY(QUrl requestedUrl READ requestedUrl)
+ Q_PROPERTY(qreal zoomFactor READ zoomFactor WRITE setZoomFactor)
+ Q_PROPERTY(QString title READ title NOTIFY titleChanged)
+ Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
+ Q_PROPERTY(QUrl iconUrl READ iconUrl NOTIFY iconUrlChanged)
+ Q_PROPERTY(QIcon icon READ icon NOTIFY iconChanged)
+ Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor)
+ Q_PROPERTY(QSizeF contentsSize READ contentsSize NOTIFY contentsSizeChanged)
+ Q_PROPERTY(QPointF scrollPosition READ scrollPosition NOTIFY scrollPositionChanged)
+ Q_PROPERTY(bool audioMuted READ isAudioMuted WRITE setAudioMuted NOTIFY audioMutedChanged)
+ Q_PROPERTY(bool recentlyAudible READ recentlyAudible NOTIFY recentlyAudibleChanged)
+ Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
+ Q_PROPERTY(LifecycleState lifecycleState READ lifecycleState WRITE setLifecycleState NOTIFY lifecycleStateChanged)
+ Q_PROPERTY(LifecycleState recommendedState READ recommendedState NOTIFY recommendedStateChanged)
+ Q_PROPERTY(qint64 renderProcessPid READ renderProcessPid NOTIFY renderProcessPidChanged)
+ Q_PROPERTY(bool loading READ isLoading NOTIFY loadingChanged FINAL)
+
+public:
+ enum WebAction {
+ NoWebAction = - 1,
+ Back,
+ Forward,
+ Stop,
+ Reload,
+
+ Cut,
+ Copy,
+ Paste,
+
+ Undo,
+ Redo,
+ SelectAll,
+ ReloadAndBypassCache,
+
+ PasteAndMatchStyle,
+
+ OpenLinkInThisWindow,
+ OpenLinkInNewWindow,
+ OpenLinkInNewTab,
+ CopyLinkToClipboard,
+ DownloadLinkToDisk,
+
+ CopyImageToClipboard,
+ CopyImageUrlToClipboard,
+ DownloadImageToDisk,
+
+ CopyMediaUrlToClipboard,
+ ToggleMediaControls,
+ ToggleMediaLoop,
+ ToggleMediaPlayPause,
+ ToggleMediaMute,
+ DownloadMediaToDisk,
+
+ InspectElement,
+ ExitFullScreen,
+ RequestClose,
+ Unselect,
+ SavePage,
+ OpenLinkInNewBackgroundTab,
+ ViewSource,
+
+ ToggleBold,
+ ToggleItalic,
+ ToggleUnderline,
+ ToggleStrikethrough,
+
+ AlignLeft,
+ AlignCenter,
+ AlignRight,
+ AlignJustified,
+ Indent,
+ Outdent,
+
+ InsertOrderedList,
+ InsertUnorderedList,
+
+ ChangeTextDirectionLTR,
+ ChangeTextDirectionRTL,
+
+ WebActionCount
+ };
+ Q_ENUM(WebAction)
+
+ enum FindFlag {
+ FindBackward = 1,
+ FindCaseSensitively = 2,
+ };
+ Q_DECLARE_FLAGS(FindFlags, FindFlag)
+
+ enum WebWindowType {
+ WebBrowserWindow,
+ WebBrowserTab,
+ WebDialog,
+ WebBrowserBackgroundTab
+ };
+ Q_ENUM(WebWindowType)
+
+ enum PermissionPolicy {
+ PermissionUnknown,
+ PermissionGrantedByUser,
+ PermissionDeniedByUser
+ };
+ Q_ENUM(PermissionPolicy)
+
+ // must match WebContentsAdapterClient::NavigationType
+ enum NavigationType {
+ NavigationTypeLinkClicked,
+ NavigationTypeTyped,
+ NavigationTypeFormSubmitted,
+ NavigationTypeBackForward,
+ NavigationTypeReload,
+ NavigationTypeOther,
+ NavigationTypeRedirect,
+ };
+ Q_ENUM(NavigationType)
+
+ enum Feature {
+ Notifications = 0,
+ Geolocation = 1,
+ MediaAudioCapture = 2,
+ MediaVideoCapture,
+ MediaAudioVideoCapture,
+ MouseLock,
+ DesktopVideoCapture,
+ DesktopAudioVideoCapture,
+ ClipboardReadWrite,
+ LocalFontsAccess,
+ };
+ Q_ENUM(Feature)
+
+ // Ex-QWebFrame enum
+
+ enum FileSelectionMode {
+ FileSelectOpen,
+ FileSelectOpenMultiple,
+ FileSelectUploadFolder,
+ FileSelectSave
+ };
+ Q_ENUM(FileSelectionMode)
+
+ // must match WebContentsAdapterClient::JavaScriptConsoleMessageLevel
+ enum JavaScriptConsoleMessageLevel {
+ InfoMessageLevel = 0,
+ WarningMessageLevel,
+ ErrorMessageLevel
+ };
+ Q_ENUM(JavaScriptConsoleMessageLevel)
+
+ // must match WebContentsAdapterClient::RenderProcessTerminationStatus
+ enum RenderProcessTerminationStatus {
+ NormalTerminationStatus = 0,
+ AbnormalTerminationStatus,
+ CrashedTerminationStatus,
+ KilledTerminationStatus
+ };
+ Q_ENUM(RenderProcessTerminationStatus)
+
+ // must match WebContentsAdapterClient::LifecycleState
+ enum class LifecycleState {
+ Active,
+ Frozen,
+ Discarded,
+ };
+ Q_ENUM(LifecycleState)
+
+ explicit QWebEnginePage(QObject *parent = nullptr);
+ QWebEnginePage(QWebEngineProfile *profile, QObject *parent = nullptr);
+ ~QWebEnginePage();
+ QWebEngineHistory *history() const;
+
+ bool hasSelection() const;
+ QString selectedText() const;
+
+ QWebEngineProfile *profile() const;
+
+#if QT_CONFIG(action)
+ QAction *action(WebAction action) const;
+#endif
+ virtual void triggerAction(WebAction action, bool checked = false);
+
+ void replaceMisspelledWord(const QString &replacement);
+
+ bool event(QEvent*) override;
+
+ void findText(const QString &subString, FindFlags options = {}, const std::function<void(const QWebEngineFindTextResult &)> &resultCallback = std::function<void(const QWebEngineFindTextResult &)>());
+
+ void setFeaturePermission(const QUrl &securityOrigin, Feature feature, PermissionPolicy policy);
+
+ bool isLoading() const;
+
+ void load(const QUrl &url);
+ void load(const QWebEngineHttpRequest &request);
+ void download(const QUrl &url, const QString &filename = QString());
+ void setHtml(const QString &html, const QUrl &baseUrl = QUrl());
+ void setContent(const QByteArray &data, const QString &mimeType = QString(), const QUrl &baseUrl = QUrl());
+
+ void toHtml(const std::function<void(const QString &)> &resultCallback) const;
+ void toPlainText(const std::function<void(const QString &)> &resultCallback) const;
+
+ QString title() const;
+ void setUrl(const QUrl &url);
+ QUrl url() const;
+ QUrl requestedUrl() const;
+ QUrl iconUrl() const;
+ QIcon icon() const;
+
+ qreal zoomFactor() const;
+ void setZoomFactor(qreal factor);
+
+ QPointF scrollPosition() const;
+ QSizeF contentsSize() const;
+
+ void runJavaScript(const QString &scriptSource, const std::function<void(const QVariant &)> &resultCallback);
+ void runJavaScript(const QString &scriptSource, quint32 worldId = 0, const std::function<void(const QVariant &)> &resultCallback = {});
+ QWebEngineScriptCollection &scripts();
+ QWebEngineSettings *settings() const;
+
+ QWebChannel *webChannel() const;
+ void setWebChannel(QWebChannel *, quint32 worldId = 0);
+ QColor backgroundColor() const;
+ void setBackgroundColor(const QColor &color);
+
+ void save(const QString &filePath, QWebEngineDownloadRequest::SavePageFormat format
+ = QWebEngineDownloadRequest::MimeHtmlSaveFormat) const;
+
+ bool isAudioMuted() const;
+ void setAudioMuted(bool muted);
+ bool recentlyAudible() const;
+ qint64 renderProcessPid() const;
+
+ void printToPdf(const QString &filePath,
+ const QPageLayout &layout = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF()),
+ const QPageRanges &ranges = {});
+ void printToPdf(const std::function<void(const QByteArray&)> &resultCallback,
+ const QPageLayout &layout = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF()),
+ const QPageRanges &ranges = {});
+
+ void setInspectedPage(QWebEnginePage *page);
+ QWebEnginePage *inspectedPage() const;
+ void setDevToolsPage(QWebEnginePage *page);
+ QWebEnginePage *devToolsPage() const;
+ QString devToolsId() const;
+
+ void setUrlRequestInterceptor(QWebEngineUrlRequestInterceptor *interceptor);
+
+ LifecycleState lifecycleState() const;
+ void setLifecycleState(LifecycleState state);
+
+ LifecycleState recommendedState() const;
+
+ bool isVisible() const;
+ void setVisible(bool visible);
+
+ QWebEngineFrame mainFrame();
+ std::optional<QWebEngineFrame> findFrameByName(const QString &name);
+
+ void acceptAsNewWindow(QWebEngineNewWindowRequest &request);
+
+Q_SIGNALS:
+ void loadStarted();
+ void loadProgress(int progress);
+ void loadFinished(bool ok);
+ void loadingChanged(const QWebEngineLoadingInfo &loadingInfo);
+
+ void linkHovered(const QString &url);
+ void selectionChanged();
+ void geometryChangeRequested(const QRect &geom);
+ void windowCloseRequested();
+
+ void featurePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature);
+ void featurePermissionRequestCanceled(const QUrl &securityOrigin, QWebEnginePage::Feature feature);
+ void fullScreenRequested(QWebEngineFullScreenRequest fullScreenRequest);
+#if QT_DEPRECATED_SINCE(6, 5)
+ QT_DEPRECATED_VERSION_X_6_5("Requesting host quota is no longer supported.")
+ void quotaRequested(QWebEngineQuotaRequest quotaRequest);
+#endif
+ void registerProtocolHandlerRequested(QWebEngineRegisterProtocolHandlerRequest request);
+ void fileSystemAccessRequested(QWebEngineFileSystemAccessRequest request);
+ void selectClientCertificate(QWebEngineClientCertificateSelection clientCertSelection);
+ void authenticationRequired(const QUrl &requestUrl, QAuthenticator *authenticator);
+ void proxyAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *authenticator, const QString &proxyHost);
+
+ void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, int exitCode);
+ void desktopMediaRequested(const QWebEngineDesktopMediaRequest &request);
+ void certificateError(const QWebEngineCertificateError &certificateError);
+ void navigationRequested(QWebEngineNavigationRequest &request);
+ void newWindowRequested(QWebEngineNewWindowRequest &request);
+
+ // Ex-QWebFrame signals
+ void titleChanged(const QString &title);
+ void urlChanged(const QUrl &url);
+ void iconUrlChanged(const QUrl &url);
+ void iconChanged(const QIcon &icon);
+
+ void scrollPositionChanged(const QPointF &position);
+ void contentsSizeChanged(const QSizeF &size);
+ void audioMutedChanged(bool muted);
+ void recentlyAudibleChanged(bool recentlyAudible);
+ void renderProcessPidChanged(qint64 pid);
+
+ void pdfPrintingFinished(const QString &filePath, bool success);
+ void printRequested();
+
+ void visibleChanged(bool visible);
+
+ void lifecycleStateChanged(LifecycleState state);
+ void recommendedStateChanged(LifecycleState state);
+
+ void findTextFinished(const QWebEngineFindTextResult &result);
+
+ // TODO: fixme / rewrite bindPageToView
+ void _q_aboutToDelete();
+
+ void webAuthUxRequested(QWebEngineWebAuthUxRequest *request);
+
+protected:
+ virtual QWebEnginePage *createWindow(WebWindowType type);
+ virtual QStringList chooseFiles(FileSelectionMode mode, const QStringList &oldFiles,
+ const QStringList &acceptedMimeTypes);
+ virtual void javaScriptAlert(const QUrl &securityOrigin, const QString &msg);
+ virtual bool javaScriptConfirm(const QUrl &securityOrigin, const QString &msg);
+ virtual bool javaScriptPrompt(const QUrl &securityOrigin, const QString &msg,
+ const QString &defaultValue, QString *result);
+ virtual void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level,
+ const QString &message, int lineNumber,
+ const QString &sourceID);
+ virtual bool acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame);
+
+private:
+ Q_DISABLE_COPY(QWebEnginePage)
+ Q_DECLARE_PRIVATE(QWebEnginePage)
+ QScopedPointer<QWebEnginePagePrivate> d_ptr;
+#if QT_CONFIG(action)
+ Q_PRIVATE_SLOT(d_func(), void _q_webActionTriggered(bool checked))
+#endif
+
+ friend class QContextMenuBuilder;
+ friend class QWebEngineView;
+ friend class QWebEngineViewPrivate;
+#if QT_CONFIG(accessibility)
+ friend class QWebEngineViewAccessible;
+#endif // QT_CONFIG(accessibility)
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QWebEnginePage::FindFlags)
+
+Q_WEBENGINECORE_EXPORT QDataStream &operator<<(QDataStream &stream,
+ const QWebEngineHistory &history);
+Q_WEBENGINECORE_EXPORT QDataStream &operator>>(QDataStream &stream, QWebEngineHistory &history);
+
+QT_END_NAMESPACE
+
+#endif // QWEBENGINEPAGE_H