summaryrefslogtreecommitdiffstats
path: root/android_webview/java/src/org
diff options
context:
space:
mode:
authorgsennton <gsennton@chromium.org>2015-11-09 16:49:43 -0800
committerCommit bot <commit-bot@chromium.org>2015-11-10 00:50:43 +0000
commitbae3ff13e6959b713b872df3c4a734d6a1ea01ad (patch)
tree0a5d1c77e8f45253e9cb69efe568b349b58db888 /android_webview/java/src/org
parent839f73c696d017638d755ddb2fec18ee839e06ea (diff)
downloadchromium_src-bae3ff13e6959b713b872df3c4a734d6a1ea01ad.zip
chromium_src-bae3ff13e6959b713b872df3c4a734d6a1ea01ad.tar.gz
chromium_src-bae3ff13e6959b713b872df3c4a734d6a1ea01ad.tar.bz2
Reland "Use resource throttle to implement shouldOverrideUrlLoading, core change"
Now that https://codereview.chromium.org/1381003004/ has landed we can reland this patch since we now receive a didFinishLoad callback when the current navigation finishes even in the case where a new navigation has reached a provisional state. This reverts commit e5c3091df04749b232359b6ef22938006af840d5. TBR=palmer@chromium.org,jam@chromium.org BUG=325351 Review URL: https://codereview.chromium.org/1424263003 Cr-Commit-Position: refs/heads/master@{#358719}
Diffstat (limited to 'android_webview/java/src/org')
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java44
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java7
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java6
3 files changed, 32 insertions, 25 deletions
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 18735e6..75a8dcfc 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -291,10 +291,6 @@ public class AwContents implements SmartClipProvider,
private PostMessageSender mPostMessageSender;
- // This flag indicates that ShouldOverrideUrlNavigation should be posted
- // through the resourcethrottle. This is only used for popup windows.
- private boolean mDeferredShouldOverrideUrlLoadingIsPendingForPopup;
-
// This is a workaround for some qualcomm devices discarding buffer on
// Activity restore.
private boolean mInvalidateRootViewOnNextDraw;
@@ -504,23 +500,38 @@ 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) {
- ignoreNavigation = mContentsClient.shouldIgnoreNavigation(
- mContext, url, navigationParams.isMainFrame,
- navigationParams.hasUserGesture
- || navigationParams.hasUserGestureCarryover,
- navigationParams.isRedirect);
- }
+ // Any navigation from loadUrl, goBack/Forward, or reload, are considered application
+ // initiated and hence will not yield a shouldOverrideUrlLoading() callback.
+ if ((!isLoadUrl || isRedirect) && !isBackForward && !isReload
+ && !navigationParams.isPost) {
+ ignoreNavigation = mContentsClient.shouldIgnoreNavigation(mContext, url,
+ navigationParams.isMainFrame,
+ navigationParams.hasUserGesture || navigationParams.hasUserGestureCarryover,
+ navigationParams.isRedirect);
}
+
// 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;
@@ -1015,7 +1026,6 @@ public class AwContents implements SmartClipProvider,
// Recap: supplyContentsForPopup() is called on the parent window's content, this method is
// called on the popup window's content.
private void receivePopupContents(long popupNativeAwContents) {
- mDeferredShouldOverrideUrlLoadingIsPendingForPopup = true;
// Save existing view state.
final boolean wasAttached = mIsAttachedToWindow;
final boolean wasViewVisible = mIsViewVisible;
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 5f34edc..c1b03a1 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
@@ -259,13 +259,6 @@ public class AwContentsClientBridge {
mClient.handleJsBeforeUnload(url, message, handler);
}
- @CalledByNative
- private boolean shouldOverrideUrlLoading(
- String url, boolean hasUserGesture, boolean isRedirect, boolean isMainFrame) {
- return mClient.shouldIgnoreNavigation(
- mContext, url, isMainFrame, 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);
}
}