File: test_navigator_cookieEnabled.html

package info (click to toggle)
firefox 149.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,767,760 kB
  • sloc: cpp: 7,416,064; javascript: 6,752,859; ansic: 3,774,850; python: 1,250,473; xml: 641,578; asm: 439,191; java: 186,617; sh: 56,634; makefile: 18,856; objc: 13,092; perl: 12,763; pascal: 5,960; yacc: 4,583; cs: 3,846; lex: 1,720; ruby: 1,002; php: 436; lisp: 258; awk: 105; sql: 66; sed: 53; csh: 10; exp: 6
file content (142 lines) | stat: -rw-r--r-- 3,909 bytes parent folder | download | duplicates (2)
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>