File: test_bug1741132.html

package info (click to toggle)
firefox 147.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,683,320 kB
  • sloc: cpp: 7,607,359; javascript: 6,533,295; ansic: 3,775,223; python: 1,415,500; xml: 634,561; asm: 438,949; java: 186,241; sh: 62,752; makefile: 18,079; objc: 13,092; perl: 12,808; 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 (79 lines) | stat: -rw-r--r-- 2,805 bytes parent folder | download | duplicates (11)
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
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <title>Test form restoration for no-store pages</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
  <script>
    // The number of entries which we keep in the BFCache (see nsSHistory.h).
    const VIEWER_WINDOW = 3;

    SimpleTest.waitForExplicitFinish();

    async function runTest() {
      let bc = SpecialPowers.wrap(BroadcastChannel).unpartitionedTestingChannel("bug1741132");

      // Setting the pref to 0 should evict all content viewers.
      let load = SpecialPowers.pushPrefEnv({
        set: [["browser.sessionhistory.max_total_viewers", 0]],
      }).then(() => {
        // Set the pref to VIEWER_WINDOW + 2 now, to be sure we
        // could fit all entries.
        SpecialPowers.pushPrefEnv({
          set: [["browser.sessionhistory.max_total_viewers", VIEWER_WINDOW + 2]],
        });
      }).then(() => {
        return new Promise(resolve => {
          bc.addEventListener("message", resolve, { once: true });
          window.open("file_bug1741132.html", "", "noopener");
        });
      });
      // We want to try to keep one entry too many in the BFCache,
      // so we ensure that there's at least VIEWER_WINDOW + 2
      // entries in session history (with one for the displayed
      // page).
      for (let i = 0; i < VIEWER_WINDOW + 2; ++i) {
        load = load.then(() => {
          return new Promise((resolve) => {
            bc.addEventListener("message", resolve, { once: true });
            bc.postMessage({ cmd: "load", arg: `file_bug1741132.html?${i}` });
          });
        });
      }
      load.then(() => {
        return new Promise((resolve) => {
          bc.addEventListener("message", ({ data: persisted }) => {
            resolve(persisted);
          }, { once: true });
          // Go back past the first entry that should be in the BFCache.
          bc.postMessage({ cmd: "go", arg: -(VIEWER_WINDOW + 1) });
        });
      }).then((persisted) => {
        ok(!persisted, "Only 3 pages should be kept in the BFCache");
      }).then(() => {
        return new Promise((resolve) => {
          bc.addEventListener("message", ({ data: persisted }) => {
            resolve(persisted);
          }, { once: true });
          // Go forward to the first entry that should be in the BFCache.
          bc.postMessage({ cmd: "go", arg: 1 });
        });
      }).then((persisted) => {
        ok(persisted, "3 pages should be kept in the BFCache");

        bc.postMessage("close");

        bc.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>