| 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());
|
| + }
|
| }
|
|
|