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 11bd7d21f5fbdc5314e41d475deb4e8066d9b850..782d5cc57d589a1b25a4f19cb73fb54a8cf96ac3 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 |
@@ -111,4 +111,46 @@ public class ClientOnPageFinishedTest extends AwTestBase { |
if (webServer != null) webServer.shutdown(); |
} |
} |
+ |
+ @MediumTest |
+ @Feature({"AndroidWebView"}) |
+ public void testOnPageFinishedNotCalledForHistoryApi() throws Throwable { |
+ TestCallbackHelperContainer.OnPageFinishedHelper onPageFinishedHelper = |
+ mContentsClient.getOnPageFinishedHelper(); |
+ enableJavaScriptOnUiThread(mAwContents); |
+ |
+ TestWebServer webServer = null; |
+ try { |
+ webServer = new TestWebServer(false); |
+ |
+ final String testHtml = "<html><head>Header</head><body>Body</body></html>"; |
+ final String testPath = "/test.html"; |
+ final String historyPath = "/history.html"; |
+ final String syncPath = "/sync.html"; |
+ |
+ final String testUrl = webServer.setResponse(testPath, testHtml, null); |
+ final String historyUrl = webServer.getResponseUrl(historyPath); |
+ final String syncUrl = webServer.setResponse(syncPath, testHtml, null); |
+ |
+ assertEquals(0, onPageFinishedHelper.getCallCount()); |
+ loadUrlSync(mAwContents, onPageFinishedHelper, testUrl); |
+ |
+ executeJavaScriptAndWaitForResult(mAwContents, mContentsClient, |
+ "history.pushState(null, null, '" + historyUrl + "');"); |
+ |
+ // 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 the previous load did not schedule |
+ // a callback for the iframe. |
joth
2013/11/15 22:28:51
smart! we could probably apply that pattern other
|
+ final int synchronizationPageCallCount = onPageFinishedHelper.getCallCount(); |
+ loadUrlAsync(mAwContents, syncUrl); |
+ |
+ onPageFinishedHelper.waitForCallback(synchronizationPageCallCount); |
+ assertEquals(syncUrl, onPageFinishedHelper.getUrl()); |
+ assertEquals(2, onPageFinishedHelper.getCallCount()); |
+ |
+ } finally { |
+ if (webServer != null) webServer.shutdown(); |
+ } |
+ } |
} |