diff --git public/renderer/content_renderer_client.cc public/renderer/content_renderer_client.cc index 32004d1..ccd1f58 100644 --- public/renderer/content_renderer_client.cc +++ public/renderer/content_renderer_client.cc @@ -98,6 +98,18 @@ bool ContentRendererClient::AllowPopup() { return false; } +bool ContentRendererClient::HandleNavigation( + RenderFrame* render_frame, + bool is_content_initiated, + int opener_id, + blink::WebFrame* frame, + const blink::WebURLRequest& request, + blink::WebNavigationType type, + blink::WebNavigationPolicy default_policy, + bool is_redirect) { + return false; +} + bool ContentRendererClient::ShouldFork(blink::WebLocalFrame* frame, const GURL& url, const std::string& http_method, diff --git public/renderer/content_renderer_client.h public/renderer/content_renderer_client.h index fd2f3af..40cca1d 100644 --- public/renderer/content_renderer_client.h +++ public/renderer/content_renderer_client.h @@ -18,6 +18,8 @@ #include "base/strings/string16.h" #include "content/public/common/content_client.h" #include "third_party/WebKit/public/platform/WebPageVisibilityState.h" +#include "third_party/WebKit/public/web/WebNavigationPolicy.h" +#include "third_party/WebKit/public/web/WebNavigationType.h" #include "ui/base/page_transition_types.h" #include "v8/include/v8.h" @@ -191,6 +193,17 @@ class CONTENT_EXPORT ContentRendererClient { // Returns true if a popup window should be allowed. virtual bool AllowPopup(); + + // Returns true if the navigation was handled by the embedder and should be + // ignored by WebKit. This method is used by CEF and android_webview. + virtual bool HandleNavigation(RenderFrame* render_frame, + bool is_content_initiated, + int opener_id, + blink::WebFrame* frame, + const blink::WebURLRequest& request, + blink::WebNavigationType type, + blink::WebNavigationPolicy default_policy, + bool is_redirect); // Returns true if we should fork a new process for the given navigation. // If |send_referrer| is set to false (which is the default), no referrer diff --git renderer/render_frame_impl.cc renderer/render_frame_impl.cc index 9ea32c4..adb478d 100644 --- renderer/render_frame_impl.cc +++ renderer/render_frame_impl.cc @@ -4609,6 +4609,14 @@ WebNavigationPolicy RenderFrameImpl::decidePolicyForNavigation( (pending_navigation_params_ && !pending_navigation_params_->request_params.redirects.empty()); + if (info.urlRequest.url() != GURL(kSwappedOutURL) && + GetContentClient()->renderer()->HandleNavigation( + this, is_content_initiated, render_view_->opener_id_, frame_, + info.urlRequest, info.navigationType, info.defaultPolicy, + is_redirect)) { + return blink::WebNavigationPolicyIgnore; + } + Referrer referrer( RenderViewImpl::GetReferrerFromRequest(frame_, info.urlRequest));