tor-browser

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

referrerHelper.js (15316B)


      1 /**
      2 * Listen for notifications from the child.
      3 * These are sent in case of error, or when the loads we await have completed.
      4 */
      5 window.addEventListener("message", function (event) {
      6  if (event.data == "childLoadComplete") {
      7    // all loads happen, continue the test.
      8    advance();
      9  } else if (event.data == "childOverload") {
     10    // too many loads happened in a test frame, abort.
     11    ok(false, "Too many load handlers called in test.");
     12    SimpleTest.finish();
     13  } else if (event.data.indexOf("fail-") == 0) {
     14    // something else failed in the test frame, abort.
     15    ok(false, "Child failed the test with error " + event.data.substr(5));
     16    SimpleTest.finish();
     17  }
     18 });
     19 
     20 /**
     21 * helper to perform an XHR.
     22 */
     23 function doXHR(url, onSuccess, onFail) {
     24  var xhr = new XMLHttpRequest();
     25  xhr.onload = function () {
     26    if (xhr.status == 200) {
     27      onSuccess(xhr);
     28    } else {
     29      onFail(xhr);
     30    }
     31  };
     32  xhr.open("GET", url, true);
     33  xhr.send(null);
     34 }
     35 
     36 /**
     37 * This triggers state-resetting on the counter server.
     38 */
     39 function resetCounter() {
     40  doXHR(
     41    "/tests/dom/base/test/bug704320_counter.sjs?reset",
     42    advance,
     43    function (xhr) {
     44      ok(false, "Need to be able to reset the request counter");
     45      SimpleTest.finish();
     46    }
     47  );
     48 }
     49 
     50 /**
     51 * Grabs the results via XHR and passes to checker.
     52 */
     53 function checkIndividualResults(testname, expected) {
     54  doXHR(
     55    "/tests/dom/base/test/bug704320_counter.sjs?results",
     56    function (xhr) {
     57      var results = JSON.parse(xhr.responseText);
     58      info(xhr.responseText);
     59 
     60      ok(
     61        "img" in results,
     62        testname + " test: some image loads required in results object."
     63      );
     64      is(
     65        results.img.count,
     66        2,
     67        testname + " Test: Expected 2 loads for image requests."
     68      );
     69 
     70      expected.forEach(function (ref) {
     71        ok(
     72          results.img.referrers.includes(ref),
     73          testname +
     74            " Test: Expected " +
     75            ref +
     76            " referrer policy in test, results were " +
     77            JSON.stringify(results.img.referrers) +
     78            "."
     79        );
     80      });
     81      advance();
     82    },
     83    function (xhr) {
     84      ok(false, "Can't get results from the counter server.");
     85      SimpleTest.finish();
     86    }
     87  );
     88 }
     89 
     90 /**
     91 * Grabs the results via XHR and checks them
     92 */
     93 function checkExpectedGlobalResults(testName) {
     94  var url = "bug704320.sjs?action=get-test-results";
     95  doXHR(
     96    url,
     97    function (xhr) {
     98      var response = JSON.parse(xhr.response);
     99 
    100      for (type in response) {
    101        for (scheme in response[type]) {
    102          for (policy in response[type][scheme]) {
    103            var expectedResult =
    104              EXPECTED_RESULTS[type] === undefined
    105                ? EXPECTED_RESULTS.default[scheme][policy]
    106                : EXPECTED_RESULTS[type][scheme][policy];
    107            is(
    108              response[type][scheme][policy],
    109              expectedResult,
    110              type + " " + scheme + " " + policy
    111            );
    112          }
    113        }
    114      }
    115      advance(testName);
    116    },
    117    function (xhr) {
    118      ok(false, "Can't get results from the counter server.");
    119      SimpleTest.finish();
    120    }
    121  );
    122 }
    123 
    124 var EXPECTED_RESULTS = {
    125  // From docshell/base/nsDocShell.cpp:
    126  //   "If the document containing the hyperlink being audited was not retrieved
    127  //    over an encrypted connection and its address does not have the same
    128  //    origin as "ping URL", send a referrer."
    129  "link-ping": {
    130    // Same-origin
    131    "http-to-http": {
    132      "no-referrer": "",
    133      "unsafe-url": "",
    134      origin: "",
    135      "origin-when-cross-origin": "",
    136      "no-referrer-when-downgrade": "",
    137      "same-origin": "",
    138      "strict-origin": "",
    139      "strict-origin-when-cross-origin": "",
    140    },
    141    "http-to-https": {
    142      "no-referrer": "",
    143      "unsafe-url":
    144        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=https&policy=unsafe-url",
    145      origin: "http://example.com/",
    146      "origin-when-cross-origin": "http://example.com/",
    147      "no-referrer-when-downgrade":
    148        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=https&policy=no-referrer-when-downgrade",
    149      "same-origin": "",
    150      "strict-origin": "http://example.com/",
    151      "strict-origin-when-cross-origin": "http://example.com/",
    152    },
    153    // Encrypted and not same-origin
    154    "https-to-http": {
    155      "no-referrer": "",
    156      "unsafe-url": "",
    157      origin: "",
    158      "origin-when-cross-origin": "",
    159      "no-referrer-when-downgrade": "",
    160      "same-origin": "",
    161      "strict-origin": "",
    162      "strict-origin-when-cross-origin": "",
    163    },
    164    // Encrypted
    165    "https-to-https": {
    166      "no-referrer": "",
    167      "unsafe-url": "",
    168      origin: "",
    169      "origin-when-cross-origin": "",
    170      "no-referrer-when-downgrade": "",
    171      "same-origin": "",
    172      "strict-origin": "",
    173      "strict-origin-when-cross-origin": "",
    174    },
    175  },
    176  // form is tested in a 2nd level iframe.
    177  form: {
    178    "http-to-http": {
    179      "no-referrer": "",
    180      "unsafe-url":
    181        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=unsafe-url&type=form",
    182      origin: "http://example.com/",
    183      "origin-when-cross-origin":
    184        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=origin-when-cross-origin&type=form",
    185      "no-referrer-when-downgrade":
    186        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=no-referrer-when-downgrade&type=form",
    187      "same-origin":
    188        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=same-origin&type=form",
    189      "strict-origin": "http://example.com/",
    190      "strict-origin-when-cross-origin":
    191        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=strict-origin-when-cross-origin&type=form",
    192    },
    193    "http-to-https": {
    194      "no-referrer": "",
    195      "unsafe-url":
    196        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=https&policy=unsafe-url&type=form",
    197      origin: "http://example.com/",
    198      "origin-when-cross-origin": "http://example.com/",
    199      "no-referrer-when-downgrade":
    200        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=https&policy=no-referrer-when-downgrade&type=form",
    201      "same-origin": "",
    202      "strict-origin": "http://example.com/",
    203      "strict-origin-when-cross-origin": "http://example.com/",
    204    },
    205    "https-to-http": {
    206      "no-referrer": "",
    207      "unsafe-url":
    208        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=http&policy=unsafe-url&type=form",
    209      origin: "https://example.com/",
    210      "origin-when-cross-origin": "https://example.com/",
    211      "no-referrer-when-downgrade": "",
    212      "same-origin": "",
    213      "strict-origin": "",
    214      "strict-origin-when-cross-origin": "",
    215    },
    216    "https-to-https": {
    217      "no-referrer": "",
    218      "unsafe-url":
    219        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=unsafe-url&type=form",
    220      origin: "https://example.com/",
    221      "origin-when-cross-origin":
    222        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=origin-when-cross-origin&type=form",
    223      "no-referrer-when-downgrade":
    224        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=no-referrer-when-downgrade&type=form",
    225      "same-origin":
    226        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=same-origin&type=form",
    227      "strict-origin": "https://example.com/",
    228      "strict-origin-when-cross-origin":
    229        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=strict-origin-when-cross-origin&type=form",
    230    },
    231  },
    232  // window.location is tested in a 2nd level iframe.
    233  "window.location": {
    234    "http-to-http": {
    235      "no-referrer": "",
    236      "unsafe-url":
    237        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=unsafe-url&type=window.location",
    238      origin: "http://example.com/",
    239      "origin-when-cross-origin":
    240        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=origin-when-cross-origin&type=window.location",
    241      "no-referrer-when-downgrade":
    242        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=no-referrer-when-downgrade&type=window.location",
    243      "same-origin":
    244        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=same-origin&type=window.location",
    245      "strict-origin": "http://example.com/",
    246      "strict-origin-when-cross-origin":
    247        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=strict-origin-when-cross-origin&type=window.location",
    248    },
    249    "http-to-https": {
    250      "no-referrer": "",
    251      "unsafe-url":
    252        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=https&policy=unsafe-url&type=window.location",
    253      origin: "http://example.com/",
    254      "origin-when-cross-origin": "http://example.com/",
    255      "no-referrer-when-downgrade":
    256        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=https&policy=no-referrer-when-downgrade&type=window.location",
    257      "same-origin": "",
    258      "strict-origin": "http://example.com/",
    259      "strict-origin-when-cross-origin": "http://example.com/",
    260    },
    261    "https-to-http": {
    262      "no-referrer": "",
    263      "unsafe-url":
    264        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=http&policy=unsafe-url&type=window.location",
    265      origin: "https://example.com/",
    266      "origin-when-cross-origin": "https://example.com/",
    267      "no-referrer-when-downgrade": "",
    268      "same-origin": "",
    269      "strict-origin": "",
    270      "strict-origin-when-cross-origin": "",
    271    },
    272    "https-to-https": {
    273      "no-referrer": "",
    274      "unsafe-url":
    275        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=unsafe-url&type=window.location",
    276      origin: "https://example.com/",
    277      "origin-when-cross-origin":
    278        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=origin-when-cross-origin&type=window.location",
    279      "no-referrer-when-downgrade":
    280        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=no-referrer-when-downgrade&type=window.location",
    281      "same-origin":
    282        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=same-origin&type=window.location",
    283      "strict-origin": "https://example.com/",
    284      "strict-origin-when-cross-origin":
    285        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=strict-origin-when-cross-origin&type=window.location",
    286    },
    287  },
    288  default: {
    289    "http-to-http": {
    290      "no-referrer": "",
    291      "unsafe-url":
    292        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=unsafe-url",
    293      origin: "http://example.com/",
    294      "origin-when-cross-origin":
    295        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=origin-when-cross-origin",
    296      "no-referrer-when-downgrade":
    297        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=no-referrer-when-downgrade",
    298      "same-origin":
    299        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=same-origin",
    300      "strict-origin": "http://example.com/",
    301      "strict-origin-when-cross-origin":
    302        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=strict-origin-when-cross-origin",
    303    },
    304    "http-to-https": {
    305      "no-referrer": "",
    306      "unsafe-url":
    307        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=https&policy=unsafe-url",
    308      origin: "http://example.com/",
    309      "origin-when-cross-origin": "http://example.com/",
    310      "no-referrer-when-downgrade":
    311        "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=https&policy=no-referrer-when-downgrade",
    312      "same-origin": "",
    313      "strict-origin": "http://example.com/",
    314      "strict-origin-when-cross-origin": "http://example.com/",
    315    },
    316    "https-to-http": {
    317      "no-referrer": "",
    318      "unsafe-url":
    319        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=http&policy=unsafe-url",
    320      origin: "https://example.com/",
    321      "origin-when-cross-origin": "https://example.com/",
    322      "no-referrer-when-downgrade": "",
    323      "same-origin": "",
    324      "strict-origin": "",
    325      "strict-origin-when-cross-origin": "",
    326    },
    327    "https-to-https": {
    328      "no-referrer": "",
    329      "unsafe-url":
    330        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=unsafe-url",
    331      origin: "https://example.com/",
    332      "origin-when-cross-origin":
    333        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=origin-when-cross-origin",
    334      "no-referrer-when-downgrade":
    335        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=no-referrer-when-downgrade",
    336      "same-origin":
    337        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=same-origin",
    338      "strict-origin": "https://example.com/",
    339      "strict-origin-when-cross-origin":
    340        "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=strict-origin-when-cross-origin",
    341    },
    342  },
    343 };