1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
/* import-globals-from antitracking_head.js */
requestLongerTimeout(2);
AntiTracking.runTest(
"ServiceWorkers and Storage Access API",
async _ => {
/* import-globals-from storageAccessAPIHelpers.js */
await noStorageAccessInitially();
await navigator.serviceWorker
.register("empty.js")
.then(
_ => {
ok(false, "ServiceWorker cannot be used!");
},
_ => {
ok(true, "ServiceWorker cannot be used!");
}
)
.catch(e => ok(false, "Promise rejected: " + e));
/* import-globals-from storageAccessAPIHelpers.js */
await callRequestStorageAccess();
let effectiveCookieBehavior = SpecialPowers.isContentWindowPrivate(window)
? SpecialPowers.Services.prefs.getIntPref(
"network.cookie.cookieBehavior.pbmode"
)
: SpecialPowers.Services.prefs.getIntPref(
"network.cookie.cookieBehavior"
);
if (
[
SpecialPowers.Ci.nsICookieService.BEHAVIOR_REJECT,
SpecialPowers.Ci.nsICookieService.BEHAVIOR_REJECT_FOREIGN,
].includes(effectiveCookieBehavior)
) {
await navigator.serviceWorker
.register("empty.js")
.then(
_ => {
ok(false, "ServiceWorker cannot be used!");
},
_ => {
ok(true, "ServiceWorker cannot be used!");
}
)
.catch(e => ok(false, "Promise rejected: " + e));
} else {
await navigator.serviceWorker
.register("empty.js")
.then(
reg => {
ok(true, "ServiceWorker can be used!");
return reg;
},
_ => {
ok(false, "ServiceWorker cannot be used! " + _);
}
)
.then(
reg => reg.unregister(),
_ => {
ok(false, "unregister failed");
}
)
.catch(e => ok(false, "Promise rejected: " + e));
}
},
async _ => {
/* import-globals-from storageAccessAPIHelpers.js */
await hasStorageAccessInitially();
await navigator.serviceWorker
.register("empty.js")
.then(
reg => {
ok(true, "ServiceWorker can be used!");
return reg;
},
_ => {
ok(false, "ServiceWorker cannot be used!");
}
)
.then(
reg => reg.unregister(),
_ => {
ok(false, "unregister failed");
}
)
.catch(e => ok(false, "Promise rejected: " + e));
/* import-globals-from storageAccessAPIHelpers.js */
await callRequestStorageAccess();
// For non-tracking windows, calling the API is a no-op
await navigator.serviceWorker
.register("empty.js")
.then(
reg => {
ok(true, "ServiceWorker can be used!");
return reg;
},
_ => {
ok(false, "ServiceWorker cannot be used!");
}
)
.then(
reg => reg.unregister(),
_ => {
ok(false, "unregister failed");
}
)
.catch(e => ok(false, "Promise rejected: " + e));
},
async _ => {
await new Promise(resolve => {
Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, () =>
resolve()
);
});
},
[
["dom.serviceWorkers.exemptFromPerDomainMax", true],
["dom.ipc.processCount", 1],
["dom.serviceWorkers.enabled", true],
["dom.serviceWorkers.testing.enabled", true],
],
false,
false
);
|