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