diff options
author | joth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-04 23:23:21 +0000 |
---|---|---|
committer | joth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-04 23:23:21 +0000 |
commit | 8933c79756be35423a11ac3b405e173dbb3f6b5c (patch) | |
tree | 9482dcfad9718419b7a7228dd131e2ef83b1b429 /android_webview/java | |
parent | 460fff7d4363a9eb8f0f19fc98324c6bdd1656b5 (diff) | |
download | chromium_src-8933c79756be35423a11ac3b405e173dbb3f6b5c.zip chromium_src-8933c79756be35423a11ac3b405e173dbb3f6b5c.tar.gz chromium_src-8933c79756be35423a11ac3b405e173dbb3f6b5c.tar.bz2 |
Use page transition types to detect API initiated navs
This is more reliable than stashing the last navigated URL for
char-by-char comparison, and specifically deals with the case of a
second javascript: navigation racing in before the prior real navigation
has been processed.
BUG=b/9681730
Review URL: https://chromiumcodereview.appspot.com/18147012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@210238 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview/java')
-rw-r--r-- | android_webview/java/src/org/chromium/android_webview/AwContents.java | 20 |
1 files changed, 19 insertions, 1 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 5f6894c..d56c24f 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java @@ -245,8 +245,24 @@ public class AwContents { @Override public boolean shouldIgnoreNavigation(NavigationParams navigationParams) { final String url = navigationParams.url; + final int transitionType = navigationParams.pageTransitionType; + final boolean isLoadUrl = + (transitionType & PageTransitionTypes.PAGE_TRANSITION_FROM_API) != 0; + final boolean isBackForward = + (transitionType & PageTransitionTypes.PAGE_TRANSITION_FORWARD_BACK) != 0; + final boolean isReload = + (transitionType & PageTransitionTypes.PAGE_TRANSITION_CORE_MASK) == + PageTransitionTypes.PAGE_TRANSITION_RELOAD; + final boolean isRedirect = navigationParams.isRedirect; + boolean ignoreNavigation = false; - if (mLastLoadUrlAddress != null && mLastLoadUrlAddress.equals(url)) { + + // Any navigation from loadUrl, goBack/Forward, or reload, are considered application + // initiated and hence will not yield a shouldOverrideUrlLoading() callback. + // TODO(joth): Using PageTransitionTypes should be sufficient to determine all app + // initiated navigations, and so mLastLoadUrlAddress should be removed. + if ((isLoadUrl && !isRedirect) || isBackForward || isReload || + mLastLoadUrlAddress != null && mLastLoadUrlAddress.equals(url)) { // Support the case where the user clicks on a link that takes them back to the // same page. mLastLoadUrlAddress = null; @@ -681,6 +697,8 @@ public class AwContents { params.getTransitionType() == PageTransitionTypes.PAGE_TRANSITION_LINK) { params.setTransitionType(PageTransitionTypes.PAGE_TRANSITION_RELOAD); } + params.setTransitionType( + params.getTransitionType() | PageTransitionTypes.PAGE_TRANSITION_FROM_API); // For WebView, always use the user agent override, which is set // every time the user agent in AwSettings is modified. |