OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 <!-- This test is prefixed with `chromium.` because the equivalent version | |
3 available in Web Platform Tests contains additional assertions which Chromium | |
4 currently fails. This test should be persisted only to preserve test coverage | |
5 until such time as the upstream version can be made to pass. See | |
6 https://crbug.com/718935 --> | |
7 <title>Service Worker: FetchEvent for resources</title> | |
8 <script src="../resources/testharness.js"></script> | |
9 <script src="../resources/testharnessreport.js"></script> | |
10 <script src="../resources/get-host-info.js?pipe=sub"></script> | |
11 <script src="resources/test-helpers.js"></script> | |
12 <script> | |
13 var url_count = 0; | |
14 var expected_results = {}; | |
15 | |
16 function image_test(frame, url, cross_origin, | |
17 expected_mode, expected_credentials) { | |
18 var actual_url = url + (++url_count); | |
19 expected_results[actual_url] = { | |
20 mode: expected_mode, | |
21 credentials: expected_credentials, | |
22 redirect: 'follow', | |
23 message: 'Image load (url:' + | |
24 actual_url + ' cross_origin:' + cross_origin + ')' | |
25 }; | |
26 return frame.contentWindow.load_image(actual_url, cross_origin); | |
27 } | |
28 | |
29 function script_test(frame, url, cross_origin, | |
30 expected_mode, expected_credentials) { | |
31 var actual_url = url + (++url_count); | |
32 expected_results[actual_url] = { | |
33 mode: expected_mode, | |
34 credentials: expected_credentials, | |
35 redirect: 'follow', | |
36 message: 'Script load (url:' + | |
37 actual_url + ' cross_origin:' + cross_origin + ')' | |
38 }; | |
39 return frame.contentWindow.load_script(actual_url, cross_origin); | |
40 } | |
41 | |
42 function css_test(frame, url, cross_origin, | |
43 expected_mode, expected_credentials) { | |
44 var actual_url = url + (++url_count); | |
45 expected_results[actual_url] = { | |
46 mode: expected_mode, | |
47 credentials: expected_credentials, | |
48 redirect: 'follow', | |
49 message: 'CSS load (url:' + | |
50 actual_url + ' cross_origin:' + cross_origin + ')' | |
51 }; | |
52 return frame.contentWindow.load_css(actual_url, cross_origin); | |
53 } | |
54 | |
55 function font_face_test(frame, url, expected_mode, | |
56 expected_credentials) { | |
57 var actual_url = url + (++url_count); | |
58 expected_results[actual_url] = { | |
59 url: actual_url, | |
60 mode: expected_mode, | |
61 credentials: expected_credentials, | |
62 redirect: 'follow', | |
63 message: 'FontFace load (url:' + actual_url + ')' | |
64 }; | |
65 return frame.contentWindow.load_font(actual_url); | |
66 } | |
67 | |
68 function css_image_test(frame, url, type, | |
69 expected_mode, expected_credentials) { | |
70 var actual_url = url + (++url_count); | |
71 expected_results[actual_url] = { | |
72 url: actual_url, | |
73 mode: expected_mode, | |
74 credentials: expected_credentials, | |
75 redirect: 'follow', | |
76 message: 'CSSImage load (url:' + actual_url + ' type:' + type + ')' | |
77 }; | |
78 return frame.contentWindow.load_css_image(actual_url, type); | |
79 } | |
80 | |
81 function css_image_set_test(frame, url, type, | |
82 expected_mode, expected_credentials) { | |
83 var actual_url = url + (++url_count); | |
84 expected_results[actual_url] = { | |
85 url: actual_url, | |
86 mode: expected_mode, | |
87 credentials: expected_credentials, | |
88 redirect: 'follow', | |
89 message: 'CSSImageSet load (url:' + actual_url + ' type:' + type + ')' | |
90 }; | |
91 return frame.contentWindow.load_css_image_set(actual_url, type); | |
92 } | |
93 | |
94 function fetch_test(frame, url, mode, credentials, | |
95 expected_mode, expected_credentials) { | |
96 var actual_url = url + (++url_count); | |
97 expected_results[actual_url] = { | |
98 mode: expected_mode, | |
99 credentials: expected_credentials, | |
100 redirect: 'follow', | |
101 message: 'fetch (url:' + actual_url + ' mode:' + mode + ' credentials:' + | |
102 credentials + ')' | |
103 }; | |
104 return frame.contentWindow.fetch( | |
105 new Request(actual_url, {mode: mode, credentials: credentials})); | |
106 } | |
107 | |
108 function audio_test(frame, url, cross_origin, | |
109 expected_mode, expected_credentials) { | |
110 var actual_url = url + (++url_count); | |
111 expected_results[actual_url] = { | |
112 mode: expected_mode, | |
113 credentials: expected_credentials, | |
114 redirect: 'follow', | |
115 message: 'Audio load (url:' + actual_url + ' cross_origin:' + | |
116 cross_origin + ')' | |
117 }; | |
118 return frame.contentWindow.load_audio(actual_url, cross_origin); | |
119 } | |
120 | |
121 async_test(function(t) { | |
122 var SCOPE = 'resources/fetch-request-resources-iframe.html'; | |
123 var SCRIPT = 'resources/fetch-request-resources-worker.js'; | |
124 var host_info = get_host_info(); | |
125 var LOCAL_URL = | |
126 host_info['HTTP_ORIGIN'] + base_path() + 'resources/dummy?test'; | |
127 var REMOTE_URL = | |
128 host_info['HTTP_REMOTE_ORIGIN'] + base_path() + 'resources/dummy?test'; | |
129 var worker; | |
130 var frame; | |
131 service_worker_unregister_and_register(t, SCRIPT, SCOPE) | |
132 .then(function(registration) { | |
133 worker = registration.installing; | |
134 return wait_for_state(t, worker, 'activated'); | |
135 }) | |
136 .then(function() { | |
137 return new Promise(function(resolve) { | |
138 var channel = new MessageChannel(); | |
139 channel.port1.onmessage = t.step_func(function(msg) { | |
140 if (msg.data.ready) { | |
141 resolve(); | |
142 return; | |
143 } | |
144 var result = msg.data; | |
145 var expected = expected_results[result.url]; | |
146 if (!expected) { | |
147 return; | |
148 } | |
149 assert_equals( | |
150 result.mode, expected.mode, | |
151 'mode of ' + expected.message + ' must be ' + | |
152 expected.mode + '.'); | |
153 assert_equals( | |
154 result.credentials, expected.credentials, | |
155 'credentials of ' + expected.message + ' must be ' + | |
156 expected.credentials + '.'); | |
157 assert_equals( | |
158 result.redirect, expected.redirect, | |
159 'redirect mode of ' + expected.message + ' must be ' + | |
160 expected.redirect + '.'); | |
161 --url_count; | |
162 delete expected_results[result.url]; | |
163 if (url_count == 0) { | |
164 frame.remove(); | |
165 service_worker_unregister_and_done(t, SCOPE); | |
166 } | |
167 }); | |
168 worker.postMessage( | |
169 {port: channel.port2}, [channel.port2]); | |
170 }); | |
171 }) | |
172 .then(function() { return with_iframe(SCOPE); }) | |
173 .then(function(f) { | |
174 frame = f; | |
175 image_test(f, LOCAL_URL, '', 'no-cors', 'include'); | |
176 image_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin'); | |
177 image_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include'); | |
178 image_test(f, REMOTE_URL, '', 'no-cors', 'include'); | |
179 image_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin'); | |
180 image_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include'); | |
181 | |
182 script_test(f, LOCAL_URL, '', 'no-cors', 'include'); | |
183 script_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin'); | |
184 script_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include'); | |
185 script_test(f, REMOTE_URL, '', 'no-cors', 'include'); | |
186 script_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin'); | |
187 script_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include'); | |
188 | |
189 css_test(f, LOCAL_URL, '', 'no-cors', 'include'); | |
190 css_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin'); | |
191 css_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include'); | |
192 css_test(f, REMOTE_URL, '', 'no-cors', 'include'); | |
193 css_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin'); | |
194 css_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include'); | |
195 | |
196 font_face_test(f, LOCAL_URL, 'cors', 'same-origin'); | |
197 font_face_test(f, REMOTE_URL, 'cors', 'same-origin'); | |
198 | |
199 css_image_test(f, LOCAL_URL, 'backgroundImage', 'no-cors', 'include'); | |
200 css_image_test(f, REMOTE_URL, 'backgroundImage', 'no-cors', 'include'); | |
201 css_image_test(f, LOCAL_URL, 'shapeOutside', 'cors', 'same-origin'); | |
202 css_image_test(f, REMOTE_URL, 'shapeOutside', 'cors', 'same-origin'); | |
203 | |
204 css_image_set_test(f, LOCAL_URL, 'backgroundImage', | |
205 'no-cors', 'include'); | |
206 css_image_set_test(f, REMOTE_URL, 'backgroundImage', | |
207 'no-cors', 'include'); | |
208 css_image_set_test(f, LOCAL_URL, 'shapeOutside', 'cors', 'same-origin'); | |
209 css_image_set_test(f, REMOTE_URL, 'shapeOutside', | |
210 'cors', 'same-origin'); | |
211 | |
212 fetch_test(f, LOCAL_URL, 'same-origin', 'omit', 'same-origin', 'omit'); | |
213 fetch_test(f, LOCAL_URL, 'same-origin', 'same-origin', | |
214 'same-origin', 'same-origin'); | |
215 fetch_test(f, LOCAL_URL, 'same-origin', 'include', | |
216 'same-origin', 'include'); | |
217 fetch_test(f, LOCAL_URL, 'no-cors', 'omit', 'no-cors', 'omit'); | |
218 fetch_test(f, LOCAL_URL, 'no-cors', 'same-origin', | |
219 'no-cors', 'same-origin'); | |
220 fetch_test(f, LOCAL_URL, 'no-cors', 'include', 'no-cors', 'include'); | |
221 fetch_test(f, LOCAL_URL, 'cors', 'omit', 'cors', 'omit'); | |
222 fetch_test(f, LOCAL_URL, 'cors', 'same-origin', 'cors', 'same-origin'); | |
223 fetch_test(f, LOCAL_URL, 'cors', 'include', 'cors', 'include'); | |
224 fetch_test(f, REMOTE_URL, 'no-cors', 'omit', 'no-cors', 'omit'); | |
225 fetch_test(f, REMOTE_URL, 'no-cors', 'same-origin', | |
226 'no-cors', 'same-origin'); | |
227 fetch_test(f, REMOTE_URL, 'no-cors', 'include', 'no-cors', 'include'); | |
228 fetch_test(f, REMOTE_URL, 'cors', 'omit', 'cors', 'omit'); | |
229 fetch_test(f, REMOTE_URL, 'cors', 'same-origin', 'cors', 'same-origin'); | |
230 fetch_test(f, REMOTE_URL, 'cors', 'include', 'cors', 'include'); | |
231 | |
232 audio_test(f, LOCAL_URL, '', 'no-cors', 'include'); | |
233 audio_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin'); | |
234 audio_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include'); | |
235 audio_test(f, REMOTE_URL, '', 'no-cors', 'include'); | |
236 audio_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin'); | |
237 audio_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include'); | |
238 }) | |
239 .catch(unreached_rejection(t)); | |
240 }, 'Verify FetchEvent for resources.'); | |
241 </script> | |
OLD | NEW |