Chromium Code Reviews| 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..ba7e1c6efb2a0386072695e6bc58e4e5804a4b2d 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,35 @@ 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) { |
| + AwContents awContents = mAwContents.get(); |
| + // For loadDataWithBaseURL 'validatedUrl' is 'baseUrl', but we need 'historyUrl', |
| + // as this is what will then be passed to 'didStopLoading'. |
| + String currentUrl = awContents != null ? awContents.getUrl() : validatedUrl; |
|
gsennton
2015/11/13 02:35:39
Why was this not the case before https://coderevie
mnaganov (inactive)
2015/11/13 17:41:37
Because we were only using 'didFinishLoad' before.
|
| + mLastDidFinishLoadUrl = currentUrl != null ? currentUrl : "about:blank"; |
| + } |
| + } |
| + |
| + @Override |
| + public void didStopLoading(String validatedUrl) { |
| + if (validatedUrl.length() == 0) validatedUrl = "about:blank"; |
|
gsennton
2015/11/13 02:35:39
When does this happen?
mnaganov (inactive)
2015/11/13 17:41:37
When the client does loadUrl("about:blank"). Disco
|
| + AwContentsClient client = getClientIfNeedToFireCallback(validatedUrl); |
| + if (client != null && validatedUrl.equals(mLastDidFinishLoadUrl)) { |
| client.getCallbackHelper().postOnPageFinished(validatedUrl); |
| + mLastDidFinishLoadUrl = null; |
| } |
| } |