tor-browser

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

referrer_helper.js (3448B)


      1 // This helper expects these globals to be defined.
      2 /* global PARAMS, SJS, testCases */
      3 
      4 /*
      5 * common functionality for iframe, anchor, and area referrer attribute tests
      6 */
      7 const GET_RESULT = SJS + "ACTION=get-test-results";
      8 const RESET_STATE = SJS + "ACTION=resetState";
      9 
     10 SimpleTest.waitForExplicitFinish();
     11 var advance = function () {
     12  tests.next();
     13 };
     14 
     15 /**
     16 * Listen for notifications from the child.
     17 * These are sent in case of error, or when the loads we await have completed.
     18 */
     19 window.addEventListener("message", function (event) {
     20  if (event.data == "childLoadComplete") {
     21    // all loads happen, continue the test.
     22    advance();
     23  }
     24 });
     25 
     26 /**
     27 * helper to perform an XHR
     28 * to do checkIndividualResults and resetState
     29 */
     30 function doXHR(aUrl, onSuccess, onFail) {
     31  // The server is at http[s]://example.com so we need cross-origin XHR.
     32  var xhr = new XMLHttpRequest({ mozSystem: true });
     33  xhr.responseType = "json";
     34  xhr.onload = function () {
     35    onSuccess(xhr);
     36  };
     37  xhr.onerror = function () {
     38    onFail(xhr);
     39  };
     40  xhr.open("GET", "http" + aUrl, true);
     41  xhr.send(null);
     42 }
     43 
     44 /**
     45 * Grabs the results via XHR and passes to checker.
     46 */
     47 function checkIndividualResults(aTestname, aExpectedReferrer, aName) {
     48  var onload = xhr => {
     49    var results = xhr.response;
     50    info(JSON.stringify(xhr.response));
     51    ok(aName in results, aName + " tests have to be performed.");
     52    is(
     53      results[aName].policy,
     54      aExpectedReferrer,
     55      aTestname +
     56        " --- " +
     57        results[aName].policy +
     58        " (" +
     59        results[aName].referrer +
     60        ")"
     61    );
     62    advance();
     63  };
     64  var onerror = () => {
     65    ok(false, "Can't get results from the counter server.");
     66    SimpleTest.finish();
     67  };
     68  doXHR(GET_RESULT, onload, onerror);
     69 }
     70 
     71 function resetState() {
     72  doXHR(RESET_STATE, advance, function () {
     73    ok(false, "error in reset state");
     74    SimpleTest.finish();
     75  });
     76 }
     77 
     78 /**
     79 * testing if referrer header is sent correctly
     80 */
     81 var tests = (function* () {
     82  yield SpecialPowers.pushPrefEnv(
     83    { set: [["security.mixed_content.block_active_content", false]] },
     84    advance
     85  );
     86  yield SpecialPowers.pushPrefEnv(
     87    { set: [["network.http.referer.disallowCrossSiteRelaxingDefault", false]] },
     88    advance
     89  );
     90  yield SpecialPowers.pushPermissions(
     91    [{ type: "systemXHR", allow: true, context: document }],
     92    advance
     93  );
     94 
     95  var iframe = document.getElementById("testframe");
     96 
     97  for (var j = 0; j < testCases.length; j++) {
     98    if (testCases[j].PREFS) {
     99      yield SpecialPowers.pushPrefEnv({ set: testCases[j].PREFS }, advance);
    100    }
    101 
    102    var actions = testCases[j].ACTION;
    103    var subTests = testCases[j].TESTS;
    104    for (var k = 0; k < actions.length; k++) {
    105      var actionString = actions[k];
    106      for (var i = 0; i < subTests.length; i++) {
    107        yield resetState();
    108        var searchParams = new URLSearchParams();
    109        searchParams.append("ACTION", actionString);
    110        searchParams.append("NAME", subTests[i].NAME);
    111        for (var l of PARAMS) {
    112          if (subTests[i][l]) {
    113            searchParams.append(l, subTests[i][l]);
    114          }
    115        }
    116        var schemeFrom = subTests[i].SCHEME_FROM || "http";
    117        yield (iframe.src = schemeFrom + SJS + searchParams.toString());
    118        yield checkIndividualResults(
    119          subTests[i].DESC,
    120          subTests[i].RESULT,
    121          subTests[i].NAME
    122        );
    123      }
    124    }
    125  }
    126 
    127  // complete.
    128  SimpleTest.finish();
    129 })();