void QQuickWebEngineViewPrivate::navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame) { Q_Q(QQuickWebEngineView); QQuickWebEngineNavigationRequest navigationRequest(url, static_cast<QQuickWebEngineView::NavigationType>(navigationType), isMainFrame); Q_EMIT q->navigationRequested(&navigationRequest); navigationRequestAction = navigationRequest.action(); }
void QtWebPagePolicyClient::decidePolicyForNavigationAction(const QUrl& url, Qt::MouseButton mouseButton, Qt::KeyboardModifiers keyboardModifiers, QQuickWebView::NavigationType navigationType, bool isMainFrame, WKFramePolicyListenerRef listener) { // NOTE: even though the C API (and the WebKit2 IPC) supports an asynchronous answer, this is not currently working. // We are expected to call the listener immediately. See the patch for https://bugs.webkit.org/show_bug.cgi?id=53785. QWebNavigationRequest navigationRequest(url, mouseButton, keyboardModifiers, navigationType, isMainFrame); emit m_webView->navigationRequested(&navigationRequest); switch (navigationRequest.action()) { case QQuickWebView::IgnoreRequest: WKFramePolicyListenerIgnore(listener); return; case QQuickWebViewExperimental::DownloadRequest: WKFramePolicyListenerDownload(listener); return; case QQuickWebView::AcceptRequest: WKFramePolicyListenerUse(listener); return; } ASSERT_NOT_REACHED(); }