407 lines
14 KiB
C++
407 lines
14 KiB
C++
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2016 The Qt Company Ltd.
|
|
** Contact: https://www.qt.io/licensing/
|
|
**
|
|
** This file is part of the QtWebEngine module of the Qt Toolkit.
|
|
**
|
|
** $QT_BEGIN_LICENSE:LGPL$
|
|
** Commercial License Usage
|
|
** Licensees holding valid commercial Qt licenses may use this file in
|
|
** accordance with the commercial license agreement provided with the
|
|
** Software or, alternatively, in accordance with the terms contained in
|
|
** a written agreement between you and The Qt Company. For licensing terms
|
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
** information use the contact form at https://www.qt.io/contact-us.
|
|
**
|
|
** GNU Lesser General Public License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
|
** General Public License version 3 as published by the Free Software
|
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
|
** packaging of this file. Please review the following information to
|
|
** ensure the GNU Lesser General Public License version 3 requirements
|
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
|
**
|
|
** GNU General Public License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU
|
|
** General Public License version 2.0 or (at your option) the GNU General
|
|
** Public license version 3 or any later version approved by the KDE Free
|
|
** Qt Foundation. The licenses are as published by the Free Software
|
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
|
** included in the packaging of this file. Please review the following
|
|
** information to ensure the GNU General Public License requirements will
|
|
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
|
**
|
|
** $QT_END_LICENSE$
|
|
**
|
|
****************************************************************************/
|
|
|
|
#ifndef QWEBENGINEPAGE_H
|
|
#define QWEBENGINEPAGE_H
|
|
|
|
#include <QtWebEngineWidgets/qtwebenginewidgetsglobal.h>
|
|
#include <QtWebEngineWidgets/qwebengineclientcertificateselection.h>
|
|
#include <QtWebEngineWidgets/qwebenginedownloaditem.h>
|
|
#include <QtWebEngineCore/qwebenginecallback.h>
|
|
#include <QtWebEngineCore/qwebenginehttprequest.h>
|
|
|
|
#include <QtCore/qobject.h>
|
|
#include <QtCore/qurl.h>
|
|
#include <QtCore/qvariant.h>
|
|
#include <QtGui/qpagelayout.h>
|
|
#include <QtNetwork/qnetworkaccessmanager.h>
|
|
#include <QtWidgets/qwidget.h>
|
|
|
|
QT_BEGIN_NAMESPACE
|
|
class QMenu;
|
|
class QPrinter;
|
|
|
|
class QContextMenuBuilder;
|
|
class QWebChannel;
|
|
class QWebEngineCertificateError;
|
|
class QWebEngineClientCertificateSelection;
|
|
class QWebEngineContextMenuData;
|
|
class QWebEngineFindTextResult;
|
|
class QWebEngineFullScreenRequest;
|
|
class QWebEngineHistory;
|
|
class QWebEnginePage;
|
|
class QWebEnginePagePrivate;
|
|
class QWebEngineProfile;
|
|
class QWebEngineQuotaRequest;
|
|
class QWebEngineRegisterProtocolHandlerRequest;
|
|
class QWebEngineScriptCollection;
|
|
class QWebEngineSettings;
|
|
class QWebEngineUrlRequestInterceptor;
|
|
|
|
class QWEBENGINEWIDGETS_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)
|
|
Q_PROPERTY(QUrl url READ url WRITE setUrl)
|
|
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)
|
|
|
|
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,
|
|
|
|
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
|
|
};
|
|
Q_ENUM(Feature)
|
|
|
|
// Ex-QWebFrame enum
|
|
|
|
enum FileSelectionMode {
|
|
FileSelectOpen,
|
|
FileSelectOpenMultiple,
|
|
};
|
|
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 = Q_NULLPTR);
|
|
QWebEnginePage(QWebEngineProfile *profile, QObject *parent = Q_NULLPTR);
|
|
~QWebEnginePage();
|
|
QWebEngineHistory *history() const;
|
|
|
|
void setView(QWidget *view);
|
|
QWidget *view() const;
|
|
|
|
bool hasSelection() const;
|
|
QString selectedText() const;
|
|
|
|
QWebEngineProfile *profile() const;
|
|
|
|
#ifndef QT_NO_ACTION
|
|
QAction *action(WebAction action) const;
|
|
#endif
|
|
virtual void triggerAction(WebAction action, bool checked = false);
|
|
|
|
void replaceMisspelledWord(const QString &replacement);
|
|
|
|
virtual bool event(QEvent*);
|
|
|
|
void findText(const QString &subString, FindFlags options = FindFlags(), const QWebEngineCallback<bool> &resultCallback = QWebEngineCallback<bool>());
|
|
|
|
#if QT_CONFIG(menu)
|
|
QMenu *createStandardContextMenu();
|
|
#endif
|
|
|
|
void setFeaturePermission(const QUrl &securityOrigin, Feature feature, PermissionPolicy policy);
|
|
|
|
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 QWebEngineCallback<const QString &> &resultCallback) const;
|
|
void toPlainText(const QWebEngineCallback<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);
|
|
void runJavaScript(const QString& scriptSource, quint32 worldId);
|
|
void runJavaScript(const QString& scriptSource, const QWebEngineCallback<const QVariant &> &resultCallback);
|
|
void runJavaScript(const QString& scriptSource, quint32 worldId, const QWebEngineCallback<const QVariant &> &resultCallback);
|
|
QWebEngineScriptCollection &scripts();
|
|
QWebEngineSettings *settings() const;
|
|
|
|
QWebChannel *webChannel() const;
|
|
void setWebChannel(QWebChannel *);
|
|
void setWebChannel(QWebChannel *, uint worldId);
|
|
QColor backgroundColor() const;
|
|
void setBackgroundColor(const QColor &color);
|
|
|
|
void save(const QString &filePath, QWebEngineDownloadItem::SavePageFormat format
|
|
= QWebEngineDownloadItem::MimeHtmlSaveFormat) const;
|
|
|
|
bool isAudioMuted() const;
|
|
void setAudioMuted(bool muted);
|
|
bool recentlyAudible() const;
|
|
|
|
void printToPdf(const QString &filePath, const QPageLayout &layout = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF()));
|
|
void printToPdf(const QWebEngineCallback<const QByteArray&> &resultCallback, const QPageLayout &layout = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF()));
|
|
void print(QPrinter *printer, const QWebEngineCallback<bool> &resultCallback);
|
|
|
|
void setInspectedPage(QWebEnginePage *page);
|
|
QWebEnginePage *inspectedPage() const;
|
|
void setDevToolsPage(QWebEnginePage *page);
|
|
QWebEnginePage *devToolsPage() const;
|
|
|
|
void setUrlRequestInterceptor(QWebEngineUrlRequestInterceptor *interceptor);
|
|
|
|
const QWebEngineContextMenuData &contextMenuData() const;
|
|
|
|
LifecycleState lifecycleState() const;
|
|
void setLifecycleState(LifecycleState state);
|
|
|
|
LifecycleState recommendedState() const;
|
|
|
|
bool isVisible() const;
|
|
void setVisible(bool visible);
|
|
|
|
Q_SIGNALS:
|
|
void loadStarted();
|
|
void loadProgress(int progress);
|
|
void loadFinished(bool ok);
|
|
|
|
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);
|
|
void quotaRequested(QWebEngineQuotaRequest quotaRequest);
|
|
void registerProtocolHandlerRequested(QWebEngineRegisterProtocolHandlerRequest request);
|
|
#if !defined(QT_NO_SSL) || QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)
|
|
void selectClientCertificate(QWebEngineClientCertificateSelection clientCertSelection);
|
|
#endif
|
|
|
|
void authenticationRequired(const QUrl &requestUrl, QAuthenticator *authenticator);
|
|
void proxyAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *authenticator, const QString &proxyHost);
|
|
|
|
void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, int exitCode);
|
|
|
|
// 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 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);
|
|
|
|
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 certificateError(const QWebEngineCertificateError &certificateError);
|
|
virtual bool acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame);
|
|
|
|
private:
|
|
Q_DISABLE_COPY(QWebEnginePage)
|
|
Q_DECLARE_PRIVATE(QWebEnginePage)
|
|
QScopedPointer<QWebEnginePagePrivate> d_ptr;
|
|
#ifndef QT_NO_ACTION
|
|
Q_PRIVATE_SLOT(d_func(), void _q_webActionTriggered(bool checked))
|
|
#endif
|
|
|
|
friend class QContextMenuBuilder;
|
|
friend class QWebEngineFullScreenRequest;
|
|
friend class QWebEngineView;
|
|
friend class QWebEngineViewPrivate;
|
|
#ifndef QT_NO_ACCESSIBILITY
|
|
friend class QWebEngineViewAccessible;
|
|
#endif // QT_NO_ACCESSIBILITY
|
|
};
|
|
|
|
Q_DECLARE_OPERATORS_FOR_FLAGS(QWebEnginePage::FindFlags)
|
|
|
|
QT_END_NAMESPACE
|
|
|
|
#endif // QWEBENGINEPAGE_H
|