cef/patch/patches/content_nav_1129.patch

79 lines
3.3 KiB
Diff
Raw Normal View History

diff --git public/renderer/content_renderer_client.cc public/renderer/content_renderer_client.cc
index 95af2f7..c7270f1 100644
--- public/renderer/content_renderer_client.cc
+++ public/renderer/content_renderer_client.cc
@@ -101,6 +101,18 @@ bool ContentRendererClient::AllowPopup() {
return false;
}
+bool ContentRendererClient::HandleNavigation(
+ RenderFrame* render_frame,
+ DocumentState* document_state,
+ 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 ebb7f44..3f77142 100644
--- public/renderer/content_renderer_client.h
+++ public/renderer/content_renderer_client.h
@@ -16,6 +16,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"
@@ -196,6 +198,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,
+ DocumentState* document_state,
+ 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
// header will be send for the navigation. Otherwise, the referrer header is
diff --git renderer/render_frame_impl.cc renderer/render_frame_impl.cc
index 05e6ad6..4c02fc8 100644
--- renderer/render_frame_impl.cc
+++ renderer/render_frame_impl.cc
@@ -4195,6 +4195,19 @@ void RenderFrameImpl::OnFailedNavigation(
WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
RenderFrame* render_frame,
const NavigationPolicyInfo& info) {
+ if (info.urlRequest.url() != GURL(kSwappedOutURL) &&
+ GetContentClient()->renderer()->HandleNavigation(
+ render_frame,
+ static_cast<DocumentState*>(info.extraData),
+ render_view_->opener_id_,
+ info.frame,
+ info.urlRequest,
+ info.navigationType,
+ info.defaultPolicy,
+ info.isRedirect)) {
+ return blink::WebNavigationPolicyIgnore;
+ }
+
Referrer referrer(RenderViewImpl::GetReferrerFromRequest(info.frame,
info.urlRequest));