summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/cross-origin-embedder-policy/require-corp-sw.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/cross-origin-embedder-policy/require-corp-sw.https.html')
-rw-r--r--testing/web-platform/tests/html/cross-origin-embedder-policy/require-corp-sw.https.html53
1 files changed, 53 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/cross-origin-embedder-policy/require-corp-sw.https.html b/testing/web-platform/tests/html/cross-origin-embedder-policy/require-corp-sw.https.html
new file mode 100644
index 0000000000..05272d41a4
--- /dev/null
+++ b/testing/web-platform/tests/html/cross-origin-embedder-policy/require-corp-sw.https.html
@@ -0,0 +1,53 @@
+<!doctype html>
+<title>Cross Origin Embedder Policy: requests initiated from a service worker with 'require-corp'</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
+<script>
+'use strict';
+
+const SCRIPT = 'resources/require-corp-sw.js';
+const SCOPE = 'resources/in-scope';
+let worker = null;
+
+promise_test(async t => {
+ const registration =
+ await service_worker_unregister_and_register(t, SCRIPT, SCOPE);
+ promise_test(async t => registration.unregister(), 'Clean up global state');
+ worker = registration.installing;
+ await wait_for_state(t, worker, 'activated');
+}, 'Set up global state');
+
+promise_test(async t => {
+ const p = new Promise(resolve =>
+ navigator.serviceWorker.addEventListener('message', resolve,
+ {once: true}));
+ worker.postMessage('WithCorp');
+ assert_equals((await p).data, 'opaque');
+}, "fetch() to 'CORP: cross-origin' response should succeed.");
+
+promise_test(async t => {
+ const p = new Promise(resolve =>
+ navigator.serviceWorker.addEventListener('message', resolve,
+ {once: true}));
+ worker.postMessage('WithoutCorp');
+ assert_equals((await p).data, 'Exception: TypeError');
+}, "fetch() to no CORP response should not succeed.");
+
+promise_test(async t => {
+ const scope = `${SCOPE}-2`;
+ await service_worker_unregister(t, scope);
+ const promise = navigator.serviceWorker.register(
+ 'resources/require-corp-sw-import-scripts.js', {scope});
+ await promise_rejects_js(t, TypeError, promise, 'register() should fail.');
+}, 'importScripts() fails for a script with no corp.');
+
+promise_test(async t => {
+ const scope = `${SCOPE}-3`;
+ await service_worker_unregister(t, scope);
+ const registration = await navigator.serviceWorker.register(
+ 'resources/require-corp-sw-import-scripts.js?corp=cross-origin', {scope});
+ t.add_cleanup(() => registration.unregister());
+}, 'importScripts() succeeds for a script with corp: cross-origin.');
+</script>