Index: android_webview/javatests/src/org/chromium/android_webview/test/ClientOnPageFinishedTest.java |
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/ClientOnPageFinishedTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/ClientOnPageFinishedTest.java |
index edb6c7a2d267bb3f9c44592a54c75f5640503c25..d363c5c7751c8fc762267d8f5feb014ec5ae3722 100644 |
--- a/android_webview/javatests/src/org/chromium/android_webview/test/ClientOnPageFinishedTest.java |
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/ClientOnPageFinishedTest.java |
@@ -279,4 +279,84 @@ public class ClientOnPageFinishedTest extends AwTestBase { |
webServer.shutdown(); |
} |
} |
+ |
+ @MediumTest |
+ @Feature({"AndroidWebView"}) |
+ public void testOnPageFinishedNotCalledOnDomModificationForBlankWebView() throws Throwable { |
+ TestWebServer webServer = TestWebServer.start(); |
+ try { |
+ doTestOnPageFinishedNotCalledOnDomMutation(webServer); |
+ } finally { |
+ webServer.shutdown(); |
+ } |
+ } |
+ |
+ @MediumTest |
+ @Feature({"AndroidWebView"}) |
+ public void testOnPageFinishedCalledOnDomModificationAfterNonCommittedLoad() throws Throwable { |
+ enableJavaScriptOnUiThread(mAwContents); |
+ TestWebServer webServer = TestWebServer.start(); |
+ try { |
+ final String noContentUrl = webServer.setResponseWithNoContentStatus("/nocontent.html"); |
+ TestCallbackHelperContainer.OnPageFinishedHelper onPageFinishedHelper = |
+ mContentsClient.getOnPageFinishedHelper(); |
+ final int onPageFinishedCallCount = onPageFinishedHelper.getCallCount(); |
+ loadUrlAsync(mAwContents, noContentUrl); |
+ // Mutate DOM. |
+ executeJavaScriptAndWaitForResult(mAwContents, mContentsClient, |
+ "document.body.innerHTML='Hello, World!'"); |
+ onPageFinishedHelper.waitForCallback(onPageFinishedCallCount); |
+ assertEquals("about:blank", onPageFinishedHelper.getUrl()); |
+ } finally { |
+ webServer.shutdown(); |
+ } |
+ } |
+ |
+ @MediumTest |
+ @Feature({"AndroidWebView"}) |
+ public void testOnPageFinishedNotCalledOnDomModificationAfterLoadUrl() throws Throwable { |
+ TestWebServer webServer = TestWebServer.start(); |
+ try { |
+ final String testUrl = |
+ webServer.setResponse("/test.html", CommonResources.ABOUT_HTML, null); |
+ loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), testUrl); |
+ doTestOnPageFinishedNotCalledOnDomMutation(webServer); |
+ } finally { |
+ webServer.shutdown(); |
+ } |
+ } |
+ |
+ @MediumTest |
+ @Feature({"AndroidWebView"}) |
+ public void testOnPageFinishedNotCalledOnDomModificationAfterLoadData() |
+ throws Throwable { |
+ TestWebServer webServer = TestWebServer.start(); |
+ try { |
+ loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), |
+ CommonResources.ABOUT_HTML, "text/html", false); |
+ doTestOnPageFinishedNotCalledOnDomMutation(webServer); |
+ } finally { |
+ webServer.shutdown(); |
+ } |
+ } |
+ |
+ private void doTestOnPageFinishedNotCalledOnDomMutation(TestWebServer webServer) |
+ throws Throwable { |
+ enableJavaScriptOnUiThread(mAwContents); |
+ TestCallbackHelperContainer.OnPageFinishedHelper onPageFinishedHelper = |
+ mContentsClient.getOnPageFinishedHelper(); |
+ final int onPageFinishedCallCount = onPageFinishedHelper.getCallCount(); |
+ // Mutate DOM. |
+ executeJavaScriptAndWaitForResult(mAwContents, mContentsClient, |
+ "document.body.innerHTML='Hello, World!'"); |
+ // Rather than wait a fixed time to see that an onPageFinished callback isn't issued |
+ // we load another valid page. Since callbacks arrive sequentially if the next callback |
+ // we get is for the synchronizationUrl we know that DOM mutation did not schedule |
+ // a callback for the iframe. |
+ final String syncUrl = webServer.setResponse("/sync.html", "", null); |
+ loadUrlAsync(mAwContents, syncUrl); |
+ onPageFinishedHelper.waitForCallback(onPageFinishedCallCount); |
+ assertEquals(syncUrl, onPageFinishedHelper.getUrl()); |
+ assertEquals(onPageFinishedCallCount + 1, onPageFinishedHelper.getCallCount()); |
+ } |
} |