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 |