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
|
<!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;
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 }
);
win.document.body.appendChild(iframe);
if (sandbox) {
iframe.sandbox = sandbox;
}
iframe.src = src;
});
}
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.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.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.navigator.cookieEnabled,
value,
"Navigator.cookieEnabled returns expected value in sandboxed iframe."
);
});
win.close();
}
add_task(async function doTests() {
for (let test of TESTS) {
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>
|