Thu, 15 Jan 2015 15:59:08 +0100
Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
1 var ios = Cc["@mozilla.org/network/io-service;1"].
2 getService(Ci.nsIIOService);
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 }
16 function run_test() {
17 var prefs = Cc["@mozilla.org/preferences-service;1"]
18 .getService(Components.interfaces.nsIPrefBranch);
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";
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";
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);
36 // test that https ref is not sent to http
37 do_check_null(getTestReferrer(server_uri_2, referer_uri_https));
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);
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);
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);
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 }