diff options
Diffstat (limited to 'netwerk/test/unit/test_referrer_policy.js')
-rw-r--r-- | netwerk/test/unit/test_referrer_policy.js | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/netwerk/test/unit/test_referrer_policy.js b/netwerk/test/unit/test_referrer_policy.js new file mode 100644 index 0000000000..18b1cb3a16 --- /dev/null +++ b/netwerk/test/unit/test_referrer_policy.js @@ -0,0 +1,154 @@ +"use strict"; + +const ReferrerInfo = Components.Constructor( + "@mozilla.org/referrer-info;1", + "nsIReferrerInfo", + "init" +); + +function test_policy(test) { + info("Running test: " + test.toSource()); + + var prefs = Services.prefs; + if (test.defaultReferrerPolicyPref !== undefined) { + prefs.setIntPref( + "network.http.referer.defaultPolicy", + test.defaultReferrerPolicyPref + ); + } else { + prefs.setIntPref("network.http.referer.defaultPolicy", 3); + } + + if (test.disallowRelaxingDefault) { + prefs.setBoolPref( + "network.http.referer.disallowCrossSiteRelaxingDefault", + test.disallowRelaxingDefault + ); + } else { + prefs.setBoolPref( + "network.http.referer.disallowCrossSiteRelaxingDefault", + false + ); + } + + var uri = NetUtil.newURI(test.url); + var chan = NetUtil.newChannel({ + uri, + loadUsingSystemPrincipal: true, + }); + + var referrer = NetUtil.newURI(test.referrer); + chan.QueryInterface(Ci.nsIHttpChannel); + chan.referrerInfo = new ReferrerInfo(test.policy, true, referrer); + + if (test.expectedReferrerSpec === undefined) { + try { + chan.getRequestHeader("Referer"); + do_throw("Should not find a Referer header!"); + } catch (e) {} + } else { + var header = chan.getRequestHeader("Referer"); + Assert.equal(header, test.expectedReferrerSpec); + } +} + +const nsIReferrerInfo = Ci.nsIReferrerInfo; +// Assuming cross origin because we have no triggering principal available +var gTests = [ + { + policy: nsIReferrerInfo.EMPTY, + defaultReferrerPolicyPref: 0, + url: "https://test.example/foo", + referrer: "https://test.example/referrer", + expectedReferrerSpec: undefined, + }, + { + policy: nsIReferrerInfo.EMPTY, + defaultReferrerPolicyPref: 1, + url: "http://test.example/foo", + referrer: "http://test1.example/referrer", + expectedReferrerSpec: undefined, + }, + { + policy: nsIReferrerInfo.EMPTY, + defaultReferrerPolicyPref: 2, + url: "https://sub1.\xe4lt.example/foo", + referrer: "https://sub1.\xe4lt.example/referrer", + expectedReferrerSpec: "https://sub1.xn--lt-uia.example/", + }, + { + policy: nsIReferrerInfo.EMPTY, + defaultReferrerPolicyPref: 2, + url: "https://test.example/foo", + referrer: "https://test1.example/referrer", + expectedReferrerSpec: "https://test1.example/", + }, + { + policy: nsIReferrerInfo.EMPTY, + defaultReferrerPolicyPref: 3, + url: "https://test.example/foo", + referrer: "https://test.example/referrer", + expectedReferrerSpec: "https://test.example/referrer", + }, + { + policy: nsIReferrerInfo.EMPTY, + defaultReferrerPolicyPref: 3, + url: "https://sub1.\xe4lt.example/foo", + referrer: "https://sub1.\xe4lt.example/referrer", + expectedReferrerSpec: "https://sub1.xn--lt-uia.example/referrer", + }, + { + policy: nsIReferrerInfo.EMPTY, + defaultReferrerPolicyPref: 3, + url: "http://test.example/foo", + referrer: "https://test.example/referrer", + expectedReferrerSpec: undefined, + }, + { + policy: nsIReferrerInfo.NO_REFERRER, + url: "https://test.example/foo", + referrer: "https://test.example/referrer", + expectedReferrerSpec: undefined, + }, + { + policy: nsIReferrerInfo.ORIGIN, + url: "https://test.example/foo", + referrer: "https://test.example/referrer", + expectedReferrerSpec: "https://test.example/", + }, + { + policy: nsIReferrerInfo.ORIGIN, + url: "https://sub1.\xe4lt.example/foo", + referrer: "https://sub1.\xe4lt.example/referrer", + expectedReferrerSpec: "https://sub1.xn--lt-uia.example/", + }, + { + policy: nsIReferrerInfo.UNSAFE_URL, + url: "https://test.example/foo", + referrer: "https://test.example/referrer", + expectedReferrerSpec: "https://test.example/referrer", + }, + { + policy: nsIReferrerInfo.UNSAFE_URL, + url: "https://sub1.\xe4lt.example/foo", + referrer: "https://sub1.\xe4lt.example/referrer", + expectedReferrerSpec: "https://sub1.xn--lt-uia.example/referrer", + }, + { + policy: nsIReferrerInfo.UNSAFE_URL, + url: "http://test.example/foo", + referrer: "https://test.example/referrer", + expectedReferrerSpec: "https://test.example/referrer", + }, + { + policy: nsIReferrerInfo.UNSAFE_URL, + url: "http://sub1.\xe4lt.example/foo", + referrer: "https://sub1.\xe4lt.example/referrer", + expectedReferrerSpec: "https://sub1.xn--lt-uia.example/referrer", + }, +]; + +function run_test() { + gTests.forEach(test => test_policy(test)); + Services.prefs.clearUserPref("network.http.referer.disallowRelaxingDefault"); +} |