<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <title>Test referrer with going back</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
  <script>
    SimpleTest.waitForExplicitFinish();

    // file_bug1773192_1.html will send a message with some data on pageshow.
    function waitForData(bc) {
      return new Promise(resolve => {
        bc.addEventListener(
          "message",
          ({ data }) => {
            resolve(data);
          },
          { once: true }
        );
      });
    }
    async function runTest() {
      let bc = new BroadcastChannel("bug1743353");

      let getData = waitForData(bc);

      window.open("file_bug1773192_1.html", "", "noreferrer");

      await getData.then(({ referrer }) => {
        is(referrer, "", "Referrer should be empty at first.");
      });

      getData = waitForData(bc);

      // When file_bug1773192_1.html receives this message it will navigate to
      // file_bug1773192_2.html. file_bug1773192_2.html removes itself from
      // history with replaceState and submits a form with the POST method to
      // file_bug1773192_3.sjs. file_bug1773192_3.sjs goes back in history.
      // We should end up back at file_bug1773192_1.html, which will send a
      // message with some data on pageshow.
      bc.postMessage("next");

      await getData.then(({ location, referrer }) => {
        let firstURL = new URL("file_bug1773192_1.html", location).toString();
        is(location, firstURL, "Location should be the first page again.");
        is(referrer, firstURL, "Referrer should also be the first page.");
      });

      bc.postMessage("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>
