Index: android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java |
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java |
index 6bd5df1dc568b46dec200db67e7a1c7bc94ebf85..1293c8fb3cfdebd92f01e5fb83cd97e025bf8902 100644 |
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java |
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java |
@@ -10,8 +10,10 @@ import android.util.Pair; |
import org.chromium.android_webview.AwContents; |
import org.chromium.android_webview.test.util.CommonResources; |
import org.chromium.android_webview.test.util.JSUtils; |
+import org.chromium.android_webview.test.util.JavascriptEventObserver; |
import org.chromium.base.test.util.Feature; |
import org.chromium.content.browser.LoadUrlParams; |
+import org.chromium.content.browser.NavigationHistory; |
import org.chromium.content.browser.test.util.CallbackHelper; |
import org.chromium.content.browser.test.util.Criteria; |
import org.chromium.content.browser.test.util.CriteriaHelper; |
@@ -862,4 +864,68 @@ public class AwContentsClientShouldOverrideUrlLoadingTest extends AwTestBase { |
assertEquals(0, shouldOverrideUrlLoadingHelper.getCallCount()); |
} |
+ |
+ private static class BooleanJavascriptEventObserver extends JavascriptEventObserver { |
+ private boolean value; |
+ |
+ public boolean getValue() throws InterruptedException { |
+ waitForEvent(); |
+ return value; |
+ } |
+ |
+ public void notifyJavaWithValue(boolean value) { |
+ this.value = value; |
+ notifyJava(); |
+ } |
+ } |
+ |
+ @SmallTest |
+ @Feature({"AndroidWebView", "Navigation"}) |
+ public void testInterceptedNavigationDoesNotCancelXHR() throws Throwable { |
+ final BooleanJavascriptEventObserver observer = new BooleanJavascriptEventObserver(); |
+ final String xhrPath = "/xhr.html"; |
+ final String xhrUrl = addPageToTestServer(mWebServer, xhrPath, CommonResources.ABOUT_HTML); |
+ final String testJs = "<script type=\"text/javascript\">" + |
+ "function test() {" + |
+ " var xhr = new XMLHttpRequest();" + |
+ " xhr.onload = function() {" + |
+ " console.log('load');" + |
+ " javaObserver.notifyJavaWithValue(true); " + |
+ " };" + |
+ " xhr.onerror = function() {" + |
+ " console.log('error');" + |
+ " javaObserver.notifyJavaWithValue(false); " + |
+ " };" + |
+ " xhr.open('GET', '" + xhrUrl + "', true);" + |
+ " xhr.send(); "+ |
+ " window.location = 'intercept://me/';" + |
+ " console.log('sent');" + |
+ "} " + |
+ "test(); " + |
+ "</script>"; |
+ |
+ final TestAwContentsClient contentsClient = new TestAwContentsClient(); |
+ TestAwContentsClient.ShouldOverrideUrlLoadingHelper shouldOverrideUrlLoadingHelper = |
+ contentsClient.getShouldOverrideUrlLoadingHelper(); |
+ OnPageStartedHelper onPageStartedHelper = contentsClient.getOnPageStartedHelper(); |
+ final AwTestContainerView testContainerView = |
+ createAwTestContainerViewOnMainSync(contentsClient); |
+ final AwContents awContents = testContainerView.getAwContents(); |
+ |
+ enableJavaScriptOnUiThread(awContents); |
+ getInstrumentation().runOnMainSync(new Runnable() { |
+ @Override |
+ public void run() { |
+ observer.register(awContents.getContentViewCore(), "javaObserver"); |
+ } |
+ }); |
+ setShouldOverrideUrlLoadingReturnValueOnUiThread(shouldOverrideUrlLoadingHelper, true); |
+ |
+ final String testUrl = addPageToTestServer(mWebServer, "/test.html", |
+ CommonResources.makeHtmlPageFrom("", "<div> test page </div> " + testJs)); |
+ loadUrlAsync(awContents, testUrl); |
+ |
+ observer.waitForEvent(WAIT_TIMEOUT_SECONDS); |
+ assertTrue(observer.getValue()); |
+ } |
} |