summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/api/qwebenginenavigationrequest.cpp58
-rw-r--r--src/core/api/qwebenginenavigationrequest.h33
-rw-r--r--src/core/api/qwebenginepage.cpp9
-rw-r--r--src/core/api/qwebenginepage.h2
-rw-r--r--src/core/api/qwebenginepage_p.h2
-rw-r--r--src/core/content_browser_client_qt.cpp6
-rw-r--r--src/core/web_contents_adapter_client.h8
-rw-r--r--src/core/web_contents_delegate_qt.cpp4
-rw-r--r--src/webenginequick/api/qquickwebengineview.cpp11
-rw-r--r--src/webenginequick/api/qquickwebengineview_p_p.h2
-rw-r--r--tests/auto/quick/publicapi/tst_publicapi.cpp2
-rw-r--r--tests/auto/quick/qmltests/data/tst_navigationRequested.qml6
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp2
13 files changed, 80 insertions, 65 deletions
diff --git a/src/core/api/qwebenginenavigationrequest.cpp b/src/core/api/qwebenginenavigationrequest.cpp
index dac68bd72..070770012 100644
--- a/src/core/api/qwebenginenavigationrequest.cpp
+++ b/src/core/api/qwebenginenavigationrequest.cpp
@@ -47,15 +47,14 @@ class QWebEngineNavigationRequestPrivate {
public:
QWebEngineNavigationRequestPrivate(const QUrl& url, QWebEngineNavigationRequest::NavigationType navigationType, bool mainFrame)
: url(url)
- , action(QWebEngineNavigationRequest::AcceptRequest)
, navigationType(navigationType)
, isMainFrame(mainFrame)
{}
QUrl url;
- QWebEngineNavigationRequest::NavigationRequestAction action;
QWebEngineNavigationRequest::NavigationType navigationType;
bool isMainFrame;
+ bool isAccepted = true;
};
/*!
@@ -67,9 +66,7 @@ public:
Contains information about a navigation request.
- To accept or reject a request, set \l action to
- \c QWebEngineNavigationRequest::AcceptRequest or
- \c QWebEngineNavigationRequest::IgnoreRequest.
+ To accept or reject a request, call accept() or reject().
The default if not handled is to accept the navigation.
@@ -85,9 +82,7 @@ public:
\brief Represents a request for navigating to a web page as part of
\l{WebEngineView::navigationRequested()}.
- To accept or reject a request, set \l action to
- \c WebEngineNavigationRequest.AcceptRequest or
- \c WebEngineNavigationRequest.IgnoreRequest.
+ To accept or reject a request, call accept() or reject().
*/
/*! \internal
@@ -102,10 +97,7 @@ QWebEngineNavigationRequest::~QWebEngineNavigationRequest()
{
}
-/*!
- \property QWebEngineNavigationRequest::action
- \brief Whether to accept or ignore the navigation request.
-*/
+#if QT_DEPRECATED_SINCE(6, 2)
/*!
\qmlproperty enumeration WebEngineNavigationRequest::action
@@ -116,17 +108,40 @@ QWebEngineNavigationRequest::~QWebEngineNavigationRequest()
\value WebEngineNavigationRequest.IgnoreRequest
Ignores a navigation request.
*/
+QWebEngineNavigationRequest::NavigationRequestAction QWebEngineNavigationRequest::action() const
+{
+ qWarning("Navigation request: action/setAction are deprecated. Please, use accept/reject methods instead.");
+ Q_D(const QWebEngineNavigationRequest);
+ return d->isAccepted ? AcceptRequest : IgnoreRequest;
+}
+/*! \internal */
void QWebEngineNavigationRequest::setAction(QWebEngineNavigationRequest::NavigationRequestAction action)
{
+ qWarning("Navigation request: action/setAction are deprecated. Please, use accept/reject methods instead.");
Q_D(QWebEngineNavigationRequest);
- if (d->action == action)
+ bool acceptRequest = action == AcceptRequest;
+ if (d->isAccepted == acceptRequest)
return;
- d->action = action;
+ acceptRequest ? accept() : reject();
emit actionChanged();
}
-
+#endif
+/*!
+ Accepts a navigation request.
+*/
+void QWebEngineNavigationRequest::accept()
+{
+ d_ptr->isAccepted = true;
+}
+/*!
+ Rejects a navigation request.
+*/
+void QWebEngineNavigationRequest::reject()
+{
+ d_ptr->isAccepted = false;
+}
/*!
\property QWebEngineNavigationRequest::url
\brief The URL of the web page to go to.
@@ -143,13 +158,6 @@ QUrl QWebEngineNavigationRequest::url() const
Q_D(const QWebEngineNavigationRequest);
return d->url;
}
-
-QWebEngineNavigationRequest::NavigationRequestAction QWebEngineNavigationRequest::action() const
-{
- Q_D(const QWebEngineNavigationRequest);
- return d->action;
-}
-
/*!
\property QWebEngineNavigationRequest::navigationType
\brief The method used to navigate to a web page.
@@ -199,4 +207,10 @@ bool QWebEngineNavigationRequest::isMainFrame() const
return d->isMainFrame;
}
+/*! \internal */
+bool QWebEngineNavigationRequest::isAccepted() const
+{
+ return d_ptr->isAccepted;
+}
+
QT_END_NAMESPACE
diff --git a/src/core/api/qwebenginenavigationrequest.h b/src/core/api/qwebenginenavigationrequest.h
index 32ab00179..afa1f46de 100644
--- a/src/core/api/qwebenginenavigationrequest.h
+++ b/src/core/api/qwebenginenavigationrequest.h
@@ -53,19 +53,11 @@ 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(NavigationRequestAction action READ action WRITE setAction NOTIFY actionChanged FINAL)
Q_PROPERTY(NavigationType navigationType READ navigationType CONSTANT FINAL)
public:
~QWebEngineNavigationRequest();
- // must match WebContentsAdapterClient::NavigationRequestAction
- enum NavigationRequestAction {
- AcceptRequest,
- IgnoreRequest = 0xFF
- };
- Q_ENUM(NavigationRequestAction)
-
// must match WebContentsAdapterClient::NavigationType
enum NavigationType {
LinkClickedNavigation,
@@ -81,20 +73,37 @@ public:
QUrl url() const;
bool isMainFrame() const;
NavigationType navigationType() const;
- NavigationRequestAction action() const;
+ Q_INVOKABLE void accept();
+ Q_INVOKABLE void reject();
+
+#if QT_DEPRECATED_SINCE(6, 2)
+ enum NavigationRequestAction {
+ AcceptRequest,
+ IgnoreRequest = 0xFF
+ };
+ QT_DEPRECATED Q_ENUM(NavigationRequestAction)
+
+private:
+ Q_PROPERTY(NavigationRequestAction action READ action WRITE setAction NOTIFY actionChanged FINAL)
+
+ QT_DEPRECATED NavigationRequestAction action() const;
+ QT_DEPRECATED_X("Use accept/reject methods to handle the request")
void setAction(NavigationRequestAction action);
Q_SIGNALS:
- void actionChanged();
+ QT_DEPRECATED void actionChanged();
+#endif
private:
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;
+ bool isAccepted() const;
+
+ Q_DECLARE_PRIVATE(QWebEngineNavigationRequest)
+ QScopedPointer<QWebEngineNavigationRequestPrivate> d_ptr;
};
QT_END_NAMESPACE
diff --git a/src/core/api/qwebenginepage.cpp b/src/core/api/qwebenginepage.cpp
index 131210fbc..17a790d9f 100644
--- a/src/core/api/qwebenginepage.cpp
+++ b/src/core/api/qwebenginepage.cpp
@@ -83,8 +83,6 @@ QT_BEGIN_NAMESPACE
using namespace QtWebEngineCore;
-static const int MaxTooltipLength = 1024;
-
// add temporary dummy code to cover the case when page is loading and there is no view
class DummyDelegate : public QObject, public QtWebEngineCore::RenderWidgetHostViewQtDelegate
{
@@ -1556,20 +1554,19 @@ void QWebEnginePagePrivate::contextMenuRequested(QWebEngineContextMenuRequest *d
\sa acceptNavigationRequest()
*/
-void QWebEnginePagePrivate::navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame)
+void QWebEnginePagePrivate::navigationRequested(int navigationType, const QUrl &url, bool &accepted, bool isMainFrame)
{
Q_Q(QWebEnginePage);
- bool accepted = q->acceptNavigationRequest(url, static_cast<QWebEnginePage::NavigationType>(navigationType), isMainFrame);
+ 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);
+ accepted = navigationRequest.isAccepted();
}
if (accepted && adapter->findTextHelper()->isFindTextInProgress())
adapter->findTextHelper()->stopFinding();
- navigationRequestAction = accepted ? WebContentsAdapterClient::AcceptRequest : WebContentsAdapterClient::IgnoreRequest;
}
void QWebEnginePagePrivate::requestFullScreenMode(const QUrl &origin, bool fullscreen)
diff --git a/src/core/api/qwebenginepage.h b/src/core/api/qwebenginepage.h
index 4f99d0107..1bdcf6539 100644
--- a/src/core/api/qwebenginepage.h
+++ b/src/core/api/qwebenginepage.h
@@ -340,7 +340,7 @@ Q_SIGNALS:
void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, int exitCode);
void certificateError(const QWebEngineCertificateError &certificateError);
- bool navigationRequested(QWebEngineNavigationRequest &request);
+ void navigationRequested(QWebEngineNavigationRequest &request);
void newWindowRequested(QWebEngineNewWindowRequest &request);
// Ex-QWebFrame signals
diff --git a/src/core/api/qwebenginepage_p.h b/src/core/api/qwebenginepage_p.h
index d661fd442..f9eb2ad71 100644
--- a/src/core/api/qwebenginepage_p.h
+++ b/src/core/api/qwebenginepage_p.h
@@ -145,7 +145,7 @@ public:
void close() override;
void windowCloseRejected() override;
void contextMenuRequested(QWebEngineContextMenuRequest *request) override;
- void navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame) override;
+ void navigationRequested(int navigationType, const QUrl &url, bool &accepted, bool isMainFrame) override;
void requestFullScreenMode(const QUrl &origin, bool fullscreen) override;
bool isFullScreenMode() const override;
void javascriptDialog(QSharedPointer<QtWebEngineCore::JavaScriptDialogController>) override;
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
index bb349bf43..f580e6f77 100644
--- a/src/core/content_browser_client_qt.cpp
+++ b/src/core/content_browser_client_qt.cpp
@@ -818,7 +818,7 @@ static bool navigationThrottleCallback(content::WebContents *source,
if (!view->client())
return false;
- int navigationRequestAction = WebContentsAdapterClient::AcceptRequest;
+ bool navigationAccepted = true;
WebContentsAdapterClient *client =
WebContentsViewQt::from(static_cast<content::WebContentsImpl *>(source)->GetView())->client();
@@ -832,9 +832,9 @@ static bool navigationThrottleCallback(content::WebContents *source,
client->navigationRequested(pageTransitionToNavigationType(transition_type),
toQt(params.url()),
- navigationRequestAction,
+ navigationAccepted,
params.is_main_frame());
- return navigationRequestAction == static_cast<int>(WebContentsAdapterClient::IgnoreRequest);
+ return !navigationAccepted;
}
std::vector<std::unique_ptr<content::NavigationThrottle>> ContentBrowserClientQt::CreateThrottlesForNavigation(
diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h
index 2e81f21e8..ddc371fa3 100644
--- a/src/core/web_contents_adapter_client.h
+++ b/src/core/web_contents_adapter_client.h
@@ -120,12 +120,6 @@ public:
InternalAuthorizationDialog = 0x10,
};
- enum NavigationRequestAction {
- AcceptRequest,
- // Make room in the valid range of the enum for extra actions exposed in Experimental.
- IgnoreRequest = 0xFF
- };
-
enum NavigationType {
LinkNavigation,
TypedNavigation,
@@ -206,7 +200,7 @@ public:
virtual void close() = 0;
virtual void windowCloseRejected() = 0;
virtual void contextMenuRequested(QWebEngineContextMenuRequest *request) = 0;
- virtual void navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame) = 0;
+ virtual void navigationRequested(int navigationType, const QUrl &url, bool &accepted, bool isMainFrame) = 0;
virtual void requestFullScreenMode(const QUrl &origin, bool fullscreen) = 0;
virtual bool isFullScreenMode() const = 0;
virtual void javascriptDialog(QSharedPointer<JavaScriptDialogController>) = 0;
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index 5366e6a26..ef79c8f47 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -737,9 +737,7 @@ void WebContentsDelegateQt::launchExternalURL(const QUrl &url, ui::PageTransitio
}
if (navigationAllowedByPolicy) {
- int navigationRequestAction = WebContentsAdapterClient::AcceptRequest;
- m_viewClient->navigationRequested(pageTransitionToNavigationType(page_transition), url, navigationRequestAction, is_main_frame);
- navigationRequestAccepted = navigationRequestAction == WebContentsAdapterClient::AcceptRequest;
+ m_viewClient->navigationRequested(pageTransitionToNavigationType(page_transition), url, navigationRequestAccepted, is_main_frame);
#ifndef QT_NO_DESKTOPSERVICES
if (navigationRequestAccepted)
QDesktopServices::openUrl(url);
diff --git a/src/webenginequick/api/qquickwebengineview.cpp b/src/webenginequick/api/qquickwebengineview.cpp
index 0f3adca92..97592806d 100644
--- a/src/webenginequick/api/qquickwebengineview.cpp
+++ b/src/webenginequick/api/qquickwebengineview.cpp
@@ -267,14 +267,15 @@ void QQuickWebEngineViewPrivate::contextMenuRequested(QWebEngineContextMenuReque
ui()->showMenu(menu);
}
-void QQuickWebEngineViewPrivate::navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame)
+void QQuickWebEngineViewPrivate::navigationRequested(int navigationType, const QUrl &url, bool &accepted, bool isMainFrame)
{
Q_Q(QQuickWebEngineView);
- QWebEngineNavigationRequest navigationRequest(url, static_cast<QWebEngineNavigationRequest::NavigationType>(navigationType), isMainFrame);
- Q_EMIT q->navigationRequested(&navigationRequest);
+ auto request = new QWebEngineNavigationRequest(url, static_cast<QWebEngineNavigationRequest::NavigationType>(navigationType), isMainFrame);
+ qmlEngine(q)->newQObject(request);
+ Q_EMIT q->navigationRequested(request);
- navigationRequestAction = navigationRequest.action();
- if ((navigationRequestAction == WebContentsAdapterClient::AcceptRequest) && adapter->findTextHelper()->isFindTextInProgress())
+ accepted = request->isAccepted();
+ if (accepted && adapter->findTextHelper()->isFindTextInProgress())
adapter->findTextHelper()->stopFinding();
}
diff --git a/src/webenginequick/api/qquickwebengineview_p_p.h b/src/webenginequick/api/qquickwebengineview_p_p.h
index da0d79d60..2e70e423d 100644
--- a/src/webenginequick/api/qquickwebengineview_p_p.h
+++ b/src/webenginequick/api/qquickwebengineview_p_p.h
@@ -122,7 +122,7 @@ public:
void requestFullScreenMode(const QUrl &origin, bool fullscreen) override;
bool isFullScreenMode() const override;
void contextMenuRequested(QWebEngineContextMenuRequest *request) override;
- void navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame) override;
+ void navigationRequested(int navigationType, const QUrl &url, bool &accepted, bool isMainFrame) override;
void javascriptDialog(QSharedPointer<QtWebEngineCore::JavaScriptDialogController>) override;
void runFileChooser(QSharedPointer<QtWebEngineCore::FilePickerController>) override;
void showColorDialog(QSharedPointer<QtWebEngineCore::ColorChooserController>) override;
diff --git a/tests/auto/quick/publicapi/tst_publicapi.cpp b/tests/auto/quick/publicapi/tst_publicapi.cpp
index 9532dd412..fe0b9d2b4 100644
--- a/tests/auto/quick/publicapi/tst_publicapi.cpp
+++ b/tests/auto/quick/publicapi/tst_publicapi.cpp
@@ -333,6 +333,8 @@ static const QStringList expectedAPI = QStringList()
<< "QWebEngineNavigationRequest.RedirectNavigation --> NavigationType"
<< "QWebEngineNavigationRequest.ReloadNavigation --> NavigationType"
<< "QWebEngineNavigationRequest.TypedNavigation --> NavigationType"
+ << "QWebEngineNavigationRequest.accept() --> void"
+ << "QWebEngineNavigationRequest.reject() --> void"
<< "QWebEngineNewWindowRequest.destination --> QWebEngineNewWindowRequest::DestinationType"
<< "QWebEngineNewWindowRequest.requestedUrl --> QUrl"
<< "QWebEngineNewWindowRequest.requestedGeometry --> QRect"
diff --git a/tests/auto/quick/qmltests/data/tst_navigationRequested.qml b/tests/auto/quick/qmltests/data/tst_navigationRequested.qml
index bb2864a7d..462dc8297 100644
--- a/tests/auto/quick/qmltests/data/tst_navigationRequested.qml
+++ b/tests/auto/quick/qmltests/data/tst_navigationRequested.qml
@@ -59,20 +59,20 @@ TestWebEngineView {
signalName: "navigationRequested"
}
- onNavigationRequested: {
+ onNavigationRequested: function(request) {
if (request.isMainFrame) {
attributes.mainUrl = request.url
} else {
attributes.iframeUrl = request.url
if (shouldIgnoreSubFrameRequests) {
- request.action = WebEngineNavigationRequest.IgnoreRequest
+ request.reject()
}
}
if (request.navigationType === WebEngineNavigationRequest.LinkClickedNavigation) {
attributes.linkClickedNavigationRequested = true
if (shouldIgnoreLinkClicks) {
- request.action = WebEngineNavigationRequest.IgnoreRequest
+ request.reject()
attributes.linkClickedNavigationIgnored = true
}
}
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index 7ac2b043a..8df70d917 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -557,7 +557,7 @@ private Q_SLOTS:
n.type = request.navigationType();
n.isMainFrame = request.isMainFrame();
navigations.append(n);
- request.setAction(QWebEngineNavigationRequest::AcceptRequest);
+ request.accept();
}
void slotNewWindowRequested(QWebEngineNewWindowRequest &request)
{