summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgsennton <gsennton@chromium.org>2015-07-16 13:12:49 -0700
committerCommit bot <commit-bot@chromium.org>2015-07-16 20:13:36 +0000
commit777bb78a111aee919e07f5206267915a87639f88 (patch)
tree852c8f2cf62748fc0c28926fe6967e74f01b0cbc
parentb839eab3001b70e7489661dfadffd3ecb3386ab5 (diff)
downloadchromium_src-777bb78a111aee919e07f5206267915a87639f88.zip
chromium_src-777bb78a111aee919e07f5206267915a87639f88.tar.gz
chromium_src-777bb78a111aee919e07f5206267915a87639f88.tar.bz2
Use resource throttle to implement shouldOverrideUrlLoading, core change
We have been using both a resource throttle and a sync IPC to implement shouldOverrideUrlLoading, with this patch we use only a resource throttle instead. This patch depends on https://codereview.chromium.org/1194383003 which adds a flag indicating that the current request was overridden. The flag is passed down to AwWebContentsObserver.didFailLoad. That CL in turn depends on https://codereview.chromium.org/1178273007/ which adds the flag to blink errors. BUG=325351 Review URL: https://codereview.chromium.org/1155713005 Cr-Commit-Position: refs/heads/master@{#339109}
-rw-r--r--android_webview/browser/aw_content_browser_client.cc37
-rw-r--r--android_webview/browser/aw_contents_client_bridge_base.h4
-rw-r--r--android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc13
-rw-r--r--android_webview/common/render_view_messages.h13
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java43
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java10
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java6
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java90
-rw-r--r--android_webview/native/aw_contents_client_bridge.cc14
-rw-r--r--android_webview/native/aw_contents_client_bridge.h3
-rw-r--r--android_webview/renderer/aw_content_renderer_client.cc58
-rw-r--r--android_webview/renderer/aw_content_renderer_client.h8
-rw-r--r--content/public/renderer/content_renderer_client.cc14
-rw-r--r--content/public/renderer/content_renderer_client.h19
-rw-r--r--content/renderer/render_frame_impl.cc17
15 files changed, 131 insertions, 218 deletions
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index ca277be..87a1b93 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -24,7 +24,6 @@
#include "components/cdm/browser/cdm_message_filter_android.h"
#include "content/public/browser/access_token_store.h"
#include "content/public/browser/browser_message_filter.h"
-#include "content/public/browser/browser_thread.h"
#include "content/public/browser/child_process_security_policy.h"
#include "content/public/browser/client_certificate_delegate.h"
#include "content/public/browser/render_frame_host.h"
@@ -39,7 +38,6 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/resources/grit/ui_resources.h"
-using content::BrowserThread;
using content::ResourceType;
namespace android_webview {
@@ -53,15 +51,8 @@ public:
explicit AwContentsMessageFilter(int process_id);
// BrowserMessageFilter methods.
- void OverrideThreadForMessage(const IPC::Message& message,
- BrowserThread::ID* thread) override;
bool OnMessageReceived(const IPC::Message& message) override;
- void OnShouldOverrideUrlLoading(int routing_id,
- const base::string16& url,
- bool has_user_gesture,
- bool is_redirect,
- bool* ignore_navigation);
void OnSubFrameCreated(int parent_render_frame_id, int child_render_frame_id);
private:
@@ -80,43 +71,15 @@ AwContentsMessageFilter::AwContentsMessageFilter(int process_id)
AwContentsMessageFilter::~AwContentsMessageFilter() {
}
-void AwContentsMessageFilter::OverrideThreadForMessage(
- const IPC::Message& message, BrowserThread::ID* thread) {
- if (message.type() == AwViewHostMsg_ShouldOverrideUrlLoading::ID) {
- *thread = BrowserThread::UI;
- }
-}
-
bool AwContentsMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(AwContentsMessageFilter, message)
- IPC_MESSAGE_HANDLER(AwViewHostMsg_ShouldOverrideUrlLoading,
- OnShouldOverrideUrlLoading)
IPC_MESSAGE_HANDLER(AwViewHostMsg_SubFrameCreated, OnSubFrameCreated)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
-void AwContentsMessageFilter::OnShouldOverrideUrlLoading(
- int render_frame_id,
- const base::string16& url,
- bool has_user_gesture,
- bool is_redirect,
- bool* ignore_navigation) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- *ignore_navigation = false;
- AwContentsClientBridgeBase* client =
- AwContentsClientBridgeBase::FromID(process_id_, render_frame_id);
- if (client) {
- *ignore_navigation =
- client->ShouldOverrideUrlLoading(url, has_user_gesture, is_redirect);
- } else {
- LOG(WARNING) << "Failed to find the associated render view host for url: "
- << url;
- }
-}
-
void AwContentsMessageFilter::OnSubFrameCreated(int parent_render_frame_id,
int child_render_frame_id) {
AwContentsIoThreadClient::SubFrameCreated(
diff --git a/android_webview/browser/aw_contents_client_bridge_base.h b/android_webview/browser/aw_contents_client_bridge_base.h
index 31c965f..9cd9206 100644
--- a/android_webview/browser/aw_contents_client_bridge_base.h
+++ b/android_webview/browser/aw_contents_client_bridge_base.h
@@ -62,10 +62,6 @@ class AwContentsClientBridgeBase {
const base::string16& message_text,
const content::JavaScriptDialogManager::DialogClosedCallback& callback)
= 0;
-
- virtual bool ShouldOverrideUrlLoading(const base::string16& url,
- bool has_user_gesture,
- bool is_redirect) = 0;
};
} // namespace android_webview
diff --git a/android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc b/android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc
index 02160ce..da8a604 100644
--- a/android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc
+++ b/android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc
@@ -226,15 +226,16 @@ void AwResourceDispatcherHostDelegate::RequestBeginning(
throttles->push_back(new IoThreadClientThrottle(
request_info->GetChildID(), request_info->GetRenderFrameID(), request));
- // We allow intercepting only navigations within main frames. This
- // is used to post onPageStarted. We handle shouldOverrideUrlLoading
- // via a sync IPC.
- if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME) {
+ if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME ||
+ (resource_type == content::RESOURCE_TYPE_SUB_FRAME &&
+ !request->url().SchemeIs(url::kHttpScheme) &&
+ !request->url().SchemeIs(url::kHttpsScheme) &&
+ !request->url().SchemeIs(url::kAboutScheme))) {
throttles->push_back(InterceptNavigationDelegate::CreateThrottleFor(
request));
- } else {
- InterceptNavigationDelegate::UpdateUserGestureCarryoverInfo(request);
}
+ if (resource_type != content::RESOURCE_TYPE_MAIN_FRAME)
+ InterceptNavigationDelegate::UpdateUserGestureCarryoverInfo(request);
}
void AwResourceDispatcherHostDelegate::OnRequestRedirected(
diff --git a/android_webview/common/render_view_messages.h b/android_webview/common/render_view_messages.h
index b5ca58c..2e0211b 100644
--- a/android_webview/common/render_view_messages.h
+++ b/android_webview/common/render_view_messages.h
@@ -98,19 +98,6 @@ IPC_MESSAGE_ROUTED1(AwViewHostMsg_PageScaleFactorChanged,
IPC_MESSAGE_ROUTED1(AwViewHostMsg_OnContentsSizeChanged,
gfx::Size /* contents_size */)
-// Sent immediately before a top level navigation is initiated within Blink.
-// There are some exlusions, the most important ones are it is not sent
-// when creating a popup window, and not sent for application initiated
-// navigations. See AwContentRendererClient::HandleNavigation for all
-// cornercases. This is sent before updating the NavigationController state
-// or creating a URLRequest for the main frame resource.
-IPC_SYNC_MESSAGE_CONTROL4_1(AwViewHostMsg_ShouldOverrideUrlLoading,
- int /* render_frame_id id */,
- base::string16 /* in - url */,
- bool /* in - has_user_gesture */,
- bool /* in - is_redirect */,
- bool /* out - result */)
-
// Sent when a subframe is created.
IPC_MESSAGE_CONTROL2(AwViewHostMsg_SubFrameCreated,
int /* parent_render_frame_id */,
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index 76a9cc8..20cebab 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -477,26 +477,41 @@ public class AwContents implements SmartClipProvider,
@Override
public boolean shouldIgnoreNavigation(NavigationParams navigationParams) {
final String url = navigationParams.url;
+
+ final int transitionType = navigationParams.pageTransitionType;
+ final boolean isLoadUrl = (transitionType & PageTransition.FROM_API) != 0;
+ final boolean isBackForward = (transitionType & PageTransition.FORWARD_BACK) != 0;
+ final boolean isReload =
+ (transitionType & PageTransition.CORE_MASK) == PageTransition.RELOAD;
+ final boolean isRedirect = navigationParams.isRedirect;
+
boolean ignoreNavigation = false;
- if (mDeferredShouldOverrideUrlLoadingIsPendingForPopup) {
- mDeferredShouldOverrideUrlLoadingIsPendingForPopup = false;
- // If this is used for all navigations in future, cases for application initiated
- // load, redirect and backforward should also be filtered out.
- if (!navigationParams.isPost) {
- if (!mContentsClient.hasWebViewClient()) {
- ignoreNavigation = AwContentsClient.sendBrowsingIntent(mContext, url,
- navigationParams.hasUserGesture
- || navigationParams.hasUserGestureCarryover,
- navigationParams.isRedirect);
- } else {
- ignoreNavigation = mContentsClient.shouldOverrideUrlLoading(url);
- }
+ // Any navigation from loadUrl, goBack/Forward, or reload, are considered application
+ // initiated and hence will not yield a shouldOverrideUrlLoading() callback.
+ if ((!isLoadUrl || isRedirect) && !isBackForward && !navigationParams.isPost) {
+ if (!mContentsClient.hasWebViewClient()) {
+ ignoreNavigation = AwContentsClient.sendBrowsingIntent(mContext, url,
+ navigationParams.hasUserGesture
+ || navigationParams.hasUserGestureCarryover,
+ navigationParams.isRedirect);
+ } else {
+ ignoreNavigation = mContentsClient.shouldOverrideUrlLoading(url);
}
}
+
// The shouldOverrideUrlLoading call might have resulted in posting messages to the
// UI thread. Using sendMessage here (instead of calling onPageStarted directly)
// will allow those to run in order.
- if (!ignoreNavigation) {
+ if (isRedirect) {
+ mContentsClient.getCallbackHelper().postOnPageStarted(url);
+ // We can post onPageFinished here since we know that the navigation will fail.
+ // Also AwWebContentsObserver.didFail does not call OnPageFinished when the
+ // navigation is overridden because we don't want an onPageFinished for such a
+ // navigation unless it is a redirect.
+ if (ignoreNavigation) {
+ mContentsClient.getCallbackHelper().postOnPageFinished(url);
+ }
+ } else if (!ignoreNavigation) {
mContentsClient.getCallbackHelper().postOnPageStarted(url);
}
return ignoreNavigation;
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java b/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
index 712c801..f86e54b 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
@@ -259,16 +259,6 @@ public class AwContentsClientBridge {
mClient.handleJsBeforeUnload(url, message, handler);
}
- @CalledByNative
- private boolean shouldOverrideUrlLoading(String url, boolean hasUserGesture,
- boolean isRedirect) {
- if (mClient.hasWebViewClient()) {
- return mClient.shouldOverrideUrlLoading(url);
- } else {
- return AwContentsClient.sendBrowsingIntent(mContext, url, hasUserGesture, isRedirect);
- }
- }
-
void confirmJsResult(int id, String prompt) {
if (mNativeContentsClientBridge == 0) return;
nativeConfirmJsResult(mNativeContentsClientBridge, id, prompt);
diff --git a/android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java b/android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java
index 85cf90c..53715c6 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java
@@ -53,9 +53,13 @@ public class AwWebContentsObserver extends WebContentsObserver {
String unreachableWebDataUrl = AwContentsStatics.getUnreachableWebDataUrl();
boolean isErrorUrl =
unreachableWebDataUrl != null && unreachableWebDataUrl.equals(failingUrl);
- if (isMainFrame && !isErrorUrl && errorCode == NetError.ERR_ABORTED) {
+ if (isMainFrame && !isErrorUrl && errorCode == NetError.ERR_ABORTED
+ && !wasIgnoredByHandler) {
// Need to call onPageFinished for backwards compatibility with the classic webview.
// See also AwContents.IoThreadClientImpl.onReceivedError.
+ // If the navigation was ignored because of shouldOverrideUrlLoading we have already
+ // called onPageFinished in
+ // AwContents.InterceptNavigationDelegateImpl.shouldIgnoreNavigation instead.
client.getCallbackHelper().postOnPageFinished(failingUrl);
}
}
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java
index 2c90a20..64840fb 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java
@@ -11,6 +11,7 @@ import android.util.Pair;
import org.chromium.android_webview.AwContents;
import org.chromium.android_webview.test.util.CommonResources;
import org.chromium.android_webview.test.util.JSUtils;
+import org.chromium.android_webview.test.util.JavascriptEventObserver;
import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.Feature;
@@ -26,6 +27,7 @@ import org.chromium.net.test.util.TestWebServer;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
/**
@@ -1020,4 +1022,92 @@ public class AwContentsClientShouldOverrideUrlLoadingTest extends AwTestBase {
getActivity().setIgnoreStartActivity(false);
}
}
+
+ @SmallTest
+ @Feature({"AndroidWebView"})
+ public void testXhrInLink() throws Throwable {
+ final TestAwContentsClient contentsClient = new TestAwContentsClient();
+ final AwTestContainerView testContainerView =
+ createAwTestContainerViewOnMainSync(contentsClient);
+ final AwContents awContents = testContainerView.getAwContents();
+ TestAwContentsClient.ShouldOverrideUrlLoadingHelper shouldOverrideUrlLoadingHelper =
+ contentsClient.getShouldOverrideUrlLoadingHelper();
+
+ final CountDownLatch shouldOverrideUrlLoadingSignal = new CountDownLatch(1);
+
+ final String xhrPath = "/xhrPath.html";
+ final String xhrUrl = mWebServer.setResponseWithRunnableAction(
+ xhrPath, CommonResources.makeHtmlPageFrom("", ""), null, new Runnable() {
+ @Override
+ public void run() {
+ try {
+ shouldOverrideUrlLoadingSignal.await();
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+
+ final String xhrJs = "function xhrFunction() {"
+ + " var xhr = new XMLHttpRequest();"
+ + " xhr.onload=function() {"
+ + " console.info('xhr loaded');"
+ + " window.jsInterface.setValue(true);"
+ + " };"
+ + " xhr.onerror=function() {"
+ + " console.info('xhr failed, status ' + xhr.status);"
+ + " window.jsInterface.setValue(false);"
+ + " };"
+ + " xhr.open('GET', '" + xhrUrl + "', true);"
+ + " xhr.send();"
+ + "};";
+
+ String pageWithXhrLink = makeHtmlPageFrom(
+ "<script>" + xhrJs + "</script>",
+ "<img onclick=\"xhrFunction(); location.href='"
+ + "thiswillbe://intercepted/"
+ + "'\" class=\"big\" id=\"link\" />");
+
+ final String startPath = "/startPath.html";
+ final String startUrl = addPageToTestServer(mWebServer, startPath, pageWithXhrLink);
+
+ enableJavaScriptOnUiThread(awContents);
+ final BooleanValueJavascriptObserver jsInterface = new BooleanValueJavascriptObserver();
+
+ // add javascript interface
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ jsInterface.register(awContents.getContentViewCore(), "jsInterface");
+ }
+ });
+
+ loadUrlSync(awContents, contentsClient.getOnPageFinishedHelper(), startUrl);
+
+ setShouldOverrideUrlLoadingReturnValueOnUiThread(shouldOverrideUrlLoadingHelper, true);
+ final int shouldOverrideUrlLoadingCallCount = shouldOverrideUrlLoadingHelper.getCallCount();
+
+ clickOnLinkUsingJs(awContents, contentsClient);
+
+ // Make the server xhr response wait until the navigation request is intercepted.
+ shouldOverrideUrlLoadingHelper.waitForCallback(shouldOverrideUrlLoadingCallCount);
+ shouldOverrideUrlLoadingSignal.countDown();
+
+ jsInterface.waitForEvent(WAIT_TIMEOUT_MS);
+ assertTrue(jsInterface.getValue());
+ assertEquals(1, mWebServer.getRequestCount(xhrPath));
+ }
+
+ private static class BooleanValueJavascriptObserver extends JavascriptEventObserver {
+ private boolean mValue = false;
+
+ public void setValue(boolean value) {
+ mValue = value;
+ notifyJava();
+ }
+
+ public boolean getValue() {
+ return mValue;
+ }
+ }
}
diff --git a/android_webview/native/aw_contents_client_bridge.cc b/android_webview/native/aw_contents_client_bridge.cc
index 2b16fcc..9e570af 100644
--- a/android_webview/native/aw_contents_client_bridge.cc
+++ b/android_webview/native/aw_contents_client_bridge.cc
@@ -340,20 +340,6 @@ void AwContentsClientBridge::RunBeforeUnloadDialog(
env, obj.obj(), jurl.obj(), jmessage.obj(), callback_id);
}
-bool AwContentsClientBridge::ShouldOverrideUrlLoading(
- const base::string16& url, bool has_user_gesture, bool is_redirect) {
- JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
- if (obj.is_null())
- return false;
- ScopedJavaLocalRef<jstring> jurl = ConvertUTF16ToJavaString(env, url);
- devtools_instrumentation::ScopedEmbedderCallbackTask(
- "shouldOverrideUrlLoading");
- return Java_AwContentsClientBridge_shouldOverrideUrlLoading(
- env, obj.obj(),
- jurl.obj(), has_user_gesture, is_redirect);
-}
-
void AwContentsClientBridge::ConfirmJsResult(JNIEnv* env,
jobject,
int id,
diff --git a/android_webview/native/aw_contents_client_bridge.h b/android_webview/native/aw_contents_client_bridge.h
index 0595ba0..74f13e0 100644
--- a/android_webview/native/aw_contents_client_bridge.h
+++ b/android_webview/native/aw_contents_client_bridge.h
@@ -54,9 +54,6 @@ class AwContentsClientBridge : public AwContentsClientBridgeBase {
const base::string16& message_text,
const content::JavaScriptDialogManager::DialogClosedCallback& callback)
override;
- bool ShouldOverrideUrlLoading(const base::string16& url,
- bool has_user_gesture,
- bool is_redirect) override;
// Methods called from Java.
void ProceedSslError(JNIEnv* env, jobject obj, jboolean proceed, jint id);
diff --git a/android_webview/renderer/aw_content_renderer_client.cc b/android_webview/renderer/aw_content_renderer_client.cc
index b9c6a3d..79c33cf 100644
--- a/android_webview/renderer/aw_content_renderer_client.cc
+++ b/android_webview/renderer/aw_content_renderer_client.cc
@@ -21,8 +21,6 @@
#include "components/printing/renderer/print_web_view_helper.h"
#include "components/visitedlink/renderer/visitedlink_slave.h"
#include "content/public/common/url_constants.h"
-#include "content/public/renderer/document_state.h"
-#include "content/public/renderer/navigation_state.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_thread.h"
#include "content/public/renderer/render_view.h"
@@ -33,7 +31,6 @@
#include "third_party/WebKit/public/platform/WebURLError.h"
#include "third_party/WebKit/public/platform/WebURLRequest.h"
#include "third_party/WebKit/public/web/WebFrame.h"
-#include "third_party/WebKit/public/web/WebNavigationType.h"
#include "third_party/WebKit/public/web/WebSecurityPolicy.h"
#include "url/gurl.h"
@@ -65,61 +62,6 @@ void AwContentRendererClient::RenderThreadStarted() {
thread->AddObserver(visited_link_slave_.get());
}
-bool AwContentRendererClient::HandleNavigation(
- content::RenderFrame* render_frame,
- content::DocumentState* document_state,
- int opener_id,
- blink::WebFrame* frame,
- const blink::WebURLRequest& request,
- blink::WebNavigationType type,
- blink::WebNavigationPolicy default_policy,
- bool is_redirect) {
-
- // Only GETs can be overridden.
- if (!request.httpMethod().equals("GET"))
- return false;
-
- // Any navigation from loadUrl, and goBack/Forward are considered application-
- // initiated and hence will not yield a shouldOverrideUrlLoading() callback.
- // Webview classic does not consider reload application-initiated so we
- // continue the same behavior.
- // TODO(sgurun) is_content_initiated is normally false for cross-origin
- // navigations but since android_webview does not swap out renderers, this
- // works fine. This will stop working if android_webview starts swapping out
- // renderers on navigation.
- bool application_initiated =
- !document_state->navigation_state()->IsContentInitiated() ||
- type == blink::WebNavigationTypeBackForward;
-
- // Don't offer application-initiated navigations unless it's a redirect.
- if (application_initiated && !is_redirect)
- return false;
-
- const GURL& gurl = request.url();
- // For HTTP schemes, only top-level navigations can be overridden. Similarly,
- // WebView Classic lets app override only top level about:blank navigations.
- // So we filter out non-top about:blank navigations here.
- if (frame->parent() &&
- (gurl.SchemeIs(url::kHttpScheme) || gurl.SchemeIs(url::kHttpsScheme) ||
- gurl.SchemeIs(url::kAboutScheme)))
- return false;
-
- // use NavigationInterception throttle to handle the call as that can
- // be deferred until after the java side has been constructed.
- if (opener_id != MSG_ROUTING_NONE) {
- return false;
- }
-
- bool ignore_navigation = false;
- base::string16 url = request.url().string();
- bool has_user_gesture = request.hasUserGesture();
-
- int render_frame_id = render_frame->GetRoutingID();
- RenderThread::Get()->Send(new AwViewHostMsg_ShouldOverrideUrlLoading(
- render_frame_id, url, has_user_gesture, is_redirect, &ignore_navigation));
- return ignore_navigation;
-}
-
void AwContentRendererClient::RenderFrameCreated(
content::RenderFrame* render_frame) {
new AwContentSettingsClient(render_frame);
diff --git a/android_webview/renderer/aw_content_renderer_client.h b/android_webview/renderer/aw_content_renderer_client.h
index c16b506..ab0c750 100644
--- a/android_webview/renderer/aw_content_renderer_client.h
+++ b/android_webview/renderer/aw_content_renderer_client.h
@@ -37,14 +37,6 @@ class AwContentRendererClient : public content::ContentRendererClient {
bool IsLinkVisited(unsigned long long link_hash) override;
void AddKeySystems(std::vector<media::KeySystemInfo>* key_systems) override;
- bool HandleNavigation(content::RenderFrame* render_frame,
- content::DocumentState* document_state,
- int opener_id,
- blink::WebFrame* frame,
- const blink::WebURLRequest& request,
- blink::WebNavigationType type,
- blink::WebNavigationPolicy default_policy,
- bool is_redirect) override;
bool ShouldOverridePageVisibilityState(
const content::RenderFrame* render_frame,
blink::WebPageVisibilityState* override_state) override;
diff --git a/content/public/renderer/content_renderer_client.cc b/content/public/renderer/content_renderer_client.cc
index 7c6957b..95af2f7 100644
--- a/content/public/renderer/content_renderer_client.cc
+++ b/content/public/renderer/content_renderer_client.cc
@@ -101,20 +101,6 @@ bool ContentRendererClient::AllowPopup() {
return false;
}
-#ifdef OS_ANDROID
-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;
-}
-#endif
-
bool ContentRendererClient::ShouldFork(blink::WebLocalFrame* frame,
const GURL& url,
const std::string& http_method,
diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h
index 2a0517a..ebb7f44 100644
--- a/content/public/renderer/content_renderer_client.h
+++ b/content/public/renderer/content_renderer_client.h
@@ -16,8 +16,6 @@
#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"
@@ -198,23 +196,6 @@ class CONTENT_EXPORT ContentRendererClient {
// Returns true if a popup window should be allowed.
virtual bool AllowPopup();
-#ifdef OS_ANDROID
- // TODO(sgurun) This callback is deprecated and will be removed as soon
- // as android webview completes implementation of a resource throttle based
- // shouldoverrideurl implementation. See crbug.com/325351
- //
- // 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);
-#endif
-
// 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 a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 0635ae1..a47052d 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -4182,23 +4182,6 @@ void RenderFrameImpl::OnFailedNavigation(
WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
RenderFrame* render_frame,
const NavigationPolicyInfo& info) {
-#ifdef OS_ANDROID
- // The handlenavigation API is deprecated and will be removed once
- // crbug.com/325351 is resolved.
- 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;
- }
-#endif
-
Referrer referrer(RenderViewImpl::GetReferrerFromRequest(info.frame,
info.urlRequest));
const base::CommandLine& command_line =