summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/api/CMakeLists.txt1
-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.cpp19
-rw-r--r--src/core/api/qwebenginepage.h3
-rw-r--r--src/webenginequick/CMakeLists.txt1
-rw-r--r--src/webenginequick/api/qquickwebengineview.cpp4
-rw-r--r--src/webenginequick/api/qquickwebengineview_p.h27
-rw-r--r--src/webenginequick/plugin/plugin.cpp4
-rw-r--r--tests/auto/quick/publicapi/tst_publicapi.cpp42
-rw-r--r--tests/auto/quick/qmltests/data/tst_navigationRequested.qml6
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp51
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")));
}