tor-browser

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

test_referrer_policy.js (4513B)


      1 "use strict";
      2 
      3 const ReferrerInfo = Components.Constructor(
      4  "@mozilla.org/referrer-info;1",
      5  "nsIReferrerInfo",
      6  "init"
      7 );
      8 
      9 function test_policy(test) {
     10  info("Running test: " + test.toSource());
     11 
     12  var prefs = Services.prefs;
     13  if (test.defaultReferrerPolicyPref !== undefined) {
     14    prefs.setIntPref(
     15      "network.http.referer.defaultPolicy",
     16      test.defaultReferrerPolicyPref
     17    );
     18  } else {
     19    prefs.setIntPref("network.http.referer.defaultPolicy", 3);
     20  }
     21 
     22  if (test.disallowRelaxingDefault) {
     23    prefs.setBoolPref(
     24      "network.http.referer.disallowCrossSiteRelaxingDefault",
     25      test.disallowRelaxingDefault
     26    );
     27  } else {
     28    prefs.setBoolPref(
     29      "network.http.referer.disallowCrossSiteRelaxingDefault",
     30      false
     31    );
     32  }
     33 
     34  var uri = NetUtil.newURI(test.url);
     35  var chan = NetUtil.newChannel({
     36    uri,
     37    loadUsingSystemPrincipal: true,
     38  });
     39 
     40  var referrer = NetUtil.newURI(test.referrer);
     41  chan.QueryInterface(Ci.nsIHttpChannel);
     42  chan.referrerInfo = new ReferrerInfo(test.policy, true, referrer);
     43 
     44  if (test.expectedReferrerSpec === undefined) {
     45    try {
     46      chan.getRequestHeader("Referer");
     47      do_throw("Should not find a Referer header!");
     48    } catch (e) {}
     49  } else {
     50    var header = chan.getRequestHeader("Referer");
     51    Assert.equal(header, test.expectedReferrerSpec);
     52  }
     53 }
     54 
     55 const nsIReferrerInfo = Ci.nsIReferrerInfo;
     56 // Assuming cross origin because we have no triggering principal available
     57 var gTests = [
     58  {
     59    policy: nsIReferrerInfo.EMPTY,
     60    defaultReferrerPolicyPref: 0,
     61    url: "https://test.example/foo",
     62    referrer: "https://test.example/referrer",
     63    expectedReferrerSpec: undefined,
     64  },
     65  {
     66    policy: nsIReferrerInfo.EMPTY,
     67    defaultReferrerPolicyPref: 1,
     68    url: "http://test.example/foo",
     69    referrer: "http://test1.example/referrer",
     70    expectedReferrerSpec: undefined,
     71  },
     72  {
     73    policy: nsIReferrerInfo.EMPTY,
     74    defaultReferrerPolicyPref: 2,
     75    url: "https://sub1.\xe4lt.example/foo",
     76    referrer: "https://sub1.\xe4lt.example/referrer",
     77    expectedReferrerSpec: "https://sub1.xn--lt-uia.example/",
     78  },
     79  {
     80    policy: nsIReferrerInfo.EMPTY,
     81    defaultReferrerPolicyPref: 2,
     82    url: "https://test.example/foo",
     83    referrer: "https://test1.example/referrer",
     84    expectedReferrerSpec: "https://test1.example/",
     85  },
     86  {
     87    policy: nsIReferrerInfo.EMPTY,
     88    defaultReferrerPolicyPref: 3,
     89    url: "https://test.example/foo",
     90    referrer: "https://test.example/referrer",
     91    expectedReferrerSpec: "https://test.example/referrer",
     92  },
     93  {
     94    policy: nsIReferrerInfo.EMPTY,
     95    defaultReferrerPolicyPref: 3,
     96    url: "https://sub1.\xe4lt.example/foo",
     97    referrer: "https://sub1.\xe4lt.example/referrer",
     98    expectedReferrerSpec: "https://sub1.xn--lt-uia.example/referrer",
     99  },
    100  {
    101    policy: nsIReferrerInfo.EMPTY,
    102    defaultReferrerPolicyPref: 3,
    103    url: "http://test.example/foo",
    104    referrer: "https://test.example/referrer",
    105    expectedReferrerSpec: undefined,
    106  },
    107  {
    108    policy: nsIReferrerInfo.NO_REFERRER,
    109    url: "https://test.example/foo",
    110    referrer: "https://test.example/referrer",
    111    expectedReferrerSpec: undefined,
    112  },
    113  {
    114    policy: nsIReferrerInfo.ORIGIN,
    115    url: "https://test.example/foo",
    116    referrer: "https://test.example/referrer",
    117    expectedReferrerSpec: "https://test.example/",
    118  },
    119  {
    120    policy: nsIReferrerInfo.ORIGIN,
    121    url: "https://sub1.\xe4lt.example/foo",
    122    referrer: "https://sub1.\xe4lt.example/referrer",
    123    expectedReferrerSpec: "https://sub1.xn--lt-uia.example/",
    124  },
    125  {
    126    policy: nsIReferrerInfo.UNSAFE_URL,
    127    url: "https://test.example/foo",
    128    referrer: "https://test.example/referrer",
    129    expectedReferrerSpec: "https://test.example/referrer",
    130  },
    131  {
    132    policy: nsIReferrerInfo.UNSAFE_URL,
    133    url: "https://sub1.\xe4lt.example/foo",
    134    referrer: "https://sub1.\xe4lt.example/referrer",
    135    expectedReferrerSpec: "https://sub1.xn--lt-uia.example/referrer",
    136  },
    137  {
    138    policy: nsIReferrerInfo.UNSAFE_URL,
    139    url: "http://test.example/foo",
    140    referrer: "https://test.example/referrer",
    141    expectedReferrerSpec: "https://test.example/referrer",
    142  },
    143  {
    144    policy: nsIReferrerInfo.UNSAFE_URL,
    145    url: "http://sub1.\xe4lt.example/foo",
    146    referrer: "https://sub1.\xe4lt.example/referrer",
    147    expectedReferrerSpec: "https://sub1.xn--lt-uia.example/referrer",
    148  },
    149 ];
    150 
    151 function run_test() {
    152  gTests.forEach(test => test_policy(test));
    153  Services.prefs.clearUserPref("network.http.referer.disallowRelaxingDefault");
    154 }