diff options
-rw-r--r-- | src/core/api/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/core/api/qwebenginenavigationrequest.cpp (renamed from src/webenginequick/api/qquickwebenginenavigationrequest.cpp) | 87 | ||||
-rw-r--r-- | src/core/api/qwebenginenavigationrequest.h (renamed from src/webenginequick/api/qquickwebenginenavigationrequest_p.h) | 69 | ||||
-rw-r--r-- | src/core/api/qwebenginepage.cpp | 19 | ||||
-rw-r--r-- | src/core/api/qwebenginepage.h | 3 | ||||
-rw-r--r-- | src/webenginequick/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/webenginequick/api/qquickwebengineview.cpp | 4 | ||||
-rw-r--r-- | src/webenginequick/api/qquickwebengineview_p.h | 27 | ||||
-rw-r--r-- | src/webenginequick/plugin/plugin.cpp | 4 | ||||
-rw-r--r-- | tests/auto/quick/publicapi/tst_publicapi.cpp | 42 | ||||
-rw-r--r-- | tests/auto/quick/qmltests/data/tst_navigationRequested.qml | 6 | ||||
-rw-r--r-- | tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp | 51 |
12 files changed, 178 insertions, 136 deletions
diff --git a/src/core/api/CMakeLists.txt b/src/core/api/CMakeLists.txt index 4074bdb51..f320cc803 100644 --- a/src/core/api/CMakeLists.txt +++ b/src/core/api/CMakeLists.txt @@ -26,6 +26,7 @@ qt_internal_add_module(WebEngineCore qwebenginehttprequest.cpp qwebenginehttprequest.h qwebengineloadrequest.cpp qwebengineloadrequest.h qwebenginemessagepumpscheduler.cpp qwebenginemessagepumpscheduler_p.h + qwebenginenavigationrequest.cpp qwebenginenavigationrequest.h qwebenginenewwindowrequest.cpp qwebenginenewwindowrequest.h qwebenginenotification.cpp qwebenginenotification.h qwebenginepage.cpp qwebenginepage.h qwebenginepage_p.h diff --git a/src/webenginequick/api/qquickwebenginenavigationrequest.cpp b/src/core/api/qwebenginenavigationrequest.cpp index 03c1d3d78..dac68bd72 100644 --- a/src/webenginequick/api/qquickwebenginenavigationrequest.cpp +++ b/src/core/api/qwebenginenavigationrequest.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtWebEngine module of the Qt Toolkit. @@ -37,35 +37,48 @@ ** ****************************************************************************/ -#include "qquickwebenginenavigationrequest_p.h" +#include "qwebenginenavigationrequest.h" -#include "qquickwebengineview_p.h" +#include "qwebenginepage.h" QT_BEGIN_NAMESPACE -class QQuickWebEngineNavigationRequestPrivate { +class QWebEngineNavigationRequestPrivate { public: - QQuickWebEngineNavigationRequestPrivate(const QUrl& url, QQuickWebEngineView::NavigationType navigationType, bool mainFrame) + QWebEngineNavigationRequestPrivate(const QUrl& url, QWebEngineNavigationRequest::NavigationType navigationType, bool mainFrame) : url(url) - , action(QQuickWebEngineView::AcceptRequest) + , action(QWebEngineNavigationRequest::AcceptRequest) , navigationType(navigationType) , isMainFrame(mainFrame) - { - } - - ~QQuickWebEngineNavigationRequestPrivate() - { - } + {} QUrl url; - QQuickWebEngineView::NavigationRequestAction action; - QQuickWebEngineView::NavigationType navigationType; + QWebEngineNavigationRequest::NavigationRequestAction action; + QWebEngineNavigationRequest::NavigationType navigationType; bool isMainFrame; }; /*! + \class QWebEngineNavigationRequest + \brief A utility type for the QWebEnginePage::navigationRequested signal. + \since 6.2 + + \inmodule QtWebEngineCore + + Contains information about a navigation request. + + To accept or reject a request, set \l action to + \c QWebEngineNavigationRequest::AcceptRequest or + \c QWebEngineNavigationRequest::IgnoreRequest. + + The default if not handled is to accept the navigation. + + \sa QWebEnginePage::navigationRequested +*/ + +/*! \qmltype WebEngineNavigationRequest - \instantiates QQuickWebEngineNavigationRequest + \instantiates QWebEngineNavigationRequest \inqmlmodule QtWebEngine \since QtWebEngine 1.0 @@ -77,17 +90,23 @@ public: \c WebEngineNavigationRequest.IgnoreRequest. */ -QQuickWebEngineNavigationRequest::QQuickWebEngineNavigationRequest(const QUrl& url, QQuickWebEngineView::NavigationType navigationType, bool mainFrame, QObject* parent) +/*! \internal +*/ +QWebEngineNavigationRequest::QWebEngineNavigationRequest(const QUrl& url, QWebEngineNavigationRequest::NavigationType navigationType, bool mainFrame, QObject* parent) : QObject(parent) - , d_ptr(new QQuickWebEngineNavigationRequestPrivate(url, navigationType, mainFrame)) + , d_ptr(new QWebEngineNavigationRequestPrivate(url, navigationType, mainFrame)) { } -QQuickWebEngineNavigationRequest::~QQuickWebEngineNavigationRequest() +QWebEngineNavigationRequest::~QWebEngineNavigationRequest() { } /*! + \property QWebEngineNavigationRequest::action + \brief Whether to accept or ignore the navigation request. +*/ +/*! \qmlproperty enumeration WebEngineNavigationRequest::action Whether to accept or ignore the navigation request. @@ -98,9 +117,9 @@ QQuickWebEngineNavigationRequest::~QQuickWebEngineNavigationRequest() Ignores a navigation request. */ -void QQuickWebEngineNavigationRequest::setAction(QQuickWebEngineView::NavigationRequestAction action) +void QWebEngineNavigationRequest::setAction(QWebEngineNavigationRequest::NavigationRequestAction action) { - Q_D(QQuickWebEngineNavigationRequest); + Q_D(QWebEngineNavigationRequest); if (d->action == action) return; @@ -109,25 +128,33 @@ void QQuickWebEngineNavigationRequest::setAction(QQuickWebEngineView::Navigation } /*! + \property QWebEngineNavigationRequest::url + \brief The URL of the web page to go to. +*/ +/*! \qmlproperty url WebEngineNavigationRequest::url \readonly The URL of the web page to go to. */ -QUrl QQuickWebEngineNavigationRequest::url() const +QUrl QWebEngineNavigationRequest::url() const { - Q_D(const QQuickWebEngineNavigationRequest); + Q_D(const QWebEngineNavigationRequest); return d->url; } -QQuickWebEngineView::NavigationRequestAction QQuickWebEngineNavigationRequest::action() const +QWebEngineNavigationRequest::NavigationRequestAction QWebEngineNavigationRequest::action() const { - Q_D(const QQuickWebEngineNavigationRequest); + Q_D(const QWebEngineNavigationRequest); return d->action; } /*! + \property QWebEngineNavigationRequest::navigationType + \brief The method used to navigate to a web page. +*/ +/*! \qmlproperty enumeration WebEngineNavigationRequest::navigationType \readonly @@ -149,22 +176,26 @@ QQuickWebEngineView::NavigationRequestAction QQuickWebEngineNavigationRequest::a Using some other method to go to a page. */ -QQuickWebEngineView::NavigationType QQuickWebEngineNavigationRequest::navigationType() const +QWebEngineNavigationRequest::NavigationType QWebEngineNavigationRequest::navigationType() const { - Q_D(const QQuickWebEngineNavigationRequest); + Q_D(const QWebEngineNavigationRequest); return d->navigationType; } /*! + \property QWebEngineNavigationRequest::isMainFrame + \brief Whether the navigation issue is requested for a top level page. +*/ +/*! \qmlproperty bool WebEngineNavigationRequest::isMainFrame \readonly Whether the navigation issue is requested for a top level page. */ -bool QQuickWebEngineNavigationRequest::isMainFrame() const +bool QWebEngineNavigationRequest::isMainFrame() const { - Q_D(const QQuickWebEngineNavigationRequest); + Q_D(const QWebEngineNavigationRequest); return d->isMainFrame; } diff --git a/src/webenginequick/api/qquickwebenginenavigationrequest_p.h b/src/core/api/qwebenginenavigationrequest.h index 55e3ca673..45ed4fe6d 100644 --- a/src/webenginequick/api/qquickwebenginenavigationrequest_p.h +++ b/src/core/api/qwebenginenavigationrequest.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtWebEngine module of the Qt Toolkit. @@ -37,57 +37,66 @@ ** ****************************************************************************/ -#ifndef QQUICKWEBENGINENAVIGATIONREQUEST_P_H -#define QQUICKWEBENGINENAVIGATIONREQUEST_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qquickwebengineview_p.h" +#ifndef QWEBENGINENAVIGATIONREQUEST_H +#define QWEBENGINENAVIGATIONREQUEST_H +#include <qtwebenginecoreglobal.h> #include <QtCore/QObject> #include <QtCore/QUrl> QT_BEGIN_NAMESPACE -class QQuickWebEngineNavigationRequestPrivate; +class QWebEngineNavigationRequestPrivate; -class Q_WEBENGINE_EXPORT QQuickWebEngineNavigationRequest : public QObject { +class Q_WEBENGINECORE_EXPORT QWebEngineNavigationRequest : public QObject +{ Q_OBJECT Q_PROPERTY(QUrl url READ url CONSTANT FINAL) Q_PROPERTY(bool isMainFrame READ isMainFrame CONSTANT FINAL) - Q_PROPERTY(QQuickWebEngineView::NavigationRequestAction action READ action WRITE setAction NOTIFY actionChanged FINAL) - Q_PROPERTY(QQuickWebEngineView::NavigationType navigationType READ navigationType CONSTANT FINAL) + Q_PROPERTY(NavigationRequestAction action READ action WRITE setAction NOTIFY actionChanged FINAL) + Q_PROPERTY(NavigationType navigationType READ navigationType CONSTANT FINAL) public: - QQuickWebEngineNavigationRequest(const QUrl& url, QQuickWebEngineView::NavigationType navigationType, bool mainFrame, QObject* parent = 0); - ~QQuickWebEngineNavigationRequest(); + ~QWebEngineNavigationRequest(); + + // must match WebContentsAdapterClient::NavigationRequestAction + enum NavigationRequestAction { + AcceptRequest, + IgnoreRequest = 0xFF + }; + Q_ENUM(NavigationRequestAction) + + // must match WebContentsAdapterClient::NavigationType + enum NavigationType { + LinkClickedNavigation, + TypedNavigation, + FormSubmittedNavigation, + BackForwardNavigation, + ReloadNavigation, + OtherNavigation, + RedirectNavigation, + }; + Q_ENUM(NavigationType) QUrl url() const; bool isMainFrame() const; - QQuickWebEngineView::NavigationRequestAction action() const; + NavigationType navigationType() const; + NavigationRequestAction action() const; - void setAction(QQuickWebEngineView::NavigationRequestAction action); - QQuickWebEngineView::NavigationType navigationType() const; + void setAction(NavigationRequestAction action); Q_SIGNALS: void actionChanged(); private: - Q_DECLARE_PRIVATE(QQuickWebEngineNavigationRequest) - QScopedPointer<QQuickWebEngineNavigationRequestPrivate> d_ptr; + QWebEngineNavigationRequest(const QUrl& url, NavigationType navigationType, bool mainFrame, QObject *parent = nullptr); + + Q_DECLARE_PRIVATE(QWebEngineNavigationRequest) + QScopedPointer<QWebEngineNavigationRequestPrivate> d_ptr; + friend class QWebEnginePagePrivate; + friend class QQuickWebEngineViewPrivate; }; QT_END_NAMESPACE -QML_DECLARE_TYPE(QQuickWebEngineNavigationRequest) - -#endif // QQUICKWEBENGINENAVIGATIONREQUEST_P_H +#endif // QWEBENGINENAVIGATIONREQUEST_H diff --git a/src/core/api/qwebenginepage.cpp b/src/core/api/qwebenginepage.cpp index f04a0943c..6e2b37514 100644 --- a/src/core/api/qwebenginepage.cpp +++ b/src/core/api/qwebenginepage.cpp @@ -53,6 +53,7 @@ #include "qwebenginefullscreenrequest.h" #include "qwebenginehistory.h" #include "qwebenginehistory_p.h" +#include "qwebenginenavigationrequest.h" #include "qwebenginenewwindowrequest.h" #include "qwebenginenotification.h" #include "qwebengineprofile.h" @@ -1563,10 +1564,28 @@ void QWebEnginePagePrivate::contextMenuRequested(QWebEngineContextMenuRequest *d view->contextMenuRequested(data); } +/*! + \fn void QWebEnginePage::navigationRequested(QWebEngineNavigationRequest &request) + \since 6.2 + + This signal is emitted on navigation together with the call the acceptNavigationRequest(). + It can be used to accept or ignore the request. The default is to accept. + + \sa acceptNavigationRequest() + +*/ + void QWebEnginePagePrivate::navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame) { Q_Q(QWebEnginePage); + bool accepted = q->acceptNavigationRequest(url, static_cast<QWebEnginePage::NavigationType>(navigationType), isMainFrame); + if (accepted) { + QWebEngineNavigationRequest navigationRequest(url, static_cast<QWebEngineNavigationRequest::NavigationType>(navigationType), isMainFrame); + Q_EMIT q->navigationRequested(navigationRequest); + accepted = (navigationRequest.action() == QWebEngineNavigationRequest::AcceptRequest); + } + if (accepted && adapter->findTextHelper()->isFindTextInProgress()) adapter->findTextHelper()->stopFinding(); navigationRequestAction = accepted ? WebContentsAdapterClient::AcceptRequest : WebContentsAdapterClient::IgnoreRequest; diff --git a/src/core/api/qwebenginepage.h b/src/core/api/qwebenginepage.h index 94a78aa67..9b9e6a3d3 100644 --- a/src/core/api/qwebenginepage.h +++ b/src/core/api/qwebenginepage.h @@ -63,6 +63,7 @@ class QWebEngineClientCertificateSelection; class QWebEngineFindTextResult; class QWebEngineFullScreenRequest; class QWebEngineHistory; +class QWebEngineNavigationRequest; class QWebEngineNewWindowRequest; class QWebEnginePage; class QWebEnginePagePrivate; @@ -341,6 +342,7 @@ Q_SIGNALS: void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, int exitCode); void certificateError(const QWebEngineCertificateError &certificateError); + bool navigationRequested(QWebEngineNavigationRequest &request); void newWindowRequested(QWebEngineNewWindowRequest &request); // Ex-QWebFrame signals @@ -373,6 +375,7 @@ protected: 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) diff --git a/src/webenginequick/CMakeLists.txt b/src/webenginequick/CMakeLists.txt index 3dfa36dc0..f133c0a42 100644 --- a/src/webenginequick/CMakeLists.txt +++ b/src/webenginequick/CMakeLists.txt @@ -14,7 +14,6 @@ qt_internal_add_module(WebEngineQuick api/qquickwebenginefaviconprovider.cpp api/qquickwebenginefaviconprovider_p_p.h api/qquickwebenginehistory.cpp api/qquickwebenginehistory_p.h - api/qquickwebenginenavigationrequest.cpp api/qquickwebenginenavigationrequest_p.h api/qquickwebengineprofile.cpp api/qquickwebengineprofile.h api/qquickwebengineprofile_p.h api/qquickwebenginescriptcollection.cpp api/qquickwebenginescriptcollection.h api/qquickwebenginesettings.cpp api/qquickwebenginesettings_p.h diff --git a/src/webenginequick/api/qquickwebengineview.cpp b/src/webenginequick/api/qquickwebengineview.cpp index 4eaa5e28b..5524b8954 100644 --- a/src/webenginequick/api/qquickwebengineview.cpp +++ b/src/webenginequick/api/qquickwebengineview.cpp @@ -52,7 +52,6 @@ #include "qquickwebengineclientcertificateselection_p.h" #include "qquickwebenginedialogrequests_p.h" #include "qquickwebenginefaviconprovider_p_p.h" -#include "qquickwebenginenavigationrequest_p.h" #include "qquickwebengineprofile_p.h" #include "qquickwebenginesettings_p.h" #include "qquickwebenginetouchhandleprovider_p_p.h" @@ -60,6 +59,7 @@ #include "qwebenginefindtextresult.h" #include "qwebenginefullscreenrequest.h" #include "qwebengineloadrequest.h" +#include "qwebenginenavigationrequest.h" #include "qwebenginenewwindowrequest.h" #include "qwebenginequotarequest.h" #include "qwebenginescriptcollection.h" @@ -290,7 +290,7 @@ void QQuickWebEngineViewPrivate::contextMenuRequested(QWebEngineContextMenuReque void QQuickWebEngineViewPrivate::navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame) { Q_Q(QQuickWebEngineView); - QQuickWebEngineNavigationRequest navigationRequest(url, static_cast<QQuickWebEngineView::NavigationType>(navigationType), isMainFrame); + QWebEngineNavigationRequest navigationRequest(url, static_cast<QWebEngineNavigationRequest::NavigationType>(navigationType), isMainFrame); Q_EMIT q->navigationRequested(&navigationRequest); navigationRequestAction = navigationRequest.action(); diff --git a/src/webenginequick/api/qquickwebengineview_p.h b/src/webenginequick/api/qquickwebengineview_p.h index 3d83035bd..ca3b5349e 100644 --- a/src/webenginequick/api/qquickwebengineview_p.h +++ b/src/webenginequick/api/qquickwebengineview_p.h @@ -74,8 +74,6 @@ class QQuickWebEngineFaviconProvider; class QQuickWebEngineFileDialogRequest; class QQuickWebEngineHistory; class QQuickWebEngineJavaScriptDialogRequest; -class QWebEngineLoadRequest; -class QQuickWebEngineNavigationRequest; class QQuickWebEngineSettings; class QQuickWebEngineTooltipRequest; class QQuickWebEngineFormValidationMessageRequest; @@ -84,6 +82,8 @@ class QWebEngineCertificateError; class QWebEngineContextMenuRequest; class QWebEngineFindTextResult; class QWebEngineFullScreenRequest; +class QWebEngineLoadRequest; +class QWebEngineNavigationRequest; class QWebEngineNewWindowRequest; class QWebEngineQuotaRequest; class QWebEngineRegisterProtocolHandlerRequest; @@ -151,27 +151,6 @@ public: QSizeF contentsSize() const; QPointF scrollPosition() const; - // must match WebContentsAdapterClient::NavigationRequestAction - enum NavigationRequestAction { - AcceptRequest, - // Make room in the valid range of the enum so - // we can expose extra actions. - IgnoreRequest = 0xFF - }; - Q_ENUM(NavigationRequestAction) - - // must match WebContentsAdapterClient::NavigationType - enum NavigationType { - LinkClickedNavigation, - TypedNavigation, - FormSubmittedNavigation, - BackForwardNavigation, - ReloadNavigation, - OtherNavigation, - RedirectNavigation, - }; - Q_ENUM(NavigationType) - enum LoadStatus { LoadStartedStatus, LoadStoppedStatus, @@ -524,7 +503,7 @@ Q_SIGNALS: void loadingChanged(const QWebEngineLoadRequest &loadRequest); void loadProgressChanged(); void linkHovered(const QUrl &hoveredUrl); - void navigationRequested(QQuickWebEngineNavigationRequest *request); + void navigationRequested(QWebEngineNavigationRequest *request); void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString &message, int lineNumber, const QString &sourceID); Q_REVISION(1,1) void certificateError(const QWebEngineCertificateError &error); Q_REVISION(1,1) void fullScreenRequested(const QWebEngineFullScreenRequest &request); diff --git a/src/webenginequick/plugin/plugin.cpp b/src/webenginequick/plugin/plugin.cpp index 1e54dbd2f..7865f9863 100644 --- a/src/webenginequick/plugin/plugin.cpp +++ b/src/webenginequick/plugin/plugin.cpp @@ -44,7 +44,6 @@ #include <QtWebEngineQuick/private/qquickwebenginedialogrequests_p.h> #include <QtWebEngineQuick/private/qquickwebenginehistory_p.h> #include <QtWebEngineQuick/private/qquickwebenginefaviconprovider_p_p.h> -#include <QtWebEngineQuick/private/qquickwebenginenavigationrequest_p.h> #include <QtWebEngineQuick/private/qquickwebenginesettings_p.h> #include <QtWebEngineQuick/private/qquickwebenginesingleton_p.h> #include <QtWebEngineQuick/private/qquickwebenginetouchhandleprovider_p_p.h> @@ -54,6 +53,7 @@ #include <QtWebEngineCore/qwebenginefindtextresult.h> #include <QtWebEngineCore/qwebenginefullscreenrequest.h> #include <QtWebEngineCore/qwebengineloadrequest.h> +#include <QtWebEngineCore/qwebenginenavigationrequest.h> #include <QtWebEngineCore/qwebenginenewwindowrequest.h> #include <QtWebEngineCore/qwebenginenotification.h> #include <QtWebEngineCore/qwebenginequotarequest.h> @@ -87,7 +87,7 @@ public: qmlRegisterType<QQuickWebEngineView>(uri, 1, 0, "WebEngineView"); qmlRegisterUncreatableType<QWebEngineLoadRequest>(uri, 1, 0, "WebEngineLoadRequest", msgUncreatableType("WebEngineLoadRequest")); - qmlRegisterUncreatableType<QQuickWebEngineNavigationRequest>(uri, 1, 0, "WebEngineNavigationRequest", msgUncreatableType("WebEngineNavigationRequest")); + qmlRegisterUncreatableType<QWebEngineNavigationRequest>(uri, 1, 0, "WebEngineNavigationRequest", msgUncreatableType("WebEngineNavigationRequest")); qmlRegisterType<QQuickWebEngineView, 1>(uri, 1, 1, "WebEngineView"); qmlRegisterType<QQuickWebEngineView, 2>(uri, 1, 2, "WebEngineView"); diff --git a/tests/auto/quick/publicapi/tst_publicapi.cpp b/tests/auto/quick/publicapi/tst_publicapi.cpp index 8a40325e0..a125d84f3 100644 --- a/tests/auto/quick/publicapi/tst_publicapi.cpp +++ b/tests/auto/quick/publicapi/tst_publicapi.cpp @@ -37,6 +37,7 @@ #include <QtWebEngineCore/QWebEngineCertificateError> #include <QtWebEngineCore/QWebEngineFindTextResult> #include <QtWebEngineCore/QWebEngineFullScreenRequest> +#include <QtWebEngineCore/QWebEngineNavigationRequest> #include <QtWebEngineCore/QWebEngineNewWindowRequest> #include <QtWebEngineCore/QWebEngineNotification> #include <QtWebEngineCore/QWebEngineQuotaRequest> @@ -50,7 +51,6 @@ #include <private/qquickwebengineclientcertificateselection_p.h> #include <private/qquickwebenginedialogrequests_p.h> #include <private/qquickwebenginehistory_p.h> -#include <private/qquickwebenginenavigationrequest_p.h> #include <private/qquickwebenginesettings_p.h> #include <private/qquickwebenginesingleton_p.h> @@ -68,8 +68,6 @@ static const QList<const QMetaObject *> typesToCheck = QList<const QMetaObject * << &QWebEngineDownloadRequest::staticMetaObject << &QQuickWebEngineHistory::staticMetaObject << &QQuickWebEngineHistoryListModel::staticMetaObject - << &QWebEngineLoadRequest::staticMetaObject - << &QQuickWebEngineNavigationRequest::staticMetaObject << &QQuickWebEngineProfile::staticMetaObject << &QQuickWebEngineSettings::staticMetaObject << &QWebEngineFullScreenRequest::staticMetaObject @@ -83,11 +81,13 @@ static const QList<const QMetaObject *> typesToCheck = QList<const QMetaObject * << &QQuickWebEngineTooltipRequest::staticMetaObject << &QWebEngineContextMenuRequest::staticMetaObject << &QWebEngineCertificateError::staticMetaObject - << &QWebEngineQuotaRequest::staticMetaObject - << &QWebEngineRegisterProtocolHandlerRequest::staticMetaObject + << &QWebEngineFindTextResult::staticMetaObject + << &QWebEngineLoadRequest::staticMetaObject + << &QWebEngineNavigationRequest::staticMetaObject << &QWebEngineNewWindowRequest::staticMetaObject << &QWebEngineNotification::staticMetaObject - << &QWebEngineFindTextResult::staticMetaObject + << &QWebEngineQuotaRequest::staticMetaObject + << &QWebEngineRegisterProtocolHandlerRequest::staticMetaObject ; static QList<QMetaEnum> knownEnumNames = QList<QMetaEnum>(); @@ -327,11 +327,20 @@ static const QStringList expectedAPI = QStringList() << "QWebEngineLoadRequest.HttpErrorDomain --> ErrorDomain" << "QWebEngineLoadRequest.InternalErrorDomain --> ErrorDomain" << "QWebEngineLoadRequest.NoErrorDomain --> ErrorDomain" - << "QQuickWebEngineNavigationRequest.action --> QQuickWebEngineView::NavigationRequestAction" - << "QQuickWebEngineNavigationRequest.actionChanged() --> void" - << "QQuickWebEngineNavigationRequest.isMainFrame --> bool" - << "QQuickWebEngineNavigationRequest.navigationType --> QQuickWebEngineView::NavigationType" - << "QQuickWebEngineNavigationRequest.url --> QUrl" + << "QWebEngineNavigationRequest.action --> QWebEngineNavigationRequest::NavigationRequestAction" + << "QWebEngineNavigationRequest.actionChanged() --> void" + << "QWebEngineNavigationRequest.isMainFrame --> bool" + << "QWebEngineNavigationRequest.navigationType --> QWebEngineNavigationRequest::NavigationType" + << "QWebEngineNavigationRequest.url --> QUrl" + << "QWebEngineNavigationRequest.AcceptRequest --> NavigationRequestAction" + << "QWebEngineNavigationRequest.IgnoreRequest --> NavigationRequestAction" + << "QWebEngineNavigationRequest.BackForwardNavigation --> NavigationType" + << "QWebEngineNavigationRequest.FormSubmittedNavigation --> NavigationType" + << "QWebEngineNavigationRequest.LinkClickedNavigation --> NavigationType" + << "QWebEngineNavigationRequest.OtherNavigation --> NavigationType" + << "QWebEngineNavigationRequest.RedirectNavigation --> NavigationType" + << "QWebEngineNavigationRequest.ReloadNavigation --> NavigationType" + << "QWebEngineNavigationRequest.TypedNavigation --> NavigationType" << "QWebEngineNewWindowRequest.destination --> QWebEngineNewWindowRequest::DestinationType" << "QWebEngineNewWindowRequest.requestedUrl --> QUrl" << "QWebEngineNewWindowRequest.requestedGeometry --> QRect" @@ -475,7 +484,6 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.A8 --> PrintedPageSizeId" << "QQuickWebEngineView.A9 --> PrintedPageSizeId" << "QQuickWebEngineView.AbnormalTerminationStatus --> RenderProcessTerminationStatus" - << "QQuickWebEngineView.AcceptRequest --> NavigationRequestAction" << "QQuickWebEngineView.AlignCenter --> WebAction" << "QQuickWebEngineView.AlignJustified --> WebAction" << "QQuickWebEngineView.AlignLeft --> WebAction" @@ -503,7 +511,6 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.B8 --> PrintedPageSizeId" << "QQuickWebEngineView.B9 --> PrintedPageSizeId" << "QQuickWebEngineView.Back --> WebAction" - << "QQuickWebEngineView.BackForwardNavigation --> NavigationType" << "QQuickWebEngineView.C5E --> PrintedPageSizeId" << "QQuickWebEngineView.CertificateErrorDomain --> ErrorDomain" << "QQuickWebEngineView.Comm10E --> PrintedPageSizeId" @@ -571,12 +578,10 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.FindBackward --> FindFlags" << "QQuickWebEngineView.FindCaseSensitively --> FindFlags" << "QQuickWebEngineView.Folio --> PrintedPageSizeId" - << "QQuickWebEngineView.FormSubmittedNavigation --> NavigationType" << "QQuickWebEngineView.Forward --> WebAction" << "QQuickWebEngineView.FtpErrorDomain --> ErrorDomain" << "QQuickWebEngineView.Geolocation --> Feature" << "QQuickWebEngineView.HttpErrorDomain --> ErrorDomain" - << "QQuickWebEngineView.IgnoreRequest --> NavigationRequestAction" << "QQuickWebEngineView.Imperial10x11 --> PrintedPageSizeId" << "QQuickWebEngineView.Imperial10x13 --> PrintedPageSizeId" << "QQuickWebEngineView.Imperial10x14 --> PrintedPageSizeId" @@ -616,7 +621,6 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.LifecycleState.Active --> LifecycleState" << "QQuickWebEngineView.LifecycleState.Discarded --> LifecycleState" << "QQuickWebEngineView.LifecycleState.Frozen --> LifecycleState" - << "QQuickWebEngineView.LinkClickedNavigation --> NavigationType" << "QQuickWebEngineView.LoadFailedStatus --> LoadStatus" << "QQuickWebEngineView.LoadStartedStatus --> LoadStatus" << "QQuickWebEngineView.LoadStoppedStatus --> LoadStatus" @@ -634,7 +638,6 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.OpenLinkInNewTab --> WebAction" << "QQuickWebEngineView.OpenLinkInNewWindow --> WebAction" << "QQuickWebEngineView.OpenLinkInThisWindow --> WebAction" - << "QQuickWebEngineView.OtherNavigation --> NavigationType" << "QQuickWebEngineView.Outdent --> WebAction" << "QQuickWebEngineView.Paste --> WebAction" << "QQuickWebEngineView.PasteAndMatchStyle --> WebAction" @@ -644,11 +647,9 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.Prc32K --> PrintedPageSizeId" << "QQuickWebEngineView.Prc32KBig --> PrintedPageSizeId" << "QQuickWebEngineView.Quarto --> PrintedPageSizeId" - << "QQuickWebEngineView.RedirectNavigation --> NavigationType" << "QQuickWebEngineView.Redo --> WebAction" << "QQuickWebEngineView.Reload --> WebAction" << "QQuickWebEngineView.ReloadAndBypassCache --> WebAction" - << "QQuickWebEngineView.ReloadNavigation --> NavigationType" << "QQuickWebEngineView.RequestClose --> WebAction" << "QQuickWebEngineView.SavePage --> WebAction" << "QQuickWebEngineView.SelectAll --> WebAction" @@ -666,7 +667,6 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.ToggleMediaPlayPause --> WebAction" << "QQuickWebEngineView.ToggleStrikethrough --> WebAction" << "QQuickWebEngineView.ToggleUnderline --> WebAction" - << "QQuickWebEngineView.TypedNavigation --> NavigationType" << "QQuickWebEngineView.Undo --> WebAction" << "QQuickWebEngineView.Unselect --> WebAction" << "QQuickWebEngineView.ViewSource --> WebAction" @@ -722,7 +722,7 @@ static const QStringList expectedAPI = QStringList() << "QQuickWebEngineView.loading --> bool" << "QQuickWebEngineView.loadingChanged(QWebEngineLoadRequest) --> void" << "QQuickWebEngineView.navigationHistory --> QQuickWebEngineHistory*" - << "QQuickWebEngineView.navigationRequested(QQuickWebEngineNavigationRequest*) --> void" + << "QQuickWebEngineView.navigationRequested(QWebEngineNavigationRequest*) --> void" << "QQuickWebEngineView.newViewRequested(QWebEngineNewWindowRequest*) --> void" << "QQuickWebEngineView.pdfPrintingFinished(QString,bool) --> void" << "QQuickWebEngineView.printRequested() --> void" diff --git a/tests/auto/quick/qmltests/data/tst_navigationRequested.qml b/tests/auto/quick/qmltests/data/tst_navigationRequested.qml index a24b8f0d4..bb2864a7d 100644 --- a/tests/auto/quick/qmltests/data/tst_navigationRequested.qml +++ b/tests/auto/quick/qmltests/data/tst_navigationRequested.qml @@ -65,14 +65,14 @@ TestWebEngineView { } else { attributes.iframeUrl = request.url if (shouldIgnoreSubFrameRequests) { - request.action = WebEngineView.IgnoreRequest + request.action = WebEngineNavigationRequest.IgnoreRequest } } - if (request.navigationType === WebEngineView.LinkClickedNavigation) { + if (request.navigationType === WebEngineNavigationRequest.LinkClickedNavigation) { attributes.linkClickedNavigationRequested = true if (shouldIgnoreLinkClicks) { - request.action = WebEngineView.IgnoreRequest + request.action = WebEngineNavigationRequest.IgnoreRequest attributes.linkClickedNavigationIgnored = true } } diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp index 460e4369b..cd91bf5fc 100644 --- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp +++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp @@ -51,6 +51,7 @@ #include <qwebenginefindtextresult.h> #include <qwebenginefullscreenrequest.h> #include <qwebenginehistory.h> +#include <qwebenginenavigationrequest.h> #include <qwebenginenewwindowrequest.h> #include <qwebenginenotification.h> #include <qwebenginepage.h> @@ -529,26 +530,17 @@ public: TestPage(QObject *parent = nullptr) : QWebEnginePage(parent) { connect(this, &QWebEnginePage::geometryChangeRequested, this, &TestPage::slotGeometryChangeRequested); + connect(this, &QWebEnginePage::navigationRequested, this, &TestPage::slotNavigationRequested); connect(this, &QWebEnginePage::newWindowRequested, this, &TestPage::slotNewWindowRequested); } struct Navigation { - NavigationType type; + QWebEngineNavigationRequest::NavigationType type; QUrl url; bool isMainFrame; }; QList<Navigation> navigations; - bool acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame) override - { - Navigation n; - n.url = url; - n.type = type; - n.isMainFrame = isMainFrame; - navigations.append(n); - return true; - } - QList<TestPage*> createdWindows; QRect requestedGeometry; @@ -557,6 +549,15 @@ signals: void windowCreated(); private Q_SLOTS: + void slotNavigationRequested(QWebEngineNavigationRequest &request) + { + Navigation n; + n.url = request.url(); + n.type = request.navigationType(); + n.isMainFrame = request.isMainFrame(); + navigations.append(n); + request.setAction(QWebEngineNavigationRequest::AcceptRequest); + } void slotNewWindowRequested(QWebEngineNewWindowRequest &request) { TestPage *page = new TestPage(this); @@ -600,19 +601,19 @@ void tst_QWebEnginePage::acceptNavigationRequestNavigationType() QTRY_COMPARE_WITH_TIMEOUT(loadSpy.count(), 6, 20000); QTRY_COMPARE(page.navigations.count(), 6); - QList<QWebEnginePage::NavigationType> expectedList; - expectedList << QWebEnginePage::NavigationTypeTyped - << QWebEnginePage::NavigationTypeTyped - << QWebEnginePage::NavigationTypeBackForward - << QWebEnginePage::NavigationTypeReload - << QWebEnginePage::NavigationTypeTyped - << QWebEnginePage::NavigationTypeRedirect; + QList<QWebEngineNavigationRequest::NavigationType> expectedList; + expectedList << QWebEngineNavigationRequest::TypedNavigation + << QWebEngineNavigationRequest::TypedNavigation + << QWebEngineNavigationRequest::BackForwardNavigation + << QWebEngineNavigationRequest::ReloadNavigation + << QWebEngineNavigationRequest::TypedNavigation + << QWebEngineNavigationRequest::RedirectNavigation; // client side redirect page.load(QUrl("qrc:///resources/redirect.html")); QTRY_COMPARE_WITH_TIMEOUT(loadSpy.count(), 7, 20000); QTRY_COMPARE(page.navigations.count(), 8); - expectedList += { QWebEnginePage::NavigationTypeTyped, QWebEnginePage::NavigationTypeRedirect }; + expectedList += { QWebEngineNavigationRequest::TypedNavigation, QWebEngineNavigationRequest::RedirectNavigation }; // server side redirect HttpServer server; @@ -635,9 +636,9 @@ void tst_QWebEnginePage::acceptNavigationRequestNavigationType() QTRY_COMPARE_WITH_TIMEOUT(loadSpy.count(), 8, 20000); QTRY_COMPARE(page.navigations.count(), 11); expectedList += { - QWebEnginePage::NavigationTypeTyped, - QWebEnginePage::NavigationTypeRedirect, - QWebEnginePage::NavigationTypeRedirect + QWebEngineNavigationRequest::TypedNavigation, + QWebEngineNavigationRequest::RedirectNavigation, + QWebEngineNavigationRequest::RedirectNavigation }; QVERIFY(expectedList.count() == page.navigations.count()); @@ -668,9 +669,9 @@ void tst_QWebEnginePage::acceptNavigationRequestRelativeToNothing() // The two setHtml and the second click are counted, while the // first click is ignored due to the empty base url. QCOMPARE(page.navigations.count(), 3); - QCOMPARE(page.navigations[0].type, QWebEnginePage::NavigationTypeTyped); - QCOMPARE(page.navigations[1].type, QWebEnginePage::NavigationTypeTyped); - QCOMPARE(page.navigations[2].type, QWebEnginePage::NavigationTypeLinkClicked); + QCOMPARE(page.navigations[0].type, QWebEngineNavigationRequest::TypedNavigation); + QCOMPARE(page.navigations[1].type, QWebEngineNavigationRequest::TypedNavigation); + QCOMPARE(page.navigations[2].type, QWebEngineNavigationRequest::LinkClickedNavigation); QCOMPARE(page.navigations[2].url, QUrl(QString("qrc:/S0"))); } |