tor-browser

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

test_bug1747033.html (3119B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <meta charset="utf-8">
      5  <title>Test history after loading multipart</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    async function runTest() {
     12      let bc = SpecialPowers.wrap(BroadcastChannel).unpartitionedTestingChannel("bug1747033");
     13      new Promise(resolve => {
     14        bc.addEventListener("message", ({ data: { historyLength } }) => {
     15          is(historyLength, 1, "Correct length for first normal load.");
     16 
     17          resolve();
     18        }, { once: true });
     19 
     20        window.open("file_bug1747033.sjs", "", "noopener");
     21      }).then(() => {
     22        return new Promise(resolve => {
     23          let loaded = 0;
     24          bc.addEventListener("message", function listener({ data: { historyLength } }) {
     25            ++loaded;
     26 
     27            is(historyLength, 2, `Correct length for multipart load ${loaded}.`);
     28 
     29            // We want 3 parts in total.
     30            if (loaded < 3) {
     31              if (loaded == 2) {
     32                // We've had 2 parts, make the server send the last part.
     33                fetch("file_bug1747033.sjs?sendLastPart");
     34              } else {
     35                fetch("file_bug1747033.sjs?sendNextPart");
     36              }
     37              return;
     38            }
     39 
     40            bc.removeEventListener("message", listener);
     41            resolve();
     42          });
     43 
     44          bc.postMessage({ cmd: "load", arg: "file_bug1747033.sjs?multipart" });
     45        });
     46      }).then(() => {
     47        return new Promise(resolve => {
     48          bc.addEventListener("message", ({ data: { historyLength } }) => {
     49            is(historyLength, 2, "Correct length after calling replaceState in multipart.");
     50 
     51            resolve();
     52          }, { once: true });
     53 
     54          bc.postMessage({ cmd: "replaceState", arg: "file_bug1747033.sjs?replaced" });
     55        });
     56      }).then(() => {
     57        return new Promise(resolve => {
     58          bc.addEventListener("message", ({ data: { historyLength } }) => {
     59            is(historyLength, 3, "Correct length for first normal load after multipart.");
     60 
     61            resolve();
     62          }, { once: true });
     63 
     64          bc.postMessage({ cmd: "load", arg: "file_bug1747033.sjs" });
     65        });
     66      }).then(() => {
     67        return new Promise(resolve => {
     68          let goneBack = 0;
     69          bc.addEventListener("message", function listener({ data: { historyLength } }) {
     70            ++goneBack;
     71 
     72            is(historyLength, 3, "Correct length after going back.");
     73 
     74            if (goneBack == 1) {
     75              bc.postMessage({ cmd: "back" });
     76            } else if (goneBack == 2) {
     77              bc.removeEventListener("message", listener);
     78              resolve();
     79            }
     80          });
     81 
     82          bc.postMessage({ cmd: "back" });
     83        });
     84      }).then(() => {
     85        bc.postMessage({ cmd: "close" });
     86 
     87        SimpleTest.finish();
     88      });
     89    }
     90  </script>
     91 </head>
     92 <body onload="runTest();">
     93 <p id="display"></p>
     94 <div id="content" style="display: none"></div>
     95 <pre id="test"></pre>
     96 </body>
     97 </html>