void FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const WebCore::NavigationAction& action, const WebCore::ResourceRequest& request, PassRefPtr<WebCore::FormState>) { Q_ASSERT(!m_policyFunction); Q_ASSERT(m_webFrame); m_policyFunction = function; #if QT_VERSION < 0x040400 QWebNetworkRequest r(request); #else QNetworkRequest r(request.toNetworkRequest()); #endif QWebPage*page = m_webFrame->page(); if (!page->d->acceptNavigationRequest(m_webFrame, r, QWebPage::NavigationType(action.type()))) { if (action.type() == NavigationTypeFormSubmitted || action.type() == NavigationTypeFormResubmitted) m_frame->loader()->resetMultipleFormSubmissionProtection(); if (action.type() == NavigationTypeLinkClicked && r.url().hasFragment()) { ResourceRequest emptyRequest; m_frame->loader()->activeDocumentLoader()->setLastCheckedRequest(emptyRequest); } slotCallPolicyFunction(PolicyIgnore); return; } slotCallPolicyFunction(PolicyUse); }
void DumpRenderTree::didDecidePolicyForNavigationAction(const WebCore::NavigationAction& action, const WebCore::ResourceRequest& request, WebCore::Frame* frame) { if (testDone || !m_policyDelegateEnabled) return; const char* typeDescription; switch (action.type()) { case WebCore::NavigationTypeLinkClicked: typeDescription = "link clicked"; break; case WebCore::NavigationTypeFormSubmitted: typeDescription = "form submitted"; break; case WebCore::NavigationTypeBackForward: typeDescription = "back/forward"; break; case WebCore::NavigationTypeReload: typeDescription = "reload"; break; case WebCore::NavigationTypeFormResubmitted: typeDescription = "form resubmitted"; break; case WebCore::NavigationTypeOther: typeDescription = "other"; break; default: typeDescription = "illegal value"; } bool shouldWaitForResponse = !request.url().string().startsWith("mailto:"); printf("Policy delegate: attempt to load %s with navigation type '%s'", request.url().string().utf8().data(), typeDescription); // Originating part, borrowed from Chromium. RefPtr<WebCore::Node> node; for (const WebCore::Event* event = action.event(); event; event = event->underlyingEvent()) { if (event->isMouseEvent()) { const WebCore::MouseEvent* mouseEvent = static_cast<const WebCore::MouseEvent*>(event); node = frame->eventHandler()->hitTestResultAtPoint(mouseEvent->absoluteLocation(), false).innerNonSharedNode(); break; } } if (node.get()) printf(" originating from %s\n", drtDumpPath(node.get()).utf8().data()); else printf("\n"); if (waitForPolicy && !shouldWaitForResponse) gTestRunner->notifyDone(); }
void FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction function, const WebCore::NavigationAction& action, const WebCore::ResourceRequest& request, PassRefPtr<WebCore::FormState>, const WebCore::String&) { Q_ASSERT(m_webFrame); QNetworkRequest r(request.toNetworkRequest(m_webFrame)); QWebPage* page = m_webFrame->page(); if (!page->d->acceptNavigationRequest(0, r, QWebPage::NavigationType(action.type()))) { if (action.type() == NavigationTypeFormSubmitted || action.type() == NavigationTypeFormResubmitted) m_frame->loader()->resetMultipleFormSubmissionProtection(); if (action.type() == NavigationTypeLinkClicked && r.url().hasFragment()) { ResourceRequest emptyRequest; m_frame->loader()->activeDocumentLoader()->setLastCheckedRequest(emptyRequest); } callPolicyFunction(function, PolicyIgnore); return; } callPolicyFunction(function, PolicyUse); }
void FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction function, const WebCore::NavigationAction& action, const WebCore::ResourceRequest& request, PassRefPtr<WebCore::FormState>, const WebCore::String&) { Q_ASSERT(!m_policyFunction); Q_ASSERT(m_webFrame); m_policyFunction = function; #if QT_VERSION < 0x040400 QWebNetworkRequest r(request); #else QNetworkRequest r(request.toNetworkRequest()); #endif QWebPage* page = m_webFrame->page(); if (!page->d->acceptNavigationRequest(0, r, QWebPage::NavigationType(action.type()))) { if (action.type() == NavigationTypeFormSubmitted || action.type() == NavigationTypeFormResubmitted) m_frame->loader()->resetMultipleFormSubmissionProtection(); slotCallPolicyFunction(PolicyIgnore); return; } slotCallPolicyFunction(PolicyUse); }