Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(676)

Side by Side Diff: third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/fetch-request-redirect.https.html

Issue 2415873002: Import w3c tests for the service workers (Closed)
Patch Set: Rebase Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <title>Service Worker: FetchEvent for resources</title>
3 <meta name="timeout" content="long">
4 <script src="/resources/testharness.js"></script>
5 <script src="/resources/testharnessreport.js"></script>
6 <script src="resources/get-host-info.sub.js"></script>
7 <script src="resources/test-helpers.sub.js"></script>
8 <script>
9
10 function assert_resolves(promise, description) {
11 return promise.catch(function(reason) {
12 throw new Error(description + ' - ' + reason.message);
13 });
14 }
15
16 function assert_rejects(promise, description) {
17 return promise.then(
18 function() { throw new Error(description); },
19 function() {});
20 }
21
22 function iframe_test(url, timeout_enabled) {
23 return new Promise(function(resolve, reject) {
24 var frame = document.createElement('iframe');
25 frame.src = url;
26 if (timeout_enabled) {
27 // We can't catch the network error on iframe. So we use the timer for
28 // failure detection.
29 var timer = setTimeout(function() {
30 reject(new Error('iframe load timeout'));
31 frame.remove();
32 }, 10000);
33 }
34 frame.onload = function() {
35 if (timeout_enabled)
36 clearTimeout(timer);
37 if (frame.contentDocument.body.textContent == 'Hello world\n')
38 resolve();
39 else
40 reject(new Error('content mismatch'));
41 frame.remove();
42 };
43 document.body.appendChild(frame);
44 });
45 }
46
47 promise_test(function(t) {
48 var SCOPE = 'resources/fetch-request-redirect-iframe.html';
49 var SCRIPT = 'resources/fetch-rewrite-worker.js';
50 var REDIRECT_URL = base_path() + 'resources/redirect.py?Redirect=';
51 var IMAGE_URL = base_path() + 'resources/square.png';
52 var AUDIO_URL = base_path() + 'resources/silence.oga';
53 var XHR_URL = base_path() + 'resources/simple.txt';
54 var HTML_URL = base_path() + 'resources/dummy.html';
55
56 var REDIRECT_TO_IMAGE_URL = REDIRECT_URL + encodeURIComponent(IMAGE_URL);
57 var REDIRECT_TO_AUDIO_URL = REDIRECT_URL + encodeURIComponent(AUDIO_URL);
58 var REDIRECT_TO_XHR_URL = REDIRECT_URL + encodeURIComponent(XHR_URL);
59 var REDIRECT_TO_HTML_URL = REDIRECT_URL + encodeURIComponent(HTML_URL);
60
61 var worker;
62 var frame;
63 return service_worker_unregister_and_register(t, SCRIPT, SCOPE)
64 .then(function(registration) {
65 worker = registration.installing;
66 return wait_for_state(t, worker, 'activated');
67 })
68 .then(function() { return with_iframe(SCOPE); })
69 .then(function(f) {
70 frame = f;
71 return Promise.all([
72 // XMLHttpRequest tests.
73 assert_resolves(frame.contentWindow.xhr(XHR_URL),
74 'Normal XHR should succeed.'),
75 assert_resolves(frame.contentWindow.xhr(REDIRECT_TO_XHR_URL),
76 'Redirected XHR should succeed.'),
77 assert_resolves(
78 frame.contentWindow.xhr(
79 './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) +
80 '&redirect-mode=follow'),
81 'Redirected XHR with Request.redirect=follow should succeed.'),
82 assert_rejects(
83 frame.contentWindow.xhr(
84 './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) +
85 '&redirect-mode=error'),
86 'Redirected XHR with Request.redirect=error should fail.'),
87 assert_rejects(
88 frame.contentWindow.xhr(
89 './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) +
90 '&redirect-mode=manual'),
91 'Redirected XHR with Request.redirect=manual should fail.'),
92
93 // Image loading tests.
94 assert_resolves(frame.contentWindow.load_image(IMAGE_URL),
95 'Normal image resource should be loaded.'),
96 assert_resolves(
97 frame.contentWindow.load_image(REDIRECT_TO_IMAGE_URL),
98 'Redirected image resource should be loaded.'),
99 assert_resolves(
100 frame.contentWindow.load_image(
101 './?url=' + encodeURIComponent(REDIRECT_TO_IMAGE_URL) +
102 '&redirect-mode=follow'),
103 'Loading redirected image with Request.redirect=follow should' +
104 ' succeed.'),
105 assert_rejects(
106 frame.contentWindow.load_image(
107 './?url=' + encodeURIComponent(REDIRECT_TO_IMAGE_URL) +
108 '&redirect-mode=error'),
109 'Loading redirected image with Request.redirect=error should ' +
110 'fail.'),
111 assert_rejects(
112 frame.contentWindow.load_image(
113 './?url=' + encodeURIComponent(REDIRECT_TO_IMAGE_URL) +
114 '&redirect-mode=manual'),
115 'Loading redirected image with Request.redirect=manual should' +
116 ' fail.'),
117
118 // Audio loading tests.
119 assert_resolves(frame.contentWindow.load_audio(AUDIO_URL),
120 'Normal audio resource should be loaded.'),
121 assert_resolves(
122 frame.contentWindow.load_audio(REDIRECT_TO_AUDIO_URL),
123 'Redirected audio resource should be loaded.'),
124 assert_resolves(
125 frame.contentWindow.load_audio(
126 './?url=' + encodeURIComponent(REDIRECT_TO_AUDIO_URL) +
127 '&redirect-mode=follow'),
128 'Loading redirected audio with Request.redirect=follow should' +
129 ' succeed.'),
130 assert_rejects(
131 frame.contentWindow.load_audio(
132 './?url=' + encodeURIComponent(REDIRECT_TO_AUDIO_URL) +
133 '&redirect-mode=error'),
134 'Loading redirected audio with Request.redirect=error should ' +
135 'fail.'),
136 assert_rejects(
137 frame.contentWindow.load_audio(
138 './?url=' + encodeURIComponent(REDIRECT_TO_AUDIO_URL) +
139 '&redirect-mode=manual'),
140 'Loading redirected audio with Request.redirect=manual should' +
141 ' fail.'),
142
143 // Iframe tests.
144 assert_resolves(iframe_test(HTML_URL),
145 'Normal iframe loading should succeed.'),
146 assert_resolves(
147 iframe_test(REDIRECT_TO_HTML_URL),
148 'Normal redirected iframe loading should succeed.'),
149 assert_rejects(
150 iframe_test(SCOPE + '?url=' +
151 encodeURIComponent(REDIRECT_TO_HTML_URL) +
152 '&redirect-mode=follow',
153 true /* timeout_enabled */),
154 'Redirected iframe loading with Request.redirect=follow should'+
155 ' fail.'),
156 assert_rejects(
157 iframe_test(SCOPE + '?url=' +
158 encodeURIComponent(REDIRECT_TO_HTML_URL) +
159 '&redirect-mode=error',
160 true /* timeout_enabled */),
161 'Redirected iframe loading with Request.redirect=error should '+
162 'fail.'),
163 assert_resolves(
164 iframe_test(SCOPE + '?url=' +
165 encodeURIComponent(REDIRECT_TO_HTML_URL) +
166 '&redirect-mode=manual',
167 true /* timeout_enabled */),
168 'Redirected iframe loading with Request.redirect=manual should'+
169 ' succeed.'),
170 ]);
171 })
172 .then(function() {
173 frame.remove();
174 service_worker_unregister_and_done(t, SCOPE);
175 });
176 }, 'Verify redirect mode of Fetch API and ServiceWorker FetchEvent.');
177
178 // test for reponse.redirected
179 promise_test(function(t) {
180 var SCOPE = 'resources/fetch-request-redirect-iframe.html';
181 var SCRIPT = 'resources/fetch-rewrite-worker.js';
182 var REDIRECT_URL = base_path() + 'resources/redirect.py?Redirect=';
183 var XHR_URL = base_path() + 'resources/simple.txt';
184 var IMAGE_URL = base_path() + 'resources/square.png';
185
186 var REDIRECT_TO_XHR_URL = REDIRECT_URL + encodeURIComponent(XHR_URL);
187
188 var host_info = get_host_info();
189
190 var CROSS_ORIGIN_URL = host_info['HTTPS_REMOTE_ORIGIN'] + IMAGE_URL;
191
192 var REDIRECT_TO_CROSS_ORIGIN = REDIRECT_URL +
193 encodeURIComponent(CROSS_ORIGIN_URL + '?ACAOrigin=*');
194
195 var worker;
196 var frame;
197 return service_worker_unregister_and_register(t, SCRIPT, SCOPE)
198 .then(function(registration) {
199 worker = registration.installing;
200 return wait_for_state(t, worker, 'activated');
201 })
202 .then(function() { return with_iframe(SCOPE); })
203 .then(function(f) {
204 frame = f;
205 return Promise.all([
206 // XMLHttpRequest tests.
207 assert_resolves(
208 frame.contentWindow.xhr(
209 './?url=' + encodeURIComponent(XHR_URL) +
210 '&expected_redirected=false' +
211 '&expected_resolves=true'),
212 'Normal XHR should be resolved and response should not be ' +
213 'redirected.'),
214 assert_resolves(
215 frame.contentWindow.xhr(
216 './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) +
217 '&expected_redirected=true' +
218 '&expected_resolves=true'),
219 'Redirected XHR should be resolved and response should be ' +
220 'redirected.'),
221
222 // tests for request's mode = cors
223 assert_resolves(
224 frame.contentWindow.xhr(
225 './?url=' + encodeURIComponent(XHR_URL) +
226 '&mode=cors' +
227 '&expected_redirected=false' +
228 '&expected_resolves=true'),
229 'Normal XHR should be resolved and response should not be ' +
230 'redirected even with CORS mode.'),
231 assert_resolves(
232 frame.contentWindow.xhr(
233 './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) +
234 '&mode=cors' +
235 '&redirect-mode=follow' +
236 '&expected_redirected=true' +
237 '&expected_resolves=true'),
238 'Redirected XHR should be resolved and response.redirected ' +
239 'should be redirected with CORS mode.'),
240
241 // tests for request's mode = no-cors
242 // The response.redirect should be false since we will not add
243 // redirected url list when redirect-mode is not follow.
244 assert_rejects(
245 frame.contentWindow.xhr(
246 './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) +
247 '&mode=no-cors' +
248 '&redirect-mode=manual' +
249 '&expected_redirected=false' +
250 '&expected_resolves=false'),
251 'Redirected XHR should be reject and response should be ' +
252 'redirected with NO-CORS mode and redirect-mode=manual.'),
253
254 // tests for redirecting to a cors
255 assert_resolves(
256 frame.contentWindow.load_image(
257 './?url=' + encodeURIComponent(REDIRECT_TO_CROSS_ORIGIN) +
258 '&mode=no-cors' +
259 '&redirect-mode=follow' +
260 '&expected_redirected=false' +
261 '&expected_resolves=true'),
262 'Redirected COS image should be reject and response should ' +
263 'not be redirected with NO-CORS mode.'),
264 ]);
265 })
266 .then(function() {
267 frame.remove();
268 service_worker_unregister_and_done(t, SCOPE);
269 });
270 }, 'Verify redirected of Response(Fetch API) and ServiceWorker FetchEvent.');
271
272 // test for reponse.redirected after cached
273 promise_test(function(t) {
274 var SCOPE = 'resources/fetch-request-redirect-iframe.html';
275 var SCRIPT = 'resources/fetch-rewrite-worker.js';
276 var REDIRECT_URL = base_path() + 'resources/redirect.py?Redirect=';
277 var XHR_URL = base_path() + 'resources/simple.txt';
278 var IMAGE_URL = base_path() + 'resources/square.png';
279
280 var REDIRECT_TO_XHR_URL = REDIRECT_URL + encodeURIComponent(XHR_URL);
281
282 var host_info = get_host_info();
283
284 var CROSS_ORIGIN_URL = host_info['HTTPS_REMOTE_ORIGIN'] + IMAGE_URL;
285
286 var REDIRECT_TO_CROSS_ORIGIN = REDIRECT_URL +
287 encodeURIComponent(CROSS_ORIGIN_URL + '?ACAOrigin=*');
288
289 var worker;
290 var frame;
291 return service_worker_unregister_and_register(t, SCRIPT, SCOPE)
292 .then(function(registration) {
293 worker = registration.installing;
294 return wait_for_state(t, worker, 'activated');
295 })
296 .then(function() { return with_iframe(SCOPE); })
297 .then(function(f) {
298 frame = f;
299 return Promise.all([
300 // XMLHttpRequest tests.
301 assert_resolves(
302 frame.contentWindow.xhr(
303 './?url=' + encodeURIComponent(XHR_URL) +
304 '&expected_redirected=false' +
305 '&expected_resolves=true' +
306 '&cache'),
307 'Normal XHR should be resolved and response should not be ' +
308 'redirected.'),
309 assert_resolves(
310 frame.contentWindow.xhr(
311 './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) +
312 '&expected_redirected=true' +
313 '&expected_resolves=true' +
314 '&cache'),
315 'Redirected XHR should be resolved and response should be ' +
316 'redirected.'),
317
318 // tests for request's mode = cors
319 assert_resolves(
320 frame.contentWindow.xhr(
321 './?url=' + encodeURIComponent(XHR_URL) +
322 '&mode=cors' +
323 '&expected_redirected=false' +
324 '&expected_resolves=true' +
325 '&cache'),
326 'Normal XHR should be resolved and response should not be ' +
327 'redirected even with CORS mode.'),
328 assert_resolves(
329 frame.contentWindow.xhr(
330 './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) +
331 '&mode=cors' +
332 '&redirect-mode=follow' +
333 '&expected_redirected=true' +
334 '&expected_resolves=true' +
335 '&cache'),
336 'Redirected XHR should be resolved and response.redirected ' +
337 'should be redirected with CORS mode.'),
338
339 // tests for request's mode = no-cors
340 // The response.redirect should be false since we will not add
341 // redirected url list when redirect-mode is not follow.
342 assert_rejects(
343 frame.contentWindow.xhr(
344 './?url=' + encodeURIComponent(REDIRECT_TO_XHR_URL) +
345 '&mode=no-cors' +
346 '&redirect-mode=manual' +
347 '&expected_redirected=false' +
348 '&expected_resolves=false' +
349 '&cache'),
350 'Redirected XHR should be reject and response should be ' +
351 'redirected with NO-CORS mode and redirect-mode=manual.'),
352
353 // tests for redirecting to a cors
354 assert_resolves(
355 frame.contentWindow.load_image(
356 './?url=' + encodeURIComponent(REDIRECT_TO_CROSS_ORIGIN) +
357 '&mode=no-cors' +
358 '&redirect-mode=follow' +
359 '&expected_redirected=false' +
360 '&expected_resolves=true' +
361 '&cache'),
362 'Redirected COS image should be reject and response should ' +
363 'not be redirected with NO-CORS mode.'),
364 ]);
365 })
366 .then(function() {
367 frame.remove();
368 service_worker_unregister_and_done(t, SCOPE);
369 });
370 }, 'Verify redirected of Response(Fetch API), Cache API and ServiceWorker ' +
371 'FetchEvent.');
372 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698