From a5c8472a374c1c2b2026fa9dbb39235e198768ef Mon Sep 17 00:00:00 2001 From: Andrew Grieve <agrieve@chromium.org> Date: Tue, 4 Feb 2014 00:12:11 -0500 Subject: [PATCH] Ignore multiple onPageFinished() callbacks & onReceivedError due to stopLoading() I believe this happens only when using custom schemes. --- .../src/org/apache/cordova/CordovaWebView.java | 5 +++++ .../org/apache/cordova/CordovaWebViewClient.java | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/framework/src/org/apache/cordova/CordovaWebView.java b/framework/src/org/apache/cordova/CordovaWebView.java index b30ea78c..b0e3d433 100755 --- a/framework/src/org/apache/cordova/CordovaWebView.java +++ b/framework/src/org/apache/cordova/CordovaWebView.java @@ -541,6 +541,11 @@ public class CordovaWebView extends WebView { this.loadUrlIntoView(url); } + @Override + public void stopLoading() { + viewClient.isCurrentlyLoading = false; + super.stopLoading(); + } public void onScrollChanged(int l, int t, int oldl, int oldt) { diff --git a/framework/src/org/apache/cordova/CordovaWebViewClient.java b/framework/src/org/apache/cordova/CordovaWebViewClient.java index e465ffa8..0b7b8003 100755 --- a/framework/src/org/apache/cordova/CordovaWebViewClient.java +++ b/framework/src/org/apache/cordova/CordovaWebViewClient.java @@ -62,6 +62,7 @@ public class CordovaWebViewClient extends WebViewClient { CordovaInterface cordova; CordovaWebView appView; private boolean doClearHistory = false; + private boolean isCurrentlyLoading; /** The authorization tokens. */ private Hashtable<String, AuthenticationToken> authenticationTokens = new Hashtable<String, AuthenticationToken>(); @@ -266,7 +267,9 @@ public class CordovaWebViewClient extends WebViewClient { */ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { - + super.onPageStarted(view, url, favicon); + isCurrentlyLoading = true; + LOG.d(TAG, "onPageStarted(" + url + ")"); // Flush stale messages. this.appView.jsMessageQueue.reset(); @@ -290,6 +293,11 @@ public class CordovaWebViewClient extends WebViewClient { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); + // Ignore excessive calls. + if (!isCurrentlyLoading) { + return; + } + isCurrentlyLoading = false; LOG.d(TAG, "onPageFinished(" + url + ")"); /** @@ -344,6 +352,10 @@ public class CordovaWebViewClient extends WebViewClient { */ @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { + // Ignore error due to stopLoading(). + if (!isCurrentlyLoading) { + return; + } LOG.d(TAG, "CordovaWebViewClient.onReceivedError: Error code=%s Description=%s URL=%s", errorCode, description, failingUrl); // Clear timeout flag