|
1 var ios = Cc["@mozilla.org/network/io-service;1"]. |
|
2 getService(Ci.nsIIOService); |
|
3 |
|
4 function getTestReferrer(server_uri, referer_uri) { |
|
5 var chan = ios.newChannel(server_uri, "", null); |
|
6 chan.QueryInterface(Components.interfaces.nsIHttpChannel); |
|
7 chan.referrer = ios.newURI(referer_uri, null, null); |
|
8 var header = null; |
|
9 try { |
|
10 header = chan.getRequestHeader("Referer"); |
|
11 } |
|
12 catch (NS_ERROR_NOT_AVAILABLE) {} |
|
13 return header; |
|
14 } |
|
15 |
|
16 function run_test() { |
|
17 var prefs = Cc["@mozilla.org/preferences-service;1"] |
|
18 .getService(Components.interfaces.nsIPrefBranch); |
|
19 |
|
20 var server_uri = "http://bar.examplesite.com/path2"; |
|
21 var server_uri_2 = "http://bar.example.com/anotherpath"; |
|
22 var referer_uri = "http://foo.example.com/path"; |
|
23 var referer_uri_2 = "http://bar.examplesite.com/path3?q=blah"; |
|
24 var referer_uri_2_anchor = "http://bar.examplesite.com/path3?q=blah#anchor"; |
|
25 |
|
26 // for https tests |
|
27 var server_uri_https = "https://bar.example.com/anotherpath"; |
|
28 var referer_uri_https = "https://bar.example.com/path3?q=blah"; |
|
29 |
|
30 // tests for sendRefererHeader |
|
31 prefs.setIntPref("network.http.sendRefererHeader", 0); |
|
32 do_check_null(getTestReferrer(server_uri, referer_uri)); |
|
33 prefs.setIntPref("network.http.sendRefererHeader", 2); |
|
34 do_check_eq(getTestReferrer(server_uri, referer_uri), referer_uri); |
|
35 |
|
36 // test that https ref is not sent to http |
|
37 do_check_null(getTestReferrer(server_uri_2, referer_uri_https)); |
|
38 |
|
39 // tests for referer.spoofSource |
|
40 prefs.setBoolPref("network.http.referer.spoofSource", true); |
|
41 do_check_eq(getTestReferrer(server_uri, referer_uri), server_uri); |
|
42 prefs.setBoolPref("network.http.referer.spoofSource", false); |
|
43 do_check_eq(getTestReferrer(server_uri, referer_uri), referer_uri); |
|
44 |
|
45 // tests for referer.XOriginPolicy |
|
46 prefs.setIntPref("network.http.referer.XOriginPolicy", 2); |
|
47 do_check_null(getTestReferrer(server_uri_2, referer_uri)); |
|
48 do_check_eq(getTestReferrer(server_uri, referer_uri_2), referer_uri_2); |
|
49 prefs.setIntPref("network.http.referer.XOriginPolicy", 1); |
|
50 do_check_eq(getTestReferrer(server_uri_2, referer_uri), referer_uri); |
|
51 do_check_null(getTestReferrer(server_uri, referer_uri)); |
|
52 // https test |
|
53 do_check_eq(getTestReferrer(server_uri_https, referer_uri_https), referer_uri_https); |
|
54 prefs.setIntPref("network.http.referer.XOriginPolicy", 0); |
|
55 do_check_eq(getTestReferrer(server_uri, referer_uri), referer_uri); |
|
56 |
|
57 // tests for referer.trimmingPolicy |
|
58 prefs.setIntPref("network.http.referer.trimmingPolicy", 1); |
|
59 do_check_eq(getTestReferrer(server_uri, referer_uri_2), "http://bar.examplesite.com/path3"); |
|
60 prefs.setIntPref("network.http.referer.trimmingPolicy", 2); |
|
61 do_check_eq(getTestReferrer(server_uri, referer_uri_2), "http://bar.examplesite.com"); |
|
62 // https test |
|
63 do_check_eq(getTestReferrer(server_uri_https, referer_uri_https), "https://bar.example.com"); |
|
64 prefs.setIntPref("network.http.referer.trimmingPolicy", 0); |
|
65 // test that anchor is lopped off in ordinary case |
|
66 do_check_eq(getTestReferrer(server_uri, referer_uri_2_anchor), referer_uri_2); |
|
67 |
|
68 // combination test: send spoofed path-only when hosts match |
|
69 var combo_referer_uri = "http://blah.foo.com/path?q=hot"; |
|
70 var dest_uri = "http://blah.foo.com:9999/spoofedpath?q=bad"; |
|
71 prefs.setIntPref("network.http.referer.trimmingPolicy", 1); |
|
72 prefs.setBoolPref("network.http.referer.spoofSource", true); |
|
73 prefs.setIntPref("network.http.referer.XOriginPolicy", 2); |
|
74 do_check_eq(getTestReferrer(dest_uri, combo_referer_uri), "http://blah.foo.com:9999/spoofedpath"); |
|
75 do_check_null(getTestReferrer(dest_uri, "http://gah.foo.com/anotherpath")); |
|
76 } |