Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2606)

Unified Diff: android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java

Issue 1432083004: [Android WebView] Fire onPageFinished from WebContentsObserver::didStopLoading (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed AwWebContentsObserverTest#testOnPageFinished Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}
}

Powered by Google App Engine
This is Rietveld 408576698