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.sub.js"></script> |
| 6 <script src="resources/test-helpers.sub.js?pipe=sub"></script> |
| 7 <script> |
| 8 var url_count = 0; |
| 9 var expected_results = {}; |
| 10 |
| 11 function image_test(frame, url, cross_origin, expected_mode, |
| 12 expected_credentials) { |
| 13 var actual_url = url + (++url_count); |
| 14 expected_results[actual_url] = { |
| 15 cross_origin: cross_origin, |
| 16 mode: expected_mode, |
| 17 credentials: expected_credentials, |
| 18 integrity: '', |
| 19 message: 'Image load (url:' + |
| 20 actual_url + ' cross_origin:' + cross_origin + ')' |
| 21 }; |
| 22 return frame.contentWindow.load_image(actual_url, cross_origin); |
| 23 } |
| 24 |
| 25 function script_test(frame, url, cross_origin, expected_mode, |
| 26 expected_credentials) { |
| 27 var actual_url = url + (++url_count); |
| 28 expected_results[actual_url] = { |
| 29 cross_origin: cross_origin, |
| 30 mode: expected_mode, |
| 31 credentials: expected_credentials, |
| 32 integrity: '', |
| 33 message: 'Script load (url:' + |
| 34 actual_url + ' cross_origin:' + cross_origin + ')' |
| 35 }; |
| 36 return frame.contentWindow.load_script(actual_url, cross_origin); |
| 37 } |
| 38 |
| 39 function css_test(frame, url, cross_origin, expected_mode, |
| 40 expected_credentials) { |
| 41 var actual_url = url + (++url_count); |
| 42 expected_results[actual_url] = { |
| 43 cross_origin: cross_origin, |
| 44 mode: expected_mode, |
| 45 credentials: expected_credentials, |
| 46 integrity: '', |
| 47 message: 'CSS load (url:' + |
| 48 actual_url + ' cross_origin:' + cross_origin + ')' |
| 49 }; |
| 50 return frame.contentWindow.load_css(actual_url, cross_origin); |
| 51 } |
| 52 |
| 53 function font_face_test(frame, url, expected_mode, expected_credentials) { |
| 54 var actual_url = url + (++url_count); |
| 55 expected_results[actual_url] = { |
| 56 url: actual_url, |
| 57 mode: expected_mode, |
| 58 credentials: expected_credentials, |
| 59 integrity: '', |
| 60 message: 'FontFace load (url:' + actual_url + ')' |
| 61 }; |
| 62 return frame.contentWindow.load_font(actual_url); |
| 63 } |
| 64 |
| 65 function script_integrity_test(frame, url, integrity, expected_integrity) { |
| 66 var actual_url = url + (++url_count); |
| 67 expected_results[actual_url] = { |
| 68 url: actual_url, |
| 69 mode: 'no-cors', |
| 70 credentials: 'include', |
| 71 integrity: expected_integrity, |
| 72 message: 'Script load (url:' + actual_url + ')' |
| 73 }; |
| 74 return frame.contentWindow.load_script_with_integrity(actual_url, integrity); |
| 75 } |
| 76 |
| 77 function css_integrity_test(frame, url, integrity, expected_integrity) { |
| 78 var actual_url = url + (++url_count); |
| 79 expected_results[actual_url] = { |
| 80 url: actual_url, |
| 81 mode: 'no-cors', |
| 82 credentials: 'include', |
| 83 integrity: expected_integrity, |
| 84 message: 'CSS load (url:' + actual_url + ')' |
| 85 }; |
| 86 return frame.contentWindow.load_css_with_integrity(actual_url, integrity); |
| 87 } |
| 88 |
| 89 async_test(function(t) { |
| 90 var SCOPE = 'resources/fetch-request-resources-iframe.https.html'; |
| 91 var SCRIPT = 'resources/fetch-request-resources-worker.js'; |
| 92 var host_info = get_host_info(); |
| 93 var LOCAL_URL = |
| 94 host_info['HTTPS_ORIGIN'] + base_path() + 'resources/dummy?test'; |
| 95 var REMOTE_URL = |
| 96 host_info['HTTPS_REMOTE_ORIGIN'] + base_path() + 'resources/dummy?test'; |
| 97 var worker; |
| 98 var frame; |
| 99 service_worker_unregister_and_register(t, SCRIPT, SCOPE) |
| 100 .then(function(registration) { |
| 101 worker = registration.installing; |
| 102 return wait_for_state(t, worker, 'activated'); |
| 103 }) |
| 104 .then(function() { |
| 105 return new Promise(function(resolve) { |
| 106 var channel = new MessageChannel(); |
| 107 channel.port1.onmessage = t.step_func(function(msg) { |
| 108 if (msg.data.ready) { |
| 109 resolve(); |
| 110 return; |
| 111 } |
| 112 var result = msg.data; |
| 113 var expected = expected_results[result.url]; |
| 114 if (!expected) { |
| 115 return; |
| 116 } |
| 117 assert_equals( |
| 118 result.mode, expected.mode, |
| 119 'mode of ' + expected.message + ' must be ' + |
| 120 expected.mode + '.'); |
| 121 assert_equals( |
| 122 result.credentials, expected.credentials, |
| 123 'credentials of ' + expected.message + ' must be ' + |
| 124 expected.credentials + '.'); |
| 125 assert_equals( |
| 126 result.integrity, expected.integrity, |
| 127 'integrity of ' + expected.message + ' must be ' + |
| 128 expected.integrity + '.'); |
| 129 --url_count; |
| 130 delete expected_results[result.url]; |
| 131 if (url_count == 0) { |
| 132 frame.remove(); |
| 133 service_worker_unregister_and_done(t, SCOPE); |
| 134 } |
| 135 }); |
| 136 worker.postMessage( |
| 137 {port: channel.port2}, [channel.port2]); |
| 138 }); |
| 139 }) |
| 140 .then(function() { return with_iframe(SCOPE); }) |
| 141 .then(function(f) { |
| 142 frame = f; |
| 143 |
| 144 image_test(f, LOCAL_URL, '', 'no-cors', 'include'); |
| 145 image_test(f, REMOTE_URL, '', 'no-cors', 'include'); |
| 146 css_test(f, LOCAL_URL, '', 'no-cors', 'include'); |
| 147 css_test(f, REMOTE_URL, '', 'no-cors', 'include'); |
| 148 |
| 149 image_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin'); |
| 150 image_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include'); |
| 151 image_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin'); |
| 152 image_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include'); |
| 153 |
| 154 script_test(f, LOCAL_URL, '', 'no-cors', 'include'); |
| 155 script_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin'); |
| 156 script_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include'); |
| 157 script_test(f, REMOTE_URL, '', 'no-cors', 'include'); |
| 158 script_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin'); |
| 159 script_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include'); |
| 160 |
| 161 css_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin'); |
| 162 css_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include'); |
| 163 css_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin'); |
| 164 css_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include'); |
| 165 |
| 166 font_face_test(f, LOCAL_URL, 'cors', 'same-origin'); |
| 167 font_face_test(f, REMOTE_URL, 'cors', 'same-origin'); |
| 168 |
| 169 script_integrity_test(f, LOCAL_URL, ' ', ' '); |
| 170 script_integrity_test(f, LOCAL_URL, |
| 171 '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'); |
| 173 script_integrity_test(f, LOCAL_URL, 'sha256-', 'sha256-'); |
| 174 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 '); |
| 176 script_integrity_test(f, LOCAL_URL, 'sha256-foo sha256-abc', 'sha256-foo
sha256-abc'); |
| 177 |
| 178 css_integrity_test(f, LOCAL_URL, ' ', ' '); |
| 179 css_integrity_test(f, LOCAL_URL, |
| 180 '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'); |
| 182 css_integrity_test(f, LOCAL_URL, 'sha256-', 'sha256-'); |
| 183 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 '); |
| 185 css_integrity_test(f, LOCAL_URL, 'sha256-foo sha256-abc', 'sha256-foo sh
a256-abc'); |
| 186 }) |
| 187 .catch(unreached_rejection(t)); |
| 188 }, 'Verify FetchEvent for resources.'); |
| 189 </script> |
OLD | NEW |