tor-browser

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

file_testloadflags.js (3348B)


      1 "use strict";
      2 
      3 const SCRIPT_URL = SimpleTest.getTestFileURL(
      4  "file_testloadflags_chromescript.js"
      5 );
      6 
      7 let gScript;
      8 var gExpectedCookies;
      9 var gExpectedHeaders;
     10 var gExpectedLoads;
     11 
     12 var gObs;
     13 var gPopup;
     14 
     15 var gHeaders = 0;
     16 var gLoads = 0;
     17 
     18 // setupTest() is run from 'onload='.
     19 function setupTest(iframeUri, domain, cookies, loads, headers) {
     20  info(
     21    "setupTest uri: " +
     22      iframeUri +
     23      " domain: " +
     24      domain +
     25      " cookies: " +
     26      cookies +
     27      " loads: " +
     28      loads +
     29      " headers: " +
     30      headers
     31  );
     32 
     33  SimpleTest.waitForExplicitFinish();
     34 
     35  var prefSet = new Promise(resolve => {
     36    SpecialPowers.pushPrefEnv(
     37      {
     38        set: [
     39          ["network.cookie.cookieBehavior", 1],
     40          ["network.cookie.sameSite.schemeful", false],
     41        ],
     42      },
     43      resolve
     44    );
     45  });
     46 
     47  gExpectedCookies = cookies;
     48  gExpectedLoads = loads;
     49  gExpectedHeaders = headers;
     50 
     51  gScript = SpecialPowers.loadChromeScript(SCRIPT_URL);
     52  gScript.addMessageListener("info", ({ str }) => info(str));
     53  gScript.addMessageListener("ok", ({ c, m }) => ok(c, m));
     54  gScript.addMessageListener("observer:gotCookie", ({ cookie, uri }) => {
     55    isnot(
     56      cookie.indexOf("oh=hai"),
     57      -1,
     58      "cookie 'oh=hai' is in header for " + uri
     59    );
     60    ++gHeaders;
     61  });
     62 
     63  var scriptReady = new Promise(resolve => {
     64    gScript.addMessageListener("init:return", resolve);
     65    gScript.sendAsyncMessage("init", { domain });
     66  });
     67 
     68  // Listen for MessageEvents.
     69  window.addEventListener("message", messageReceiver);
     70 
     71  Promise.all([prefSet, scriptReady]).then(() => {
     72    // load a window which contains an iframe; each will attempt to set
     73    // cookies from their respective domains.
     74    gPopup = window.open(iframeUri, "hai", "width=100,height=100");
     75  });
     76 }
     77 
     78 function finishTest() {
     79  gScript.addMessageListener("shutdown:return", () => {
     80    gScript.destroy();
     81    SimpleTest.finish();
     82  });
     83  gScript.sendAsyncMessage("shutdown");
     84 }
     85 
     86 /** Receives MessageEvents to this window. */
     87 // Count and check loads.
     88 function messageReceiver(evt) {
     89  ok(
     90    evt.data == "f_lf_i msg data img" || evt.data == "f_lf_i msg data page",
     91    "message data received from popup"
     92  );
     93  if (evt.data == "f_lf_i msg data img") {
     94    info("message data received from popup for image");
     95  }
     96  if (evt.data == "f_lf_i msg data page") {
     97    info("message data received from popup for page");
     98  }
     99  if (evt.data != "f_lf_i msg data img" && evt.data != "f_lf_i msg data page") {
    100    info("got this message but don't know what it is " + evt.data);
    101    gPopup.close();
    102    window.removeEventListener("message", messageReceiver);
    103 
    104    finishTest();
    105    return;
    106  }
    107 
    108  // only run the test when all our children are done loading & setting cookies
    109  if (++gLoads == gExpectedLoads) {
    110    gPopup.close();
    111    window.removeEventListener("message", messageReceiver);
    112 
    113    runTest();
    114  }
    115 }
    116 
    117 // runTest() is run by messageReceiver().
    118 // Check headers, and count and check cookies.
    119 function runTest() {
    120  // set a cookie from a domain of "localhost"
    121  document.cookie = "o=noes";
    122 
    123  is(gHeaders, gExpectedHeaders, "number of observed request headers");
    124  gScript.addMessageListener("getCookieCount:return", ({ count }) => {
    125    is(count, gExpectedCookies, "total number of cookies");
    126    finishTest();
    127  });
    128 
    129  gScript.sendAsyncMessage("getCookieCount");
    130 }