Index: android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java |
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 53715c67b5f8c6d520ee8ec445e1054c31c8abbc..1a04af4f66b346b17f83b07fa5634894e7fb9b47 100644 |
--- a/android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java |
+++ b/android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java |
@@ -26,6 +26,9 @@ public class AwWebContentsObserver extends WebContentsObserver { |
// Whether this webcontents has ever committed any navigation. |
private boolean mCommittedNavigation; |
+ // Temporarily stores the URL passed the last time to didFinishLoad callback. |
+ private String mLastDidFinishLoadUrl; |
+ |
public AwWebContentsObserver( |
WebContents webContents, AwContents awContents, AwContentsClient awContentsClient) { |
super(webContents); |
@@ -33,15 +36,31 @@ public class AwWebContentsObserver extends WebContentsObserver { |
mAwContentsClient = new WeakReference<>(awContentsClient); |
} |
+ private AwContentsClient getClientIfNeedToFireCallback(String validatedUrl) { |
+ AwContentsClient client = mAwContentsClient.get(); |
+ if (client != null) { |
+ String unreachableWebDataUrl = AwContentsStatics.getUnreachableWebDataUrl(); |
+ if (unreachableWebDataUrl == null || !unreachableWebDataUrl.equals(validatedUrl)) { |
+ return client; |
+ } |
+ } |
+ return null; |
+ } |
+ |
@Override |
public void didFinishLoad(long frameId, String validatedUrl, boolean isMainFrame) { |
- AwContentsClient client = mAwContentsClient.get(); |
- if (client == null) return; |
- String unreachableWebDataUrl = AwContentsStatics.getUnreachableWebDataUrl(); |
- boolean isErrorUrl = |
- unreachableWebDataUrl != null && unreachableWebDataUrl.equals(validatedUrl); |
- if (isMainFrame && !isErrorUrl) { |
+ if (isMainFrame && getClientIfNeedToFireCallback(validatedUrl) != null) { |
+ mLastDidFinishLoadUrl = validatedUrl; |
+ } |
+ } |
+ |
+ @Override |
+ public void didStopLoading(String validatedUrl) { |
+ if (validatedUrl.length() == 0) validatedUrl = "about:blank"; |
+ AwContentsClient client = getClientIfNeedToFireCallback(validatedUrl); |
+ if (client != null && validatedUrl.equals(mLastDidFinishLoadUrl)) { |
client.getCallbackHelper().postOnPageFinished(validatedUrl); |
+ mLastDidFinishLoadUrl = null; |
} |
} |