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