Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(498)

Unified Diff: android_webview/java/src/org/chromium/android_webview/AwContents.java

Issue 1155713005: Use a resource throttle to implement shouldOverrideUrlLoading. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase and fix qinmin nit Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/java/src/org/chromium/android_webview/AwContents.java
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 76a9cc8ce54d67b7541cfb96b3e60ef6427c4c53..20cebab6bdbaa9aacdfea71d94b6d508e61f88a2 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;

Powered by Google App Engine
This is Rietveld 408576698