File: test_bug1729662.html

package info (click to toggle)
firefox 148.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,719,656 kB
  • sloc: cpp: 7,618,171; javascript: 6,701,506; ansic: 3,781,787; python: 1,418,364; xml: 638,647; asm: 438,962; java: 186,285; sh: 62,885; makefile: 19,010; objc: 13,092; perl: 12,763; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (63 lines) | stat: -rw-r--r-- 2,108 bytes parent folder | download
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
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <title>Test back/forward after pushState</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
  <script>
    SimpleTest.waitForExplicitFinish();
    SimpleTest.requestFlakyTimeout("Need to wait to make sure an event does not fire");

    function waitForEvent(target, event) {
      return new Promise(resolve =>
        target.addEventListener(event, resolve, { once: true }));
    }

    async function runTest() {
      // Target page needs to be the initial load so that the synchronously
      // available window is reused and we can attach popstate listeners.
      const win = window.open('file_bug1729662.html');

      let timeoutID;
      let loadCount = 0;
      let bc = new BroadcastChannel("bug1729662");
      bc.onmessage = ({ data }) => {
        if (data != 'load') return;
        if (++loadCount > 1) {
          // We should only get one load event in win
          clearTimeout(timeoutID);
        }
      };

      // We should only go back and forward once
      // The popstate for back will have state == null, see file_bug1729662.html
      const state1 = await waitForEvent(win, 'popstate');
      is(state1.state, null, 'got expected state for history.back');

      const state2 = await waitForEvent(win, 'popstate');
      is(state2.state, 1, 'got expected state for history.forward');

      // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
      const timeout = new Promise(resolve => timeoutID = setTimeout(resolve, 1000, 'timeout'));
      const result = await Promise.race([
        waitForEvent(win, 'popstate'),
        timeout
      ]);
      is(result, 'timeout', 'Got no more popstate');

      is(loadCount, isXOrigin ? 0 : 1, 'Got exactly one (zero for xorigin) load events in win');

      clearTimeout(timeoutID);
      win.close();

      SimpleTest.finish();
    }
  </script>
</head>
<body onload="runTest();">
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test"></pre>
</body>
</html>