diff options
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.java | 25 |
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; + } + } } } |