diff options
-rw-r--r-- | src/core/api/qwebenginenavigationrequest.cpp | 58 | ||||
-rw-r--r-- | src/core/api/qwebenginenavigationrequest.h | 33 | ||||
-rw-r--r-- | src/core/api/qwebenginepage.cpp | 9 | ||||
-rw-r--r-- | src/core/api/qwebenginepage.h | 2 | ||||
-rw-r--r-- | src/core/api/qwebenginepage_p.h | 2 | ||||
-rw-r--r-- | src/core/content_browser_client_qt.cpp | 6 | ||||
-rw-r--r-- | src/core/web_contents_adapter_client.h | 8 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.cpp | 4 | ||||
-rw-r--r-- | src/webenginequick/api/qquickwebengineview.cpp | 11 | ||||
-rw-r--r-- | src/webenginequick/api/qquickwebengineview_p_p.h | 2 | ||||
-rw-r--r-- | tests/auto/quick/publicapi/tst_publicapi.cpp | 2 | ||||
-rw-r--r-- | tests/auto/quick/qmltests/data/tst_navigationRequested.qml | 6 | ||||
-rw-r--r-- | tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp | 2 |
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) { |