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 Cc = Components.classes;
2 var Ci = Components.interfaces;
4 var listener = {
5 expect_failure: false,
6 QueryInterface: function listener_qi(iid) {
7 if (iid.equals(Ci.nsISupports) ||
8 iid.equals(Ci.nsIUnicharStreamLoaderObserver)) {
9 return this;
10 }
11 throw Components.results.NS_ERROR_NO_INTERFACE;
12 },
13 onDetermineCharset : function onDetermineCharset(loader, context, data)
14 {
15 return "us-ascii";
16 },
17 onStreamComplete : function onStreamComplete (loader, context, status, data)
18 {
19 try {
20 if (this.expect_failure)
21 do_check_false(Components.isSuccessCode(status));
22 else
23 do_check_eq(status, Components.results.NS_OK);
24 do_check_eq(data, "");
25 do_check_neq(loader.channel, null);
26 tests[current_test++]();
27 } finally {
28 do_test_finished();
29 }
30 }
31 };
33 var current_test = 0;
34 var tests = [test1, test2, done];
36 function run_test() {
37 tests[current_test++]();
38 }
40 function test1() {
41 var f =
42 Cc["@mozilla.org/network/unichar-stream-loader;1"].
43 createInstance(Ci.nsIUnicharStreamLoader);
44 f.init(listener);
46 var ios = Components.classes["@mozilla.org/network/io-service;1"]
47 .getService(Components.interfaces.nsIIOService);
48 var chan = ios.newChannel("data:text/plain,", null, null);
49 chan.asyncOpen(f, null);
50 do_test_pending();
51 }
53 function test2() {
54 var f =
55 Cc["@mozilla.org/network/unichar-stream-loader;1"].
56 createInstance(Ci.nsIUnicharStreamLoader);
57 f.init(listener);
59 var ios = Components.classes["@mozilla.org/network/io-service;1"]
60 .getService(Components.interfaces.nsIIOService);
61 var chan = ios.newChannel("http://localhost:0/", null, null);
62 listener.expect_failure = true;
63 chan.asyncOpen(f, null);
64 do_test_pending();
65 }
67 function done() {
68 }