Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 var gExpectedCookies;
2 var gExpectedHeaders;
3 var gExpectedLoads;
5 var gObs;
6 var gPopup;
8 var gHeaders = 0;
9 var gLoads = 0;
11 // setupTest() is run from 'onload='.
12 function setupTest(uri, domain, cookies, loads, headers) {
13 ok(true, "setupTest uri: " + uri + " domain: " + domain + " cookies: " + cookies +
14 " loads: " + loads + " headers: " + headers);
16 SimpleTest.waitForExplicitFinish();
18 SpecialPowers.Cc["@mozilla.org/preferences-service;1"]
19 .getService(SpecialPowers.Ci.nsIPrefBranch)
20 .setIntPref("network.cookie.cookieBehavior", 1);
22 var cs = SpecialPowers.Cc["@mozilla.org/cookiemanager;1"]
23 .getService(SpecialPowers.Ci.nsICookieManager2);
25 ok(true, "we are going to remove these cookies");
26 var count = 0;
27 var list = cs.enumerator;
28 while (list.hasMoreElements()) {
29 var cookie = list.getNext().QueryInterface(SpecialPowers.Ci.nsICookie);
30 ok(true, "cookie: " + cookie);
31 ok(true, "cookie host " + cookie.host + " path " + cookie.path + " name " + cookie.name +
32 " value " + cookie.value + " isSecure " + cookie.isSecure + " expires " + cookie.expires);
33 ++count;
34 }
35 ok(true, count + " cookies");
37 cs.removeAll();
38 cs.add(domain, "", "oh", "hai", false, false, true, Math.pow(2, 62));
39 is(cs.countCookiesFromHost(domain), 1, "number of cookies for domain " + domain);
41 gExpectedCookies = cookies;
42 gExpectedLoads = loads;
43 gExpectedHeaders = headers;
45 gObs = new obs();
46 // Listen for MessageEvents.
47 window.addEventListener("message", messageReceiver, false);
49 // load a window which contains an iframe; each will attempt to set
50 // cookies from their respective domains.
51 gPopup = window.open(uri, 'hai', 'width=100,height=100');
52 }
54 function finishTest()
55 {
56 gObs.remove();
58 SpecialPowers.Cc["@mozilla.org/preferences-service;1"]
59 .getService(SpecialPowers.Ci.nsIPrefBranch)
60 .clearUserPref("network.cookie.cookieBehavior");
62 SimpleTest.finish();
63 }
65 // Count headers.
66 function obs () {
67 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
69 ok(true, "adding observer");
71 this.window = window;
72 this.os = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
73 .getService(SpecialPowers.Ci.nsIObserverService);
74 this.os.addObserver(this, "http-on-modify-request", false);
75 }
77 obs.prototype = {
78 observe: function obs_observe (theSubject, theTopic, theData)
79 {
80 ok(true, "theSubject " + theSubject);
81 ok(true, "theTopic " + theTopic);
82 ok(true, "theData " + theData);
84 var channel = theSubject.QueryInterface(
85 this.window.SpecialPowers.Ci.nsIHttpChannel);
86 ok(true, "channel " + channel);
87 try {
88 ok(true, "channel.URI " + channel.URI);
89 ok(true, "channel.URI.spec " + channel.URI.spec);
90 channel.visitRequestHeaders({
91 visitHeader: function(aHeader, aValue) {
92 ok(true, aHeader + ": " + aValue);
93 }});
94 } catch (err) {
95 ok(false, "catch error " + err);
96 }
98 // Ignore notifications we don't care about (like favicons)
99 if (channel.URI.spec.indexOf(
100 "http://example.org/tests/extensions/cookie/test/") == -1) {
101 ok(true, "ignoring this one");
102 return;
103 }
105 this.window.isnot(channel.getRequestHeader("Cookie").indexOf("oh=hai"), -1,
106 "cookie 'oh=hai' is in header for " + channel.URI.spec);
107 ++gHeaders;
108 },
110 remove: function obs_remove()
111 {
112 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
114 ok(true, "removing observer");
116 this.os.removeObserver(this, "http-on-modify-request");
117 this.os = null;
118 this.window = null;
119 }
120 }
122 /** Receives MessageEvents to this window. */
123 // Count and check loads.
124 function messageReceiver(evt)
125 {
126 ok(evt.data == "f_lf_i msg data img" || evt.data == "f_lf_i msg data page",
127 "message data received from popup");
128 if (evt.data == "f_lf_i msg data img") {
129 ok(true, "message data received from popup for image");
130 }
131 if (evt.data == "f_lf_i msg data page") {
132 ok(true, "message data received from popup for page");
133 }
134 if (evt.data != "f_lf_i msg data img" && evt.data != "f_lf_i msg data page") {
135 ok(true, "got this message but don't know what it is " + evt.data);
136 gPopup.close();
137 window.removeEventListener("message", messageReceiver, false);
139 finishTest();
140 return;
141 }
143 // only run the test when all our children are done loading & setting cookies
144 if (++gLoads == gExpectedLoads) {
145 gPopup.close();
146 window.removeEventListener("message", messageReceiver, false);
148 runTest();
149 }
150 }
152 // runTest() is run by messageReceiver().
153 // Check headers, and count and check cookies.
154 function runTest() {
155 // set a cookie from a domain of "localhost"
156 document.cookie = "o=noes";
158 is(gHeaders, gExpectedHeaders, "number of observed request headers");
160 var cs = SpecialPowers.Cc["@mozilla.org/cookiemanager;1"]
161 .getService(SpecialPowers.Ci.nsICookieManager);
162 var count = 0;
163 var list = cs.enumerator;
164 while (list.hasMoreElements()) {
165 var cookie = list.getNext().QueryInterface(SpecialPowers.Ci.nsICookie);
166 ok(true, "cookie: " + cookie);
167 ok(true, "cookie host " + cookie.host + " path " + cookie.path + " name " + cookie.name +
168 " value " + cookie.value + " isSecure " + cookie.isSecure + " expires " + cookie.expires);
169 ++count;
170 }
171 is(count, gExpectedCookies, "total number of cookies");
172 cs.removeAll();
174 finishTest();
175 }