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 134 135 136 137 138 139 140 141 142
|
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1753586
-->
<head>
<meta charset="utf-8">
<title>Test for Navigator.cookieEnabled</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script type="application/javascript">
"use strict";
/** Test for Bug 1753586 */
const BEHAVIOR_REJECT = 2;
const BEHAVIOR_REJECT_TRACKER = 4;
const BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN = 5;
function behavior_to_string(behavior) {
switch (behavior) {
case BEHAVIOR_REJECT:
return "BEHAVIOR_REJECT";
case BEHAVIOR_REJECT_TRACKER:
return "BEHAVIOR_REJECT_TRACKER";
case BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN:
return "BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN";
default:
throw new Error("unreachable");
}
}
const TESTS = [
{ cookieBehavior: BEHAVIOR_REJECT, expect: false },
{ cookieBehavior: BEHAVIOR_REJECT_TRACKER, expect: true },
{
cookieBehavior: BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN,
expect: true,
},
];
SimpleTest.waitForExplicitFinish();
function createAndWaitIframeLoading(win, src, sandbox) {
return new Promise(resolve => {
let iframe = win.document.createElement("iframe");
iframe.addEventListener(
"load",
() => resolve(iframe),
{ once: true }
);
if (sandbox) {
iframe.sandbox = sandbox;
}
iframe.src = src;
win.document.body.appendChild(iframe);
});
}
async function runTestInAnotherWindow(expect) {
let win = window.open();
is(
win.navigator.cookieEnabled,
expect,
`Navigator.cookieEnabled returns expected value in first-party context.`
);
// Create a first-party iframe and check if navigator.cookieEnabled is
// expected.
let iframe = await createAndWaitIframeLoading(
win,
"http://mochi.test:8888/"
);
await SpecialPowers.spawn(iframe, [expect], value => {
is(content.location.href, "http://mochi.test:8888/");
is(
content.navigator.cookieEnabled,
value,
"Navigator.cookieEnabled returns expected value in first-party iframe."
);
});
// Create a third-party iframe and check if navigator.cookieEnabled is
// expected.
iframe = await createAndWaitIframeLoading(
win,
"http://example.com/"
);
await SpecialPowers.spawn(iframe, [expect], value => {
is(content.location.href, "http://example.com/");
is(
content.navigator.cookieEnabled,
value,
"Navigator.cookieEnabled returns expected value in third-party iframe."
);
});
// Create a sandboxed iframe and check if navigator.cookieEnabled is
// expected. It should still return true even if setting cookies in
// sandboxed iframe will throw a security error.
iframe = await createAndWaitIframeLoading(
win,
"http://mochi.test:8888/",
"allow-scripts"
);
await SpecialPowers.spawn(iframe, [expect], value => {
is(content.location.href, "http://mochi.test:8888/");
is(
content.navigator.cookieEnabled,
value,
"Navigator.cookieEnabled returns expected value in sandboxed iframe."
);
});
win.close();
}
add_task(async function doTests() {
for (let test of TESTS) {
info(`cookieBehavior ${behavior_to_string(test.cookieBehavior)} expect ${test.expect}`);
await SpecialPowers.pushPrefEnv({"set": [
["network.cookie.cookieBehavior", test.cookieBehavior],
]});
// We need to run the test in another window so that the cookieBehavior
// setting would take effect.
await runTestInAnotherWindow(test.expect);
}
});
</script>
</head>
<body>
</body>
</html>
|