| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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.test.suitebuilder.annotation.SmallTest; | 7 import android.test.suitebuilder.annotation.SmallTest; |
| 8 | 8 |
| 9 import org.chromium.android_webview.AwContents; | |
| 10 import org.chromium.android_webview.test.util.CommonResources; | 9 import org.chromium.android_webview.test.util.CommonResources; |
| 11 import org.chromium.android_webview.test.util.TestWebServer; | 10 import org.chromium.android_webview.test.util.TestWebServer; |
| 12 import org.chromium.base.test.util.Feature; | 11 import org.chromium.base.test.util.Feature; |
| 13 import org.chromium.base.test.util.UrlUtils; | 12 import org.chromium.base.test.util.UrlUtils; |
| 14 import org.chromium.content.browser.ContentSettings; | 13 import org.chromium.content.browser.ContentSettings; |
| 15 import org.chromium.content.browser.ContentViewCore; | 14 import org.chromium.content.browser.ContentViewCore; |
| 16 import org.chromium.content.browser.LoadUrlParams; | 15 import org.chromium.content.browser.LoadUrlParams; |
| 17 import org.chromium.content.browser.test.util.HistoryUtils; | 16 import org.chromium.content.browser.test.util.HistoryUtils; |
| 18 import org.chromium.content.browser.test.util.TestCallbackHelperContainer; | 17 import org.chromium.content.browser.test.util.TestCallbackHelperContainer; |
| 19 | 18 |
| 20 import java.util.concurrent.TimeUnit; | 19 import java.util.concurrent.TimeUnit; |
| 21 | 20 |
| 22 public class LoadDataWithBaseUrlTest extends AndroidWebViewTestBase { | 21 public class LoadDataWithBaseUrlTest extends AndroidWebViewTestBase { |
| 23 | 22 |
| 24 protected static int WAIT_TIMEOUT_SECONDS = 15; | 23 protected static int WAIT_TIMEOUT_SECONDS = 15; |
| 25 | 24 |
| 26 private TestAwContentsClient mContentsClient; | 25 private TestAwContentsClient mContentsClient; |
| 27 private AwContents mAwContents; | |
| 28 private ContentViewCore mContentViewCore; | 26 private ContentViewCore mContentViewCore; |
| 29 | 27 |
| 30 @Override | 28 @Override |
| 31 public void setUp() throws Exception { | 29 public void setUp() throws Exception { |
| 32 super.setUp(); | 30 super.setUp(); |
| 33 mContentsClient = new TestAwContentsClient(); | 31 mContentsClient = new TestAwContentsClient(); |
| 34 final AwTestContainerView testContainerView = | 32 mContentViewCore = |
| 35 createAwTestContainerViewOnMainSync(mContentsClient); | 33 createAwTestContainerViewOnMainSync(mContentsClient).getContentV
iewCore(); |
| 36 mAwContents = testContainerView.getAwContents(); | |
| 37 mContentViewCore = testContainerView.getContentViewCore(); | |
| 38 } | 34 } |
| 39 | 35 |
| 40 protected void loadDataWithBaseUrlSync( | 36 protected void loadDataWithBaseUrlSync( |
| 41 final String data, final String mimeType, final boolean isBase64Encoded, | 37 final String data, final String mimeType, final boolean isBase64Encoded, |
| 42 final String baseUrl, final String historyUrl) throws Throwable { | 38 final String baseUrl, final String historyUrl) throws Throwable { |
| 43 TestCallbackHelperContainer.OnPageFinishedHelper onPageFinishedHelper = | 39 TestCallbackHelperContainer.OnPageFinishedHelper onPageFinishedHelper = |
| 44 mContentsClient.getOnPageFinishedHelper(); | 40 mContentsClient.getOnPageFinishedHelper(); |
| 45 int currentCallCount = onPageFinishedHelper.getCallCount(); | 41 int currentCallCount = onPageFinishedHelper.getCallCount(); |
| 46 loadDataWithBaseUrlAsync(data, mimeType, isBase64Encoded, baseUrl, histo
ryUrl); | 42 loadDataWithBaseUrlAsync(data, mimeType, isBase64Encoded, baseUrl, histo
ryUrl); |
| 47 onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_S
ECONDS, | 43 onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_S
ECONDS, |
| 48 TimeUnit.SECONDS); | 44 TimeUnit.SECONDS); |
| 49 } | 45 } |
| 50 | 46 |
| 51 protected void loadDataWithBaseUrlAsync( | 47 protected void loadDataWithBaseUrlAsync( |
| 52 final String data, final String mimeType, final boolean isBase64Encoded, | 48 final String data, final String mimeType, final boolean isBase64Encoded, |
| 53 final String baseUrl, final String historyUrl) throws Throwable { | 49 final String baseUrl, final String historyUrl) throws Throwable { |
| 54 runTestOnUiThread(new Runnable() { | 50 runTestOnUiThread(new Runnable() { |
| 55 @Override | 51 @Override |
| 56 public void run() { | 52 public void run() { |
| 57 mAwContents.loadUrl(LoadUrlParams.createLoadDataParamsWithBaseUr
l( | 53 mContentViewCore.loadUrl(LoadUrlParams.createLoadDataParamsWithB
aseUrl( |
| 58 data, mimeType, isBase64Encoded, baseUrl, historyUrl)); | 54 data, mimeType, isBase64Encoded, baseUrl, historyUrl)); |
| 59 } | 55 } |
| 60 }); | 56 }); |
| 61 } | 57 } |
| 62 | 58 |
| 63 private static final String SCRIPT_FILE = "/script.js"; | 59 private static final String SCRIPT_FILE = "/script.js"; |
| 64 private static final String SCRIPT_LOADED = "Loaded"; | 60 private static final String SCRIPT_LOADED = "Loaded"; |
| 65 private static final String SCRIPT_NOT_LOADED = "Not loaded"; | 61 private static final String SCRIPT_NOT_LOADED = "Not loaded"; |
| 66 private static final String SCRIPT_JS = "script_was_loaded = true;"; | 62 private static final String SCRIPT_JS = "script_was_loaded = true;"; |
| 67 | 63 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 89 | 85 |
| 90 @SmallTest | 86 @SmallTest |
| 91 @Feature({"Android-WebView"}) | 87 @Feature({"Android-WebView"}) |
| 92 public void testImageLoad() throws Throwable { | 88 public void testImageLoad() throws Throwable { |
| 93 TestWebServer webServer = null; | 89 TestWebServer webServer = null; |
| 94 try { | 90 try { |
| 95 webServer = new TestWebServer(false); | 91 webServer = new TestWebServer(false); |
| 96 webServer.setResponseBase64("/" + CommonResources.FAVICON_FILENAME, | 92 webServer.setResponseBase64("/" + CommonResources.FAVICON_FILENAME, |
| 97 CommonResources.FAVICON_DATA_BASE64, CommonResources.getImag
ePngHeaders(true)); | 93 CommonResources.FAVICON_DATA_BASE64, CommonResources.getImag
ePngHeaders(true)); |
| 98 | 94 |
| 99 ContentSettings contentSettings = getContentSettingsOnUiThread(mAwCo
ntents); | 95 ContentSettings contentSettings = getContentSettingsOnUiThread(mCont
entViewCore); |
| 100 contentSettings.setImagesEnabled(true); | 96 contentSettings.setImagesEnabled(true); |
| 101 contentSettings.setJavaScriptEnabled(true); | 97 contentSettings.setJavaScriptEnabled(true); |
| 102 | 98 |
| 103 loadDataWithBaseUrlSync( | 99 loadDataWithBaseUrlSync( |
| 104 CommonResources.getOnImageLoadedHtml(CommonResources.FAVICON
_FILENAME), | 100 CommonResources.getOnImageLoadedHtml(CommonResources.FAVICON
_FILENAME), |
| 105 "text/html", false, webServer.getBaseUrl(), null); | 101 "text/html", false, webServer.getBaseUrl(), null); |
| 106 | 102 |
| 107 assertEquals("5", getTitleOnUiThread(mAwContents)); | 103 assertEquals("5", getTitleOnUiThread(mContentViewCore)); |
| 108 } finally { | 104 } finally { |
| 109 if (webServer != null) webServer.shutdown(); | 105 if (webServer != null) webServer.shutdown(); |
| 110 } | 106 } |
| 111 } | 107 } |
| 112 | 108 |
| 113 @SmallTest | 109 @SmallTest |
| 114 @Feature({"Android-WebView"}) | 110 @Feature({"Android-WebView"}) |
| 115 public void testScriptLoad() throws Throwable { | 111 public void testScriptLoad() throws Throwable { |
| 116 TestWebServer webServer = null; | 112 TestWebServer webServer = null; |
| 117 try { | 113 try { |
| 118 webServer = new TestWebServer(false); | 114 webServer = new TestWebServer(false); |
| 119 | 115 |
| 120 final String scriptUrl = webServer.setResponse(SCRIPT_FILE, SCRIPT_J
S, | 116 final String scriptUrl = webServer.setResponse(SCRIPT_FILE, SCRIPT_J
S, |
| 121 CommonResources.getTextJavascriptHeaders(true)); | 117 CommonResources.getTextJavascriptHeaders(true)); |
| 122 final String pageHtml = getScriptFileTestPageHtml(scriptUrl); | 118 final String pageHtml = getScriptFileTestPageHtml(scriptUrl); |
| 123 | 119 |
| 124 getContentSettingsOnUiThread(mAwContents).setJavaScriptEnabled(true)
; | 120 getContentSettingsOnUiThread(mContentViewCore).setJavaScriptEnabled(
true); |
| 125 loadDataWithBaseUrlSync(pageHtml, "text/html", false, webServer.getB
aseUrl(), null); | 121 loadDataWithBaseUrlSync(pageHtml, "text/html", false, webServer.getB
aseUrl(), null); |
| 126 assertEquals(SCRIPT_LOADED, getTitleOnUiThread(mAwContents)); | 122 assertEquals(SCRIPT_LOADED, getTitleOnUiThread(mContentViewCore)); |
| 127 | 123 |
| 128 } finally { | 124 } finally { |
| 129 if (webServer != null) webServer.shutdown(); | 125 if (webServer != null) webServer.shutdown(); |
| 130 } | 126 } |
| 131 } | 127 } |
| 132 | 128 |
| 133 @SmallTest | 129 @SmallTest |
| 134 @Feature({"Android-WebView"}) | 130 @Feature({"Android-WebView"}) |
| 135 public void testSameOrigin() throws Throwable { | 131 public void testSameOrigin() throws Throwable { |
| 136 TestWebServer webServer = null; | 132 TestWebServer webServer = null; |
| 137 try { | 133 try { |
| 138 webServer = new TestWebServer(false); | 134 webServer = new TestWebServer(false); |
| 139 final String frameUrl = webServer.setResponse("/" + CommonResources.
ABOUT_FILENAME, | 135 final String frameUrl = webServer.setResponse("/" + CommonResources.
ABOUT_FILENAME, |
| 140 CommonResources.ABOUT_HTML, CommonResources.getTextHtmlHeade
rs(true)); | 136 CommonResources.ABOUT_HTML, CommonResources.getTextHtmlHeade
rs(true)); |
| 141 final String html = getCrossOriginAccessTestPageHtml(frameUrl); | 137 final String html = getCrossOriginAccessTestPageHtml(frameUrl); |
| 142 | 138 |
| 143 getContentSettingsOnUiThread(mAwContents).setJavaScriptEnabled(true)
; | 139 getContentSettingsOnUiThread(mContentViewCore).setJavaScriptEnabled(
true); |
| 144 loadDataWithBaseUrlSync(html, "text/html", false, webServer.getBaseU
rl(), null); | 140 loadDataWithBaseUrlSync(html, "text/html", false, webServer.getBaseU
rl(), null); |
| 145 assertEquals(frameUrl, getTitleOnUiThread(mAwContents)); | 141 assertEquals(frameUrl, getTitleOnUiThread(mContentViewCore)); |
| 146 | 142 |
| 147 } finally { | 143 } finally { |
| 148 if (webServer != null) webServer.shutdown(); | 144 if (webServer != null) webServer.shutdown(); |
| 149 } | 145 } |
| 150 } | 146 } |
| 151 | 147 |
| 152 @SmallTest | 148 @SmallTest |
| 153 @Feature({"Android-WebView"}) | 149 @Feature({"Android-WebView"}) |
| 154 public void testCrossOrigin() throws Throwable { | 150 public void testCrossOrigin() throws Throwable { |
| 155 TestWebServer webServer = null; | 151 TestWebServer webServer = null; |
| 156 try { | 152 try { |
| 157 webServer = new TestWebServer(false); | 153 webServer = new TestWebServer(false); |
| 158 final String frameUrl = webServer.setResponse("/" + CommonResources.
ABOUT_FILENAME, | 154 final String frameUrl = webServer.setResponse("/" + CommonResources.
ABOUT_FILENAME, |
| 159 CommonResources.ABOUT_HTML, CommonResources.getTextHtmlHeade
rs(true)); | 155 CommonResources.ABOUT_HTML, CommonResources.getTextHtmlHeade
rs(true)); |
| 160 final String html = getCrossOriginAccessTestPageHtml(frameUrl); | 156 final String html = getCrossOriginAccessTestPageHtml(frameUrl); |
| 161 final String baseUrl = webServer.getBaseUrl().replaceFirst("localhos
t", "127.0.0.1"); | 157 final String baseUrl = webServer.getBaseUrl().replaceFirst("localhos
t", "127.0.0.1"); |
| 162 | 158 |
| 163 getContentSettingsOnUiThread(mAwContents).setJavaScriptEnabled(true)
; | 159 getContentSettingsOnUiThread(mContentViewCore).setJavaScriptEnabled(
true); |
| 164 loadDataWithBaseUrlSync(html, "text/html", false, baseUrl, null); | 160 loadDataWithBaseUrlSync(html, "text/html", false, baseUrl, null); |
| 165 | 161 |
| 166 // TODO(mnaganov): Catch a security exception and set the title acco
rdingly, | 162 // TODO(mnaganov): Catch a security exception and set the title acco
rdingly, |
| 167 // once https://bugs.webkit.org/show_bug.cgi?id=43504 is fixed. | 163 // once https://bugs.webkit.org/show_bug.cgi?id=43504 is fixed. |
| 168 assertEquals("undefined", getTitleOnUiThread(mAwContents)); | 164 assertEquals("undefined", getTitleOnUiThread(mContentViewCore)); |
| 169 | 165 |
| 170 } finally { | 166 } finally { |
| 171 if (webServer != null) webServer.shutdown(); | 167 if (webServer != null) webServer.shutdown(); |
| 172 } | 168 } |
| 173 } | 169 } |
| 174 | 170 |
| 175 @SmallTest | 171 @SmallTest |
| 176 @Feature({"Android-WebView"}) | 172 @Feature({"Android-WebView"}) |
| 177 public void testNullBaseUrl() throws Throwable { | 173 public void testNullBaseUrl() throws Throwable { |
| 178 getContentSettingsOnUiThread(mAwContents).setJavaScriptEnabled(true); | 174 getContentSettingsOnUiThread(mContentViewCore).setJavaScriptEnabled(true
); |
| 179 final String pageHtml = "<html><body onload='document.title=document.loc
ation.href'>" + | 175 final String pageHtml = "<html><body onload='document.title=document.loc
ation.href'>" + |
| 180 "</body></html>"; | 176 "</body></html>"; |
| 181 loadDataWithBaseUrlSync(pageHtml, "text/html", false, null, null); | 177 loadDataWithBaseUrlSync(pageHtml, "text/html", false, null, null); |
| 182 assertEquals("about:blank", getTitleOnUiThread(mAwContents)); | 178 assertEquals("about:blank", getTitleOnUiThread(mContentViewCore)); |
| 183 } | 179 } |
| 184 | 180 |
| 185 @SmallTest | 181 @SmallTest |
| 186 @Feature({"Android-WebView"}) | 182 @Feature({"Android-WebView"}) |
| 187 public void testHistoryUrl() throws Throwable { | 183 public void testHistoryUrl() throws Throwable { |
| 188 | 184 |
| 189 final String pageHtml = "<html><body>Hello, world!</body></html>"; | 185 final String pageHtml = "<html><body>Hello, world!</body></html>"; |
| 190 final String baseUrl = "http://example.com"; | 186 final String baseUrl = "http://example.com"; |
| 191 // TODO(mnaganov): Use the same string as Android CTS suite uses | 187 // TODO(mnaganov): Use the same string as Android CTS suite uses |
| 192 // once GURL issue is resolved (http://code.google.com/p/google-url/issu
es/detail?id=29) | 188 // once GURL issue is resolved (http://code.google.com/p/google-url/issu
es/detail?id=29) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 206 final String pageHtml = "<html><body>bar</body></html>"; | 202 final String pageHtml = "<html><body>bar</body></html>"; |
| 207 final String historyUrl = "http://history.com/"; | 203 final String historyUrl = "http://history.com/"; |
| 208 loadDataWithBaseUrlSync(pageHtml, "text/html", false, "data:foo", histor
yUrl); | 204 loadDataWithBaseUrlSync(pageHtml, "text/html", false, "data:foo", histor
yUrl); |
| 209 assertEquals("data:text/html," + pageHtml, HistoryUtils.getUrlOnUiThread
( | 205 assertEquals("data:text/html," + pageHtml, HistoryUtils.getUrlOnUiThread
( |
| 210 getInstrumentation(), mContentViewCore)); | 206 getInstrumentation(), mContentViewCore)); |
| 211 } | 207 } |
| 212 | 208 |
| 213 @SmallTest | 209 @SmallTest |
| 214 @Feature({"Android-WebView"}) | 210 @Feature({"Android-WebView"}) |
| 215 public void testAccessToLocalFile() throws Throwable { | 211 public void testAccessToLocalFile() throws Throwable { |
| 216 getContentSettingsOnUiThread(mAwContents).setJavaScriptEnabled(true); | 212 getContentSettingsOnUiThread(mContentViewCore).setJavaScriptEnabled(true
); |
| 217 final String baseUrl = UrlUtils.getTestFileUrl("webview/"); | 213 final String baseUrl = UrlUtils.getTestFileUrl("webview/"); |
| 218 final String scriptFile = baseUrl + "script.js"; | 214 final String scriptFile = baseUrl + "script.js"; |
| 219 final String pageHtml = getScriptFileTestPageHtml(scriptFile); | 215 final String pageHtml = getScriptFileTestPageHtml(scriptFile); |
| 220 loadDataWithBaseUrlSync(pageHtml, "text/html", false, baseUrl, null); | 216 loadDataWithBaseUrlSync(pageHtml, "text/html", false, baseUrl, null); |
| 221 assertEquals(SCRIPT_LOADED, getTitleOnUiThread(mAwContents)); | 217 assertEquals(SCRIPT_LOADED, getTitleOnUiThread(mContentViewCore)); |
| 222 } | 218 } |
| 223 | 219 |
| 224 @SmallTest | 220 @SmallTest |
| 225 @Feature({"Android-WebView"}) | 221 @Feature({"Android-WebView"}) |
| 226 public void testFailedAccessToLocalFile() throws Throwable { | 222 public void testFailedAccessToLocalFile() throws Throwable { |
| 227 getContentSettingsOnUiThread(mAwContents).setJavaScriptEnabled(true); | 223 getContentSettingsOnUiThread(mContentViewCore).setJavaScriptEnabled(true
); |
| 228 final String scriptFile = UrlUtils.getTestFileUrl("webview/script.js"); | 224 final String scriptFile = UrlUtils.getTestFileUrl("webview/script.js"); |
| 229 final String pageHtml = getScriptFileTestPageHtml(scriptFile); | 225 final String pageHtml = getScriptFileTestPageHtml(scriptFile); |
| 230 final String baseUrl = "http://example.com"; | 226 final String baseUrl = "http://example.com"; |
| 231 loadDataWithBaseUrlSync(pageHtml, "text/html", false, baseUrl, null); | 227 loadDataWithBaseUrlSync(pageHtml, "text/html", false, baseUrl, null); |
| 232 assertEquals(SCRIPT_NOT_LOADED, getTitleOnUiThread(mAwContents)); | 228 assertEquals(SCRIPT_NOT_LOADED, getTitleOnUiThread(mContentViewCore)); |
| 233 } | 229 } |
| 234 | 230 |
| 235 @SmallTest | 231 @SmallTest |
| 236 @Feature({"Android-WebView"}) | 232 @Feature({"Android-WebView"}) |
| 237 public void testHistoryUrlNavigation() throws Throwable { | 233 public void testHistoryUrlNavigation() throws Throwable { |
| 238 TestWebServer webServer = null; | 234 TestWebServer webServer = null; |
| 239 try { | 235 try { |
| 240 webServer = new TestWebServer(false); | 236 webServer = new TestWebServer(false); |
| 241 final String historyUrl = webServer.setResponse("/" + CommonResource
s.ABOUT_FILENAME, | 237 final String historyUrl = webServer.setResponse("/" + CommonResource
s.ABOUT_FILENAME, |
| 242 CommonResources.ABOUT_HTML, CommonResources.getTextHtmlHeade
rs(true)); | 238 CommonResources.ABOUT_HTML, CommonResources.getTextHtmlHeade
rs(true)); |
| 243 | 239 |
| 244 final String page1Title = "Page1"; | 240 final String page1Title = "Page1"; |
| 245 final String page1Html = "<html><head><title>" + page1Title + "</tit
le>" + | 241 final String page1Html = "<html><head><title>" + page1Title + "</tit
le>" + |
| 246 "<body>" + page1Title + "</body></html>"; | 242 "<body>" + page1Title + "</body></html>"; |
| 247 | 243 |
| 248 loadDataWithBaseUrlSync(page1Html, "text/html", false, null, history
Url); | 244 loadDataWithBaseUrlSync(page1Html, "text/html", false, null, history
Url); |
| 249 assertEquals(page1Title, getTitleOnUiThread(mAwContents)); | 245 assertEquals(page1Title, getTitleOnUiThread(mContentViewCore)); |
| 250 | 246 |
| 251 final String page2Title = "Page2"; | 247 final String page2Title = "Page2"; |
| 252 final String page2Html = "<html><head><title>" + page2Title + "</tit
le>" + | 248 final String page2Html = "<html><head><title>" + page2Title + "</tit
le>" + |
| 253 "<body>" + page2Title + "</body></html>"; | 249 "<body>" + page2Title + "</body></html>"; |
| 254 | 250 |
| 255 final TestCallbackHelperContainer.OnPageFinishedHelper onPageFinishe
dHelper = | 251 final TestCallbackHelperContainer.OnPageFinishedHelper onPageFinishe
dHelper = |
| 256 mContentsClient.getOnPageFinishedHelper(); | 252 mContentsClient.getOnPageFinishedHelper(); |
| 257 loadDataSync(mAwContents, onPageFinishedHelper, page2Html, "text/htm
l", false); | 253 loadDataSync(mContentViewCore, onPageFinishedHelper, page2Html, "tex
t/html", false); |
| 258 assertEquals(page2Title, getTitleOnUiThread(mAwContents)); | 254 assertEquals(page2Title, getTitleOnUiThread(mContentViewCore)); |
| 259 | 255 |
| 260 HistoryUtils.goBackSync(getInstrumentation(), mContentViewCore, onPa
geFinishedHelper); | 256 HistoryUtils.goBackSync(getInstrumentation(), mContentViewCore, onPa
geFinishedHelper); |
| 261 // The title of the 'about.html' specified via historyUrl. | 257 // The title of the 'about.html' specified via historyUrl. |
| 262 assertEquals(CommonResources.ABOUT_TITLE, getTitleOnUiThread(mAwCont
ents)); | 258 assertEquals(CommonResources.ABOUT_TITLE, getTitleOnUiThread(mConten
tViewCore)); |
| 263 | 259 |
| 264 } finally { | 260 } finally { |
| 265 if (webServer != null) webServer.shutdown(); | 261 if (webServer != null) webServer.shutdown(); |
| 266 } | 262 } |
| 267 } | 263 } |
| 268 } | 264 } |
| OLD | NEW |