summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/fenced-frame/serviceWorker-dedicated-worker.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/fenced-frame/serviceWorker-dedicated-worker.https.html')
-rw-r--r--testing/web-platform/tests/fenced-frame/serviceWorker-dedicated-worker.https.html71
1 files changed, 71 insertions, 0 deletions
diff --git a/testing/web-platform/tests/fenced-frame/serviceWorker-dedicated-worker.https.html b/testing/web-platform/tests/fenced-frame/serviceWorker-dedicated-worker.https.html
new file mode 100644
index 0000000000..92533e3873
--- /dev/null
+++ b/testing/web-platform/tests/fenced-frame/serviceWorker-dedicated-worker.https.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<title>Service Worker: Check if dedicated workers are controlled</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/utils.js"></script>
+<script src="/common/utils.js"></script>
+
+<body>
+ <script>
+ const frameUrl = './resources/serviceWorker-dedicated-worker-inner.html';
+ const unregisterAllSW = async () => {
+ const regs = await navigator.serviceWorker.getRegistrations();
+ return Promise.all(regs.map(reg => reg.unregister()));
+ };
+
+ promise_test(async t => {
+ t.add_cleanup(unregisterAllSW);
+ const key = token();
+
+ // Inside the fenced frame, the service worker is registered and fetch
+ // request is triggered from the dedicated worker to the url that is
+ // handled in the service worker.
+ const url = `${frameUrl}?useServiceWorkerInFencedFrame=true`;
+ attachFencedFrame(generateURL(url, [key]));
+ const result = await nextValueFromServer(key);
+ assert_equals(result, "OK");
+ }, "Fenced frame's service workers can control fenced frame's dedicated workers");
+
+ promise_test(async t => {
+ t.add_cleanup(unregisterAllSW);
+ const key = token();
+
+ // Set a service worker in the fenced frame. Inside the fenced frame, a
+ // dedicated worker is created and triggers a fetch request. But we don't
+ // use the fetch request result in this test. This test will check if the
+ // dedicated worker in the parent frame is controlled by the SW in FF.
+ const url = `${frameUrl}?useServiceWorkerInFencedFrame=true`;
+ attachFencedFrame(generateURL(url, [key]));
+ await nextValueFromServer(key);
+
+ const checkIfWorkerIsControlled = async () => {
+ const dedicated_worker = new Worker('resources/serviceWorker-dedicated-worker.js');
+ return new Promise((resolve, reject) => {
+ dedicated_worker.addEventListener('message', e => {
+ resolve(e.data)
+ });
+ dedicated_worker.postMessage('fetch');
+ });
+ }
+
+ const result = await checkIfWorkerIsControlled()
+ assert_equals(result, "Not Found");
+ }, "Fenced frame's service workers can not control the dedicated workers in the parent frame");
+
+ promise_test(async t => {
+ t.add_cleanup(unregisterAllSW);
+ const key = token();
+
+ // Register a service worker in the parent frame.
+ await navigator.serviceWorker.register('resources/serviceWorker-dedicated-worker-sw.js', { scope: '/' });
+ await navigator.serviceWorker.ready;
+
+ // Inside the fenced frame, fetch request to unexisting URL is triggered
+ // from the dedicated worker.
+ attachFencedFrame(generateURL(frameUrl, [key]));
+
+ const result = await nextValueFromServer(key);
+ assert_equals(result, "Not Found");
+ }, "Service workers in the parent frame of fenced frames can not control dedicated workers in fenced frames");
+ </script>
+</body>