tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_new_shentry_during_history_navigation.html (2980B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <meta charset="utf-8">
      5  <title>Test adding new session history entries while navigating to another one</title>
      6  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      7  <link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
      8  <script>
      9    SimpleTest.waitForExplicitFinish();
     10 
     11    var win;
     12 
     13    function waitForMessage(msg) {
     14      return new Promise(
     15        function(resolve) {
     16          window.addEventListener("message",
     17            function(event) {
     18              is(event.data, msg, "Got the expected message " + msg);
     19              resolve();
     20            }, { once: true }
     21          );
     22        }
     23      );
     24    }
     25 
     26    async function test() {
     27 
     28      let loadPromise = waitForMessage("load");
     29      win = window.open("file_new_shentry_during_history_navigation_1.html");
     30      await loadPromise;
     31 
     32      loadPromise = waitForMessage("load");
     33      win.location.href = "file_new_shentry_during_history_navigation_2.html";
     34      await loadPromise;
     35 
     36      let beforeunloadPromise = waitForMessage("beforeunload");
     37      win.history.back();
     38      await beforeunloadPromise;
     39      await waitForMessage("load");
     40 
     41      win.history.back();
     42      SimpleTest.requestFlakyTimeout("Test that history.back() does not work on the initial entry.");
     43      setTimeout(function() {
     44          win.onmessage = null;
     45          win.close();
     46          testBfcache();
     47      }, 500);
     48      window.onmessage = function(event) {
     49        ok(false, "Should not get a message " + event.data);
     50      }
     51    }
     52 
     53    async function testBfcache() {
     54      let bc = SpecialPowers.wrap(BroadcastChannel).unpartitionedTestingChannel("new_shentry_during_history_navigation");
     55      let pageshowCount = 0;
     56      bc.onmessage = function(event) {
     57        if (event.data.type == "pageshow") {
     58          ++pageshowCount;
     59          info("pageshow: " + pageshowCount + ", page: " + event.data.page);
     60          if (pageshowCount == 1) {
     61            ok(!event.data.persisted, "The page should not be bfcached.");
     62            bc.postMessage("loadnext");
     63          } else if (pageshowCount == 2) {
     64            ok(!event.data.persisted, "The page should not be bfcached.");
     65            bc.postMessage("loadnext");
     66          } else if (pageshowCount == 3) {
     67            ok(!event.data.persisted, "The page should not be bfcached.");
     68            bc.postMessage("back");
     69          } else if (pageshowCount == 4) {
     70            ok(event.data.persisted, "The page should be bfcached.");
     71            bc.postMessage("forward");
     72          } else if (pageshowCount == 5) {
     73            ok(event.data.page.includes("v2"), "Should have gone forward.");
     74            bc.postMessage("close");
     75            SimpleTest.finish();
     76          }
     77        }
     78      };
     79      win = window.open("file_new_shentry_during_history_navigation_3.html", "", "noopener");
     80 
     81    }
     82 
     83  </script>
     84 </head>
     85 <body onload="test()">
     86 <p id="display"></p>
     87 <div id="content" style="display: none"></div>
     88 <pre id="test"></pre>
     89 </body>
     90 </html>