summaryrefslogtreecommitdiffstats
path: root/android_webview/java
diff options
context:
space:
mode:
authorjoth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-04 23:23:21 +0000
committerjoth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-04 23:23:21 +0000
commit8933c79756be35423a11ac3b405e173dbb3f6b5c (patch)
tree9482dcfad9718419b7a7228dd131e2ef83b1b429 /android_webview/java
parent460fff7d4363a9eb8f0f19fc98324c6bdd1656b5 (diff)
downloadchromium_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.java20
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.