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 3// found in the LICENSE file. 4 5package org.chromium.android_webview.test; 6 7import android.test.suitebuilder.annotation.MediumTest; 8import android.webkit.WebSettings; 9 10import org.chromium.android_webview.AwContents; 11import org.chromium.android_webview.ErrorCodeConversionHelper; 12import org.chromium.base.test.util.Feature; 13import org.chromium.content.browser.test.util.TestCallbackHelperContainer; 14 15import java.util.concurrent.TimeUnit; 16 17/** 18 * Tests for the ContentViewClient.onReceivedError() method. 19 */ 20public class ClientOnReceivedErrorTest extends AwTestBase { 21 22 private TestAwContentsClient mContentsClient; 23 private AwContents mAwContents; 24 25 @Override 26 public void setUp() throws Exception { 27 super.setUp(); 28 mContentsClient = new TestAwContentsClient(); 29 final AwTestContainerView testContainerView = 30 createAwTestContainerViewOnMainSync(mContentsClient); 31 mAwContents = testContainerView.getAwContents(); 32 } 33 34 @MediumTest 35 @Feature({"AndroidWebView"}) 36 public void testOnReceivedErrorOnInvalidUrl() throws Throwable { 37 TestCallbackHelperContainer.OnReceivedErrorHelper onReceivedErrorHelper = 38 mContentsClient.getOnReceivedErrorHelper(); 39 40 String url = "http://man.id.be.really.surprised.if.this.address.existed.blah/"; 41 int onReceivedErrorCallCount = onReceivedErrorHelper.getCallCount(); 42 loadUrlAsync(mAwContents, url); 43 44 onReceivedErrorHelper.waitForCallback(onReceivedErrorCallCount, 45 1 /* numberOfCallsToWaitFor */, 46 WAIT_TIMEOUT_MS, 47 TimeUnit.MILLISECONDS); 48 assertEquals(ErrorCodeConversionHelper.ERROR_HOST_LOOKUP, 49 onReceivedErrorHelper.getErrorCode()); 50 assertEquals(url, onReceivedErrorHelper.getFailingUrl()); 51 assertNotNull(onReceivedErrorHelper.getDescription()); 52 } 53 54 @MediumTest 55 @Feature({"AndroidWebView"}) 56 public void testOnReceivedErrorOnInvalidScheme() throws Throwable { 57 TestCallbackHelperContainer.OnReceivedErrorHelper onReceivedErrorHelper = 58 mContentsClient.getOnReceivedErrorHelper(); 59 60 String url = "foo://some/resource"; 61 int onReceivedErrorCallCount = onReceivedErrorHelper.getCallCount(); 62 loadUrlAsync(mAwContents, url); 63 64 onReceivedErrorHelper.waitForCallback(onReceivedErrorCallCount); 65 assertEquals(ErrorCodeConversionHelper.ERROR_UNSUPPORTED_SCHEME, 66 onReceivedErrorHelper.getErrorCode()); 67 assertEquals(url, onReceivedErrorHelper.getFailingUrl()); 68 assertNotNull(onReceivedErrorHelper.getDescription()); 69 } 70 71 @MediumTest 72 @Feature({"AndroidWebView"}) 73 public void testNoErrorOnFailedSubresourceLoad() throws Throwable { 74 TestCallbackHelperContainer.OnReceivedErrorHelper onReceivedErrorHelper = 75 mContentsClient.getOnReceivedErrorHelper(); 76 TestCallbackHelperContainer.OnPageFinishedHelper onPageFinishedHelper = 77 mContentsClient.getOnPageFinishedHelper(); 78 79 int currentCallCount = onPageFinishedHelper.getCallCount(); 80 loadDataAsync(mAwContents, 81 "<html><iframe src=\"http//invalid.url.co/\" /></html>", 82 "text/html", 83 false); 84 85 onPageFinishedHelper.waitForCallback(currentCallCount); 86 assertEquals(0, onReceivedErrorHelper.getCallCount()); 87 } 88 89 @MediumTest 90 @Feature({"AndroidWebView"}) 91 public void testNonExistentAssetUrl() throws Throwable { 92 TestCallbackHelperContainer.OnReceivedErrorHelper onReceivedErrorHelper = 93 mContentsClient.getOnReceivedErrorHelper(); 94 final String url = "file:///android_asset/does_not_exist.html"; 95 int onReceivedErrorCallCount = onReceivedErrorHelper.getCallCount(); 96 loadUrlAsync(mAwContents, url); 97 98 onReceivedErrorHelper.waitForCallback(onReceivedErrorCallCount); 99 assertEquals(ErrorCodeConversionHelper.ERROR_UNKNOWN, 100 onReceivedErrorHelper.getErrorCode()); 101 assertEquals(url, onReceivedErrorHelper.getFailingUrl()); 102 assertNotNull(onReceivedErrorHelper.getDescription()); 103 } 104 105 @MediumTest 106 @Feature({"AndroidWebView"}) 107 public void testNonExistentResourceUrl() throws Throwable { 108 TestCallbackHelperContainer.OnReceivedErrorHelper onReceivedErrorHelper = 109 mContentsClient.getOnReceivedErrorHelper(); 110 final String url = "file:///android_res/raw/does_not_exist.html"; 111 int onReceivedErrorCallCount = onReceivedErrorHelper.getCallCount(); 112 loadUrlAsync(mAwContents, url); 113 114 onReceivedErrorHelper.waitForCallback(onReceivedErrorCallCount); 115 assertEquals(ErrorCodeConversionHelper.ERROR_UNKNOWN, 116 onReceivedErrorHelper.getErrorCode()); 117 assertEquals(url, onReceivedErrorHelper.getFailingUrl()); 118 assertNotNull(onReceivedErrorHelper.getDescription()); 119 } 120 121 @MediumTest 122 @Feature({"AndroidWebView"}) 123 public void testCacheMiss() throws Throwable { 124 TestCallbackHelperContainer.OnReceivedErrorHelper onReceivedErrorHelper = 125 mContentsClient.getOnReceivedErrorHelper(); 126 final String url = "http://example.com/index.html"; 127 int onReceivedErrorCallCount = onReceivedErrorHelper.getCallCount(); 128 getAwSettingsOnUiThread(mAwContents).setCacheMode(WebSettings.LOAD_CACHE_ONLY); 129 loadUrlAsync(mAwContents, url); 130 131 onReceivedErrorHelper.waitForCallback(onReceivedErrorCallCount); 132 assertEquals(ErrorCodeConversionHelper.ERROR_UNKNOWN, 133 onReceivedErrorHelper.getErrorCode()); 134 assertEquals(url, onReceivedErrorHelper.getFailingUrl()); 135 assertFalse(onReceivedErrorHelper.getDescription().isEmpty()); 136 } 137} 138