Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: docshell/test/navigation/mochitest.toml
 
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <title>Test adding new session history entries while navigating to another one</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
  <script>
    SimpleTest.waitForExplicitFinish();
    var win;
    function waitForMessage(msg) {
      return new Promise(
        function(resolve) {
          window.addEventListener("message",
            function(event) {
              is(event.data, msg, "Got the expected message " + msg);
              resolve();
            }, { once: true }
          );
        }
      );
    }
    async function test() {
      let loadPromise = waitForMessage("load");
      win = window.open("file_new_shentry_during_history_navigation_1.html");
      await loadPromise;
      loadPromise = waitForMessage("load");
      win.location.href = "file_new_shentry_during_history_navigation_2.html";
      await loadPromise;
      let beforeunloadPromise = waitForMessage("beforeunload");
      win.history.back();
      await beforeunloadPromise;
      await waitForMessage("load");
      win.history.back();
      SimpleTest.requestFlakyTimeout("Test that history.back() does not work on the initial entry.");
      setTimeout(function() {
          win.onmessage = null;
          win.close();
          testBfcache();
      }, 500);
      window.onmessage = function(event) {
        ok(false, "Should not get a message " + event.data);
      }
    }
    async function testBfcache() {
      let bc = SpecialPowers.wrap(BroadcastChannel).unpartitionedTestingChannel("new_shentry_during_history_navigation");
      let pageshowCount = 0;
      bc.onmessage = function(event) {
        if (event.data.type == "pageshow") {
          ++pageshowCount;
          info("pageshow: " + pageshowCount + ", page: " + event.data.page);
          if (pageshowCount == 1) {
            ok(!event.data.persisted, "The page should not be bfcached.");
            bc.postMessage("loadnext");
          } else if (pageshowCount == 2) {
            ok(!event.data.persisted, "The page should not be bfcached.");
            bc.postMessage("loadnext");
          } else if (pageshowCount == 3) {
            ok(!event.data.persisted, "The page should not be bfcached.");
            bc.postMessage("back");
          } else if (pageshowCount == 4) {
            ok(event.data.persisted, "The page should be bfcached.");
            bc.postMessage("forward");
          } else if (pageshowCount == 5) {
            ok(event.data.page.includes("v2"), "Should have gone forward.");
            bc.postMessage("close");
            SimpleTest.finish();
          }
        }
      };
      win = window.open("file_new_shentry_during_history_navigation_3.html", "", "noopener");
    }
  </script>
</head>
<body onload="test()">
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test"></pre>
</body>
</html>