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