| Index: android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java
|
| diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java
|
| index 504a19fcf8ff303c7596c80a9c1845a5dd96f9ec..9f8f62980fc245bcefcdcf0f79b92e011292dd17 100644
|
| --- a/android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java
|
| +++ b/android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java
|
| @@ -332,4 +332,84 @@ public class LoadUrlTest extends AwTestBase {
|
| webServer.shutdown();
|
| }
|
| }
|
| +
|
| + private static class OnReceivedTitleClient extends TestAwContentsClient {
|
| + void setOnReceivedTitleCallback(Runnable onReceivedTitleCallback) {
|
| + mOnReceivedTitleCallback = onReceivedTitleCallback;
|
| + }
|
| + @Override
|
| + public void onReceivedTitle(String title) {
|
| + super.onReceivedTitle(title);
|
| + mOnReceivedTitleCallback.run();
|
| + }
|
| + private Runnable mOnReceivedTitleCallback;
|
| + }
|
| +
|
| + // See crbug.com/494929. Need to make sure that loading a javascript: URL
|
| + // from inside onReceivedTitle works.
|
| + @SmallTest
|
| + @Feature({"AndroidWebView"})
|
| + public void testLoadUrlFromOnReceivedTitle() throws Throwable {
|
| + final OnReceivedTitleClient contentsClient = new OnReceivedTitleClient();
|
| + final AwTestContainerView testContainerView =
|
| + createAwTestContainerViewOnMainSync(contentsClient);
|
| + final AwContents awContents = testContainerView.getAwContents();
|
| + final AwSettings settings = getAwSettingsOnUiThread(awContents);
|
| + settings.setJavaScriptEnabled(true);
|
| +
|
| + contentsClient.setOnReceivedTitleCallback(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + awContents.loadUrl("javascript:testProperty=42;void(0);");
|
| + }
|
| + });
|
| +
|
| + TestWebServer webServer = TestWebServer.start();
|
| + try {
|
| + // We need to have a navigation entry, but with an empty title. Note that
|
| + // trying to load a page with no title makes the received title to be
|
| + // the URL of the page so instead we use a "204 No Content" response.
|
| + final String url = webServer.setResponseWithNoContentStatus("/page.html");
|
| + loadUrlSync(awContents, contentsClient.getOnPageFinishedHelper(), url);
|
| + TestAwContentsClient.OnReceivedTitleHelper onReceivedTitleHelper =
|
| + contentsClient.getOnReceivedTitleHelper();
|
| + final String pageTitle = "Hello, World!";
|
| + int onReceivedTitleCallCount = onReceivedTitleHelper.getCallCount();
|
| + loadUrlAsync(awContents, "javascript:document.title=\"" + pageTitle + "\";void(0);");
|
| + onReceivedTitleHelper.waitForCallback(onReceivedTitleCallCount);
|
| + assertEquals(pageTitle, onReceivedTitleHelper.getTitle());
|
| + } finally {
|
| + webServer.shutdown();
|
| + }
|
| + }
|
| +
|
| + public void testOnReceivedTitleForUnchangingTitle() throws Throwable {
|
| + final TestAwContentsClient contentsClient = new TestAwContentsClient();
|
| + final AwTestContainerView testContainerView =
|
| + createAwTestContainerViewOnMainSync(contentsClient);
|
| + final AwContents awContents = testContainerView.getAwContents();
|
| +
|
| + TestWebServer webServer = TestWebServer.start();
|
| + try {
|
| + final String title = "Title";
|
| + final String url1 = webServer.setResponse("/page1.html",
|
| + "<html><head><title>" + title + "</title></head>Page 1</html>", null);
|
| + final String url2 = webServer.setResponse("/page2.html",
|
| + "<html><head><title>" + title + "</title></head>Page 2</html>", null);
|
| + TestAwContentsClient.OnReceivedTitleHelper onReceivedTitleHelper =
|
| + contentsClient.getOnReceivedTitleHelper();
|
| + int onReceivedTitleCallCount = onReceivedTitleHelper.getCallCount();
|
| + loadUrlSync(awContents, contentsClient.getOnPageFinishedHelper(), url1);
|
| + onReceivedTitleHelper.waitForCallback(onReceivedTitleCallCount);
|
| + assertEquals(title, onReceivedTitleHelper.getTitle());
|
| + // Verify that even if we load another page with the same title,
|
| + // onReceivedTitle is still being called.
|
| + onReceivedTitleCallCount = onReceivedTitleHelper.getCallCount();
|
| + loadUrlSync(awContents, contentsClient.getOnPageFinishedHelper(), url2);
|
| + onReceivedTitleHelper.waitForCallback(onReceivedTitleCallCount);
|
| + assertEquals(title, onReceivedTitleHelper.getTitle());
|
| + } finally {
|
| + webServer.shutdown();
|
| + }
|
| + }
|
| }
|
|
|