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