| 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 |