Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!-- Any copyright is dedicated to the Public Domain.
<!DOCTYPE HTML>
<html>
<head>
<title>Test CacheStorage does not prevent worker GC</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
<script type="text/javascript" src="driver.js"></script>
</head>
<body>
<iframe id="frame"></iframe>
<script class="testbody" type="text/javascript">
function startWorker() {
return new Promise(resolve => {
var w = new Worker("idle_worker.js");
w.addEventListener("message", function onMessage(evt) {
if (evt.data === "LOADED") {
w.removeEventListener("message", onMessage);
resolve(w);
}
});
});
}
function gc() {
return new Promise(resolve => {
SpecialPowers.exactGC(resolve);
});
}
SimpleTest.waitForExplicitFinish();
async function test() {
let w = await startWorker();
let weakWorker = SpecialPowers.Cu.getWeakReference(w);
ok(weakWorker, "worker supports weak reference");
w = null;
await gc();
await gc();
ok(!weakWorker.get(), "worker weak reference should be garbage collected");
SimpleTest.finish();
}
// Bug 1746646: Make mochitests work with TCP enabled (cookieBehavior = 5)
// Acquire storage access permission here so that the Cache API is avaialable
SpecialPowers.wrap(document).notifyUserGestureActivation();
SpecialPowers.addPermission("storageAccessAPI", true, window.location.href).then(() => {
SpecialPowers.wrap(document).requestStorageAccess().then(() => {
SpecialPowers.pushPrefEnv({
set: [["privacy.partition.always_partition_third_party_non_cookie_storage", false]],
}).then(() => {
test();
});
});
});
</script>
</body>
</html>