diff options
Diffstat (limited to 'dom/locks/test')
-rw-r--r-- | dom/locks/test/file_strongworker.js | 5 | ||||
-rw-r--r-- | dom/locks/test/mochitest.ini | 8 | ||||
-rw-r--r-- | dom/locks/test/test_strongworker.html | 44 |
3 files changed, 57 insertions, 0 deletions
diff --git a/dom/locks/test/file_strongworker.js b/dom/locks/test/file_strongworker.js new file mode 100644 index 0000000000..36871ad31a --- /dev/null +++ b/dom/locks/test/file_strongworker.js @@ -0,0 +1,5 @@ +navigator.locks.request("exclusive", () => { + const channel = new BroadcastChannel("strongworker"); + channel.postMessage("lock acquired"); +}); +postMessage("onload"); diff --git a/dom/locks/test/mochitest.ini b/dom/locks/test/mochitest.ini new file mode 100644 index 0000000000..48a8d7df1d --- /dev/null +++ b/dom/locks/test/mochitest.ini @@ -0,0 +1,8 @@ +[DEFAULT] +scheme = https +prefs = + dom.weblocks.enabled=true + +[test_strongworker.html] +support-files = + file_strongworker.js diff --git a/dom/locks/test/test_strongworker.html b/dom/locks/test/test_strongworker.html new file mode 100644 index 0000000000..9c6905919c --- /dev/null +++ b/dom/locks/test/test_strongworker.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<script src="/tests/SimpleTest/SimpleTest.js"></script> +<link rel="stylesheet" href="/tests/SimpleTest/test.css"/> + +<script> + SimpleTest.waitForExplicitFinish(); + + async function run() { + // Bug 1746646: Make mochitests work with TCP enabled (cookieBehavior = 5) + // Acquire storage access permission here so that the BroadcastChannel used to + // communicate with the opened windows works in xorigin tests. Otherwise, + // the iframe containing this page is isolated from first-party storage access, + // which isolates BroadcastChannel communication. + if (isXOrigin) { + SpecialPowers.wrap(document).notifyUserGestureActivation(); + await SpecialPowers.addPermission( + "storageAccessAPI", + true, + window.location.href + ); + await SpecialPowers.wrap(document).requestStorageAccess(); + } + const channel = new BroadcastChannel("strongworker"); + await navigator.locks.request("exclusive", async () => { + await new Promise(resolve => { + let worker = new Worker("./file_strongworker.js"); + worker.onmessage = resolve; // onload + }); + const query = await navigator.locks.query(); + is(query.pending.length, 1, "Pending request exists"); + + // Garbage collect the worker + SpecialPowers.DOMWindowUtils.garbageCollect(); + }); + + channel.onmessage = async event => { + const query = await navigator.locks.query(); + is(query.pending.length, 0, "No pending request"); + SimpleTest.finish(); + }; + } + run(); +</script> |