| <!DOCTYPE html> |
| <title>Test that local scheme workers inherit COEP: require-corp from the creating document</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| promise_test(async t => { |
| let sameOrigin = "{{location[server]}}"; |
| let crossOrigin = "https://{{hosts[][www]}}:{{ports[https][1]}}"; |
| |
| let testHarness = await fetch(`${sameOrigin}/resources/testharness.js`) |
| .then(r => r.text()); |
| |
| // Test that fetching same-origin is allowed by COEP. |
| let same_origin_allowed_test = testName => ` |
| promise_test(async t => { |
| return fetch("${sameOrigin}/common/blank.html", { mode: "no-cors" }); |
| }, "${testName}: Same origin should be allowed."); |
| `; |
| |
| // For data URLs, since everything is cross-origin in that case. |
| let same_origin_blocked_test = testName => ` |
| promise_test(t => { |
| return promise_rejects_js( |
| t, TypeError, |
| fetch("${sameOrigin}/common/blank.html", { mode: "no-cors" })); |
| }, "${testName}: Same origin should be blocked."); |
| `; |
| |
| // Test that fetching cross-origin is blocked by COEP. |
| let cross_origin_blocked_test = testName => ` |
| promise_test(t => { |
| return promise_rejects_js( |
| t, TypeError, |
| fetch("${crossOrigin}/common/blank.html", { mode: "no-cors" })); |
| }, "${testName}: Cross origin should be blocked."); |
| `; |
| |
| let blob_string = testName => testHarness + |
| same_origin_allowed_test(testName) + |
| cross_origin_blocked_test(testName) + "done();"; |
| |
| let data_string = testName => testHarness + |
| same_origin_blocked_test(testName) + |
| cross_origin_blocked_test(testName) + "done();"; |
| |
| let blob_url = context => { |
| let blob = new Blob([blob_string(`blob URL ${context}`)], |
| { type: 'application/javascript' }); |
| return URL.createObjectURL(blob); |
| }; |
| |
| await fetch_tests_from_worker(new Worker(blob_url("dedicated worker"))); |
| await fetch_tests_from_worker(new SharedWorker(blob_url("shared worker"))); |
| |
| let data_url = context => `data:application/javascript,` + |
| `${encodeURIComponent(data_string("data URL " + context))}`; |
| |
| await fetch_tests_from_worker(new Worker(data_url("dedicated worker"))); |
| await fetch_tests_from_worker(new Worker(data_url("shared worker"))); |
| }); |
| </script> |