OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.android_webview.test; | 5 package org.chromium.android_webview.test; |
6 | 6 |
7 import android.os.Build; | 7 import android.os.Build; |
8 import android.test.suitebuilder.annotation.SmallTest; | 8 import android.test.suitebuilder.annotation.SmallTest; |
9 import android.util.Pair; | 9 import android.util.Pair; |
10 | 10 |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 | 325 |
326 HistoryUtils.goBackSync(getInstrumentation(), | 326 HistoryUtils.goBackSync(getInstrumentation(), |
327 awContents.getWebContents(), | 327 awContents.getWebContents(), |
328 contentsClient.getOnPageFinishedHelper()); | 328 contentsClient.getOnPageFinishedHelper()); |
329 assertEquals(2, webServer.getRequestCount(path)); | 329 assertEquals(2, webServer.getRequestCount(path)); |
330 validateRequestHeaders(extraHeaders, webServer.getLastRequest(path))
; | 330 validateRequestHeaders(extraHeaders, webServer.getLastRequest(path))
; |
331 } finally { | 331 } finally { |
332 webServer.shutdown(); | 332 webServer.shutdown(); |
333 } | 333 } |
334 } | 334 } |
| 335 |
| 336 private static class OnReceivedTitleClient extends TestAwContentsClient { |
| 337 void setOnReceivedTitleCallback(Runnable onReceivedTitleCallback) { |
| 338 mOnReceivedTitleCallback = onReceivedTitleCallback; |
| 339 } |
| 340 @Override |
| 341 public void onReceivedTitle(String title) { |
| 342 super.onReceivedTitle(title); |
| 343 mOnReceivedTitleCallback.run(); |
| 344 } |
| 345 private Runnable mOnReceivedTitleCallback; |
| 346 } |
| 347 |
| 348 // See crbug.com/494929. Need to make sure that loading a javascript: URL |
| 349 // from inside onReceivedTitle works. |
| 350 @SmallTest |
| 351 @Feature({"AndroidWebView"}) |
| 352 public void testLoadUrlFromOnReceivedTitle() throws Throwable { |
| 353 final OnReceivedTitleClient contentsClient = new OnReceivedTitleClient()
; |
| 354 final AwTestContainerView testContainerView = |
| 355 createAwTestContainerViewOnMainSync(contentsClient); |
| 356 final AwContents awContents = testContainerView.getAwContents(); |
| 357 final AwSettings settings = getAwSettingsOnUiThread(awContents); |
| 358 settings.setJavaScriptEnabled(true); |
| 359 |
| 360 contentsClient.setOnReceivedTitleCallback(new Runnable() { |
| 361 @Override |
| 362 public void run() { |
| 363 awContents.loadUrl("javascript:testProperty=42;void(0);"); |
| 364 } |
| 365 }); |
| 366 |
| 367 TestWebServer webServer = TestWebServer.start(); |
| 368 try { |
| 369 // We need to have a navigation entry, but with an empty title. Note
that |
| 370 // trying to load a page with no title makes the received title to b
e |
| 371 // the URL of the page so instead we use a "204 No Content" response
. |
| 372 final String url = webServer.setResponseWithNoContentStatus("/page.h
tml"); |
| 373 loadUrlSync(awContents, contentsClient.getOnPageFinishedHelper(), ur
l); |
| 374 TestAwContentsClient.OnReceivedTitleHelper onReceivedTitleHelper = |
| 375 contentsClient.getOnReceivedTitleHelper(); |
| 376 final String pageTitle = "Hello, World!"; |
| 377 int onReceivedTitleCallCount = onReceivedTitleHelper.getCallCount(); |
| 378 loadUrlAsync(awContents, "javascript:document.title=\"" + pageTitle
+ "\";void(0);"); |
| 379 onReceivedTitleHelper.waitForCallback(onReceivedTitleCallCount); |
| 380 assertEquals(pageTitle, onReceivedTitleHelper.getTitle()); |
| 381 } finally { |
| 382 webServer.shutdown(); |
| 383 } |
| 384 } |
| 385 |
| 386 public void testOnReceivedTitleForUnchangingTitle() throws Throwable { |
| 387 final TestAwContentsClient contentsClient = new TestAwContentsClient(); |
| 388 final AwTestContainerView testContainerView = |
| 389 createAwTestContainerViewOnMainSync(contentsClient); |
| 390 final AwContents awContents = testContainerView.getAwContents(); |
| 391 |
| 392 TestWebServer webServer = TestWebServer.start(); |
| 393 try { |
| 394 final String title = "Title"; |
| 395 final String url1 = webServer.setResponse("/page1.html", |
| 396 "<html><head><title>" + title + "</title></head>Page 1</html
>", null); |
| 397 final String url2 = webServer.setResponse("/page2.html", |
| 398 "<html><head><title>" + title + "</title></head>Page 2</html
>", null); |
| 399 TestAwContentsClient.OnReceivedTitleHelper onReceivedTitleHelper = |
| 400 contentsClient.getOnReceivedTitleHelper(); |
| 401 int onReceivedTitleCallCount = onReceivedTitleHelper.getCallCount(); |
| 402 loadUrlSync(awContents, contentsClient.getOnPageFinishedHelper(), ur
l1); |
| 403 onReceivedTitleHelper.waitForCallback(onReceivedTitleCallCount); |
| 404 assertEquals(title, onReceivedTitleHelper.getTitle()); |
| 405 // Verify that even if we load another page with the same title, |
| 406 // onReceivedTitle is still being called. |
| 407 onReceivedTitleCallCount = onReceivedTitleHelper.getCallCount(); |
| 408 loadUrlSync(awContents, contentsClient.getOnPageFinishedHelper(), ur
l2); |
| 409 onReceivedTitleHelper.waitForCallback(onReceivedTitleCallCount); |
| 410 assertEquals(title, onReceivedTitleHelper.getTitle()); |
| 411 } finally { |
| 412 webServer.shutdown(); |
| 413 } |
| 414 } |
335 } | 415 } |
OLD | NEW |