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 }