| 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 f600470c5bf1e7e959072320d79bec518f21a947..2652e851f68aae0d218a00701897def44f971db2 100644
|
| --- a/android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java
|
| +++ b/android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java
|
| @@ -23,14 +23,14 @@ public class AwWebContentsObserver extends WebContentsObserver {
|
| // reference to an AwWebContentsObserver instance. This is not intentional,
|
| // and should be found and cleaned up.
|
| private final WeakReference<AwContents> mAwContents;
|
| - private final AwContentsClient mAwContentsClient;
|
| + private final WeakReference<AwContentsClient> mAwContentsClient;
|
| private boolean mStartedNonApiProvisionalLoadInMainFrame = false;
|
|
|
| public AwWebContentsObserver(
|
| WebContents webContents, AwContents awContents, AwContentsClient awContentsClient) {
|
| super(webContents);
|
| - mAwContents = new WeakReference<AwContents>(awContents);
|
| - mAwContentsClient = awContentsClient;
|
| + mAwContents = new WeakReference<>(awContents);
|
| + mAwContentsClient = new WeakReference<>(awContentsClient);
|
| }
|
|
|
| boolean hasStartedNonApiProvisionalLoadInMainFrame() {
|
| @@ -39,24 +39,28 @@ public class AwWebContentsObserver extends WebContentsObserver {
|
|
|
| @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) {
|
| - mAwContentsClient.onPageFinished(validatedUrl);
|
| + client.onPageFinished(validatedUrl);
|
| }
|
| }
|
|
|
| @Override
|
| public void didFailLoad(boolean isProvisionalLoad,
|
| boolean isMainFrame, int errorCode, String description, String failingUrl) {
|
| + AwContentsClient client = mAwContentsClient.get();
|
| + if (client == null) return;
|
| String unreachableWebDataUrl = AwContentsStatics.getUnreachableWebDataUrl();
|
| boolean isErrorUrl =
|
| unreachableWebDataUrl != null && unreachableWebDataUrl.equals(failingUrl);
|
| if (isMainFrame && !isErrorUrl && errorCode == NetError.ERR_ABORTED) {
|
| // Need to call onPageFinished for backwards compatibility with the classic webview.
|
| // See also AwContents.IoThreadClientImpl.onReceivedError.
|
| - mAwContentsClient.onPageFinished(failingUrl);
|
| + client.onPageFinished(failingUrl);
|
| }
|
| }
|
|
|
| @@ -74,23 +78,30 @@ public class AwWebContentsObserver extends WebContentsObserver {
|
| awContents.insertVisualStateCallback(0, new VisualStateCallback() {
|
| @Override
|
| public void onComplete(long requestId) {
|
| - mAwContentsClient.onPageCommitVisible(url);
|
| + AwContentsClient client = mAwContentsClient.get();
|
| + if (client == null) return;
|
| + client.onPageCommitVisible(url);
|
| }
|
| });
|
| }
|
| }
|
| });
|
| }
|
| +
|
| // This is here to emulate the Classic WebView firing onPageFinished for main frame
|
| // navigations where only the hash fragment changes.
|
| if (isFragmentNavigation) {
|
| - mAwContentsClient.onPageFinished(url);
|
| + AwContentsClient client = mAwContentsClient.get();
|
| + if (client == null) return;
|
| + client.onPageFinished(url);
|
| }
|
| }
|
|
|
| @Override
|
| public void didNavigateAnyFrame(String url, String baseUrl, boolean isReload) {
|
| - mAwContentsClient.doUpdateVisitedHistory(url, isReload);
|
| + final AwContentsClient client = mAwContentsClient.get();
|
| + if (client == null) return;
|
| + client.doUpdateVisitedHistory(url, isReload);
|
| }
|
|
|
| @Override
|
|
|