tor-browser

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

test_trustworthy_loopback.html (2137B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Bug 1732069: Sec-Fetch-Site inconsistent on localhost/IPs</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      7 </head>
      8 <body>
      9 <script type="application/javascript">
     10 
     11 SimpleTest.waitForExplicitFinish();
     12 
     13 let testsSucceeded = 0;
     14 
     15 let win;
     16 function checkTestsDone() {
     17  testsSucceeded++;
     18  if (testsSucceeded == 3) {
     19    win.close();
     20    SimpleTest.finish();
     21  }
     22 }
     23 
     24 var script = SpecialPowers.loadChromeScript(() => {
     25  /* eslint-env mozilla/chrome-script */
     26  Services.obs.addObserver(function onExamResp(subject) {
     27    let channel = subject.QueryInterface(Ci.nsIHttpChannel);
     28    if (!channel.URI.spec.includes("localhost") ||
     29        channel.URI.spec.startsWith("http://localhost:9898/tests/dom/security/test/sec-fetch/file_trustworthy_loopback.html")) {
     30      return;
     31    }
     32 
     33    const expectedHeaders = {
     34      "localhost:9898": {
     35        "sec-fetch-site": "same-origin",
     36        "sec-fetch-mode": "navigate",
     37        "sec-fetch-dest": "iframe",
     38      },
     39      "sub.localhost:-1": {
     40        "sec-fetch-site": "cross-site",
     41        "sec-fetch-mode": "navigate",
     42        "sec-fetch-dest": "iframe",
     43      },
     44      "localhost:9899": {
     45        "sec-fetch-site": "same-site",
     46        "sec-fetch-mode": "navigate",
     47        "sec-fetch-dest": "iframe",
     48      },
     49    };
     50 
     51    info(`checking headers for request to ${channel.URI.spec}`);
     52    const expected = expectedHeaders[channel.URI.host + ":" + channel.URI.port];
     53    for (let key in expected) {
     54      try {
     55        is(channel.getRequestHeader(key), expected[key], `${key} header matches`);
     56      } catch (e) {
     57        ok(false, "failed to check headers");
     58      }
     59    }
     60    sendAsyncMessage("test-end");
     61  }, "http-on-stop-request");
     62 });
     63 
     64 script.addMessageListener("test-end", () => {
     65  checkTestsDone();
     66 });
     67 
     68 SpecialPowers.pushPrefEnv({set: [
     69  ["network.proxy.allow_hijacking_localhost", true],
     70 ]}).then(function() {
     71  win = window.open("http://localhost:9898/tests/dom/security/test/sec-fetch/file_trustworthy_loopback.html");
     72 });
     73 
     74 </script>
     75 </body>
     76 </html>