diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
commit | 0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d (patch) | |
tree | a31f07c9bcca9d56ce61e9a1ffd30ef350d513aa /dom/workers/test/test_multi_sharedWorker_lifetimes_nobfcache.html | |
parent | Initial commit. (diff) | |
download | firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.tar.xz firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.zip |
Adding upstream version 115.8.0esr.upstream/115.8.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/workers/test/test_multi_sharedWorker_lifetimes_nobfcache.html')
-rw-r--r-- | dom/workers/test/test_multi_sharedWorker_lifetimes_nobfcache.html | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/dom/workers/test/test_multi_sharedWorker_lifetimes_nobfcache.html b/dom/workers/test/test_multi_sharedWorker_lifetimes_nobfcache.html new file mode 100644 index 0000000000..5049ead1a9 --- /dev/null +++ b/dom/workers/test/test_multi_sharedWorker_lifetimes_nobfcache.html @@ -0,0 +1,126 @@ +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<!DOCTYPE HTML> +<html> + <head> + <title>Test for SharedWorker</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"> + <script class="testbody" type="text/javascript"> + "use strict"; + + function runTest() { + const windowRelativeURL = "multi_sharedWorker_frame_nobfcache.html"; + const storedData = "0123456789abcdefghijklmnopqrstuvwxyz"; + var bc, bc2; + bc = new BroadcastChannel("bugSharedWorkerLiftetime"); + bc.onmessage = (event) => { + var msg = event.data; + var command = msg.command; + if (command == "finished") { + bc.close(); + bc2.close(); + SimpleTest.finish(); + } else if (command == "debug") { + info(msg.message); + } else if (command == "fromWorker" || command == "loaded") { + sendToGenerator(msg.workerMessage); + } + } + bc2 = new BroadcastChannel("navigate"); + bc2.onmessage = (event) => { + if (event.data.command == "loaded") { + sendToGenerator(); + } + } + + function postToWorker(workerMessage) { + bc.postMessage({command: "postToWorker", workerMessage}); + } + + let testGenerator = (function*() { + SimpleTest.waitForExplicitFinish(); + + // Open the window + window.open(windowRelativeURL, "testWin", "noopener"); + yield undefined; + + // Retrieve data from worker + postToWorker({ command: "retrieve" }); + + let msg = yield undefined; + + // Verify there is no data stored + is(msg.type, "result", "Got a result message"); + is(msg.data, undefined, "No data stored yet"); + + // Store data, and retrieve it + postToWorker({ command: "store", data: storedData }); + postToWorker({ command: "retrieve" }); + + msg = yield undefined; + // Verify there is data stored + is(msg.type, "result", "Got a result message"); + is(msg.data, storedData, "Got stored data"); + + + info("Navigating to a different page"); + // Current subpage should not go into bfcache because of the Cache-Control + // headers we have set. + bc.postMessage({command: "navigate", location: "navigate.html"}); + yield undefined; + + info("Navigating to " + windowRelativeURL); + bc2.postMessage({command: "navigate", location: windowRelativeURL }); + yield undefined; + + postToWorker({ command: "retrieve" }); + + msg = yield undefined; + is(msg.type, "result", "Got a result message"); + is(msg.data, undefined, "No data stored"); + + postToWorker({ command: "store", data: storedData }); + postToWorker({ command: "retrieve" }); + + msg = yield undefined; + is(msg.type, "result", "Got a result message"); + is(msg.data, storedData, "Got stored data"); + + bc.postMessage({command: "finish"}); + })(); + + let sendToGenerator = testGenerator.next.bind(testGenerator); + testGenerator.next(); + } + + SimpleTest.waitForExplicitFinish(); + if (isXOrigin) { + // 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. + SpecialPowers.wrap(document).notifyUserGestureActivation(); + SpecialPowers.pushPrefEnv({ + set: [["privacy.partition.always_partition_third_party_non_cookie_storage", false]], + }).then(() => { + SpecialPowers.pushPermissions([{'type': 'storageAccessAPI', 'allow': 1, 'context': document}], () =>{ + SpecialPowers.wrap(document).requestStorageAccess().then(() => { + runTest(); + }).then(() => { + SpecialPowers.removePermission("3rdPartyStorage^http://mochi.test:8888", "http://mochi.xorigin-test:8888"); + }); + }); + }); + } else { + runTest(); + } + + </script> + </head> + <body> + </body> +</html> |