File: clear-window-name.https.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 (130 lines) | stat: -rw-r--r-- 4,302 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
<!doctype html>
<html>
<head>
  <title>Clear window.name when cross-origin</title>
  <meta name="timeout" content="long">
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script src="/common/utils.js"></script>
</head>
<body>
  <script>

function anchorClick(n) {
  const hyperlink = document.body.appendChild(document.createElement("a"))
  hyperlink.rel = "noopener";
  hyperlink.target = "_blank";
  hyperlink.href = n;
  hyperlink.click();
}

async function pollResultAndCheck(t, id, expected) {
  const stashURL = new URL("resources/window-name-stash.py", location);
  stashURL.searchParams.set('id', id);

  let res = "NONE";
  while (res == "NONE") {
    await new Promise(resolve => { t.step_timeout(resolve, 100); });

    const response = await fetch(stashURL);
    res = await response.text();
  }
  if (res !== expected) {
    assert_unreached('Stash result does not equal expected result.')
  }
}

promise_test(async t => {
  const id = token();

  window.open(`resources/window-name.sub.html?report=${id}|close`, id);
  await pollResultAndCheck(t, id, id);
}, "Window.name is not reset when there is an opener around");

promise_test(async t => {
  const id = token();

  window.open(`resources/window-name.sub.html?cross|same|report=${id}|close`, id);
  await pollResultAndCheck(t, id, id);
}, "Window.name is not reset when there is an opener around (cross-origin)");

promise_test(async t => {
  const id = token();

  w = window.open("about:blank", id);
  w.location = `resources/window-name.sub.html?cross|same|report=${id}|close`;
  await pollResultAndCheck(t, id, id);
}, "Window.name is not reset at the first navigation away from loaded initial about:blank");

promise_test(async t => {
  const id = token();

  window.open(`resources/window-name.sub.html?report=${id}|close`, id, "noopener");
  await pollResultAndCheck(t, id, id);
}, "Window.name is not reset at the first navigation away from initial about:blank with noopener");

promise_test(async t => {
  const id = token();

  window.open(`resources/window-name.sub.html?cross|same|report=${id}|close`, id, "noopener");
  await pollResultAndCheck(t, id, "");
}, "Window.name is reset at the first cross-origin navigation with noopener");

promise_test(async t => {
  const id = token();

  let win = window.open(`resources/window-name.sub.html?report=${id}|close`, id);
  win.opener = null;
  await pollResultAndCheck(t, id, id);
}, "Window.name is not reset at the first navigation away from initial about:blank with window.opener set to null");

promise_test(async t => {
  const id = token();

  let win = window.open(`resources/window-name.sub.html?same|report=${id}|close`, id);
  win.opener = null;
  await pollResultAndCheck(t, id, id);
}, "Window.name is not reset at the same-origin navigation with window.opener set to null");

promise_test(async t => {
  const id = token();

  let win = window.open(`resources/window-name.sub.html?cross|same|report=${id}|close`, id);
  win.opener = null;
  await pollResultAndCheck(t, id, "");
}, "Window.name is reset at the first first cross-origin navigation with window.opener set to null");

promise_test(async t => {
  const id = token();

  anchorClick(`resources/window-name.sub.html?set=${id}|report=${id}|close`);
  await pollResultAndCheck(t, id, id);
}, "Window.name is set by the window");

promise_test(async t => {
  const id = token();

  anchorClick(`resources/window-name.sub.html?set=${id}|cross|same|report=${id}|close`);
  await pollResultAndCheck(t, id, "");
}, "Window.name is reset at the first cross-origin navigation");

promise_test(async t => {
  const id = token();

  window.open(`resources/window-name.sub.html?open|navOpener=about:blank|reportOpener=${id}|closeOpener|close`, id, "noopener");
  await pollResultAndCheck(t, id, id);
}, "window.name is not reset after navigating to an about:blank page from a non-about:blank page");


promise_test(async t => {
  const id = token();
  const domain = window.location.host;

  anchorClick(`resources/window-name.sub.html?sub|set=${id}|setDomain=${domain}|sub|report=${id}|close`);
  await pollResultAndCheck(t, id, id);
}, "Window.name is not reset if the document.domain is set to the parent domain");


  </script>
</body>
</html>