summaryrefslogtreecommitdiff
path: root/android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java
diff options
context:
space:
mode:
authorMikhail Naganov <mnaganov@google.com>2015-03-24 11:47:08 +0000
committerMikhail Naganov <mnaganov@google.com>2015-03-24 11:47:08 +0000
commit520a78add2f25f45f5a30ef087b9a6cb3d130776 (patch)
tree7242a5609f5ba4bc0570fcbbe3fb169cd434e1e3 /android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java
parent1cf285d3a90e0da7d28f7e73651391f212d2a4a8 (diff)
downloadchromium_org-ub-webview-m40-release.tar.gz
Cherry-pick "[Android WebView] Provide user-initiated provisional load detection"webview-m40_r4ub-webview-m40-release
Original CL: https://crrev.com/7a3234c9a19a38726a4a984ff12e2b406423c1d3 Original description: [Android WebView] Provide user-initiated provisional load detection Do not synthesize page loading events on DOM modification, if the provisional load has been started from the API side. It appears that a lot of apps tend to use the following scenario: webView.loadUrl(...); webView.loadUrl('javascript:...'); Which was triggering page loading events to be emitted. This scenario is dubious, as no one guarantees that loading will actually finish prior to executing javascript. But for compatibility reasons we must take it into account and not emit page loading events for "about:blank", as it seems that some apps do unexpected things when they receive it. BUG=458569,469099 Note that this patch also contains bits from this commit required for changes in AwWebContentsObserver to work: https://crrev.com/5668d12d29ab659ad01dc0e0ffdf24f2eb5f187a Bug: 19729876 Change-Id: I12c9610a13a382d725cc9a14fcb9879c92f1f461
Diffstat (limited to 'android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java')
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java25
1 files changed, 20 insertions, 5 deletions
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 cd45eadac2..bf012805bc 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java
@@ -5,23 +5,30 @@
package org.chromium.android_webview;
import org.chromium.content.browser.WebContentsObserver;
+import org.chromium.content_public.browser.NavigationEntry;
import org.chromium.content_public.browser.WebContents;
import org.chromium.net.NetError;
+import org.chromium.ui.base.PageTransition;
+
+import java.lang.ref.WeakReference;
/**
* Routes notifications from WebContents to AwContentsClient and other listeners.
*/
public class AwWebContentsObserver extends WebContentsObserver {
+ private final WeakReference<AwContents> mAwContents;
private final AwContentsClient mAwContentsClient;
- private boolean mHasStartedAnyProvisionalLoad = false;
+ private boolean mStartedNonApiProvisionalLoadInMainFrame = false;
- public AwWebContentsObserver(WebContents webContents, AwContentsClient awContentsClient) {
+ public AwWebContentsObserver(
+ WebContents webContents, AwContents awContents, AwContentsClient awContentsClient) {
super(webContents);
+ mAwContents = new WeakReference<AwContents>(awContents);
mAwContentsClient = awContentsClient;
}
- boolean hasStartedAnyProvisionalLoad() {
- return mHasStartedAnyProvisionalLoad;
+ boolean hasStartedNonApiProvisionalLoadInMainFrame() {
+ return mStartedNonApiProvisionalLoadInMainFrame;
}
@Override
@@ -81,6 +88,14 @@ public class AwWebContentsObserver extends WebContentsObserver {
String validatedUrl,
boolean isErrorPage,
boolean isIframeSrcdoc) {
- mHasStartedAnyProvisionalLoad = true;
+ if (!isMainFrame) return;
+ AwContents awContents = mAwContents.get();
+ if (awContents != null) {
+ NavigationEntry pendingEntry = awContents.getNavigationController().getPendingEntry();
+ if (pendingEntry != null
+ && (pendingEntry.getTransition() & PageTransition.FROM_API) == 0) {
+ mStartedNonApiProvisionalLoadInMainFrame = true;
+ }
+ }
}
}