extensions/cookie/test/unit/test_bug526789.js

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:93726cd5ddde
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
3
4 function run_test() {
5 var cs = Cc["@mozilla.org/cookieService;1"].getService(Ci.nsICookieService);
6 var cm = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
7 var expiry = (Date.now() + 1000) * 1000;
8
9 cm.removeAll();
10
11 // Allow all cookies.
12 Services.prefs.setIntPref("network.cookie.cookieBehavior", 0);
13
14 // test that variants of 'baz.com' get normalized appropriately, but that
15 // malformed hosts are rejected
16 cm.add("baz.com", "/", "foo", "bar", false, false, true, expiry);
17 do_check_eq(cm.countCookiesFromHost("baz.com"), 1);
18 do_check_eq(cm.countCookiesFromHost("BAZ.com"), 1);
19 do_check_eq(cm.countCookiesFromHost(".baz.com"), 1);
20 do_check_eq(cm.countCookiesFromHost("baz.com."), 0);
21 do_check_eq(cm.countCookiesFromHost(".baz.com."), 0);
22 do_check_throws(function() {
23 cm.countCookiesFromHost("baz.com..");
24 }, Cr.NS_ERROR_ILLEGAL_VALUE);
25 do_check_throws(function() {
26 cm.countCookiesFromHost("baz..com");
27 }, Cr.NS_ERROR_ILLEGAL_VALUE);
28 do_check_throws(function() {
29 cm.countCookiesFromHost("..baz.com");
30 }, Cr.NS_ERROR_ILLEGAL_VALUE);
31 cm.remove("BAZ.com.", "foo", "/", false);
32 do_check_eq(cm.countCookiesFromHost("baz.com"), 1);
33 cm.remove("baz.com", "foo", "/", false);
34 do_check_eq(cm.countCookiesFromHost("baz.com"), 0);
35
36 // Test that 'baz.com' and 'baz.com.' are treated differently
37 cm.add("baz.com.", "/", "foo", "bar", false, false, true, expiry);
38 do_check_eq(cm.countCookiesFromHost("baz.com"), 0);
39 do_check_eq(cm.countCookiesFromHost("BAZ.com"), 0);
40 do_check_eq(cm.countCookiesFromHost(".baz.com"), 0);
41 do_check_eq(cm.countCookiesFromHost("baz.com."), 1);
42 do_check_eq(cm.countCookiesFromHost(".baz.com."), 1);
43 cm.remove("baz.com", "foo", "/", false);
44 do_check_eq(cm.countCookiesFromHost("baz.com."), 1);
45 cm.remove("baz.com.", "foo", "/", false);
46 do_check_eq(cm.countCookiesFromHost("baz.com."), 0);
47
48 // test that domain cookies are illegal for IP addresses, aliases such as
49 // 'localhost', and eTLD's such as 'co.uk'
50 cm.add("192.168.0.1", "/", "foo", "bar", false, false, true, expiry);
51 do_check_eq(cm.countCookiesFromHost("192.168.0.1"), 1);
52 do_check_eq(cm.countCookiesFromHost("192.168.0.1."), 0);
53 do_check_throws(function() {
54 cm.countCookiesFromHost(".192.168.0.1");
55 }, Cr.NS_ERROR_ILLEGAL_VALUE);
56 do_check_throws(function() {
57 cm.countCookiesFromHost(".192.168.0.1.");
58 }, Cr.NS_ERROR_ILLEGAL_VALUE);
59
60 cm.add("localhost", "/", "foo", "bar", false, false, true, expiry);
61 do_check_eq(cm.countCookiesFromHost("localhost"), 1);
62 do_check_eq(cm.countCookiesFromHost("localhost."), 0);
63 do_check_throws(function() {
64 cm.countCookiesFromHost(".localhost");
65 }, Cr.NS_ERROR_ILLEGAL_VALUE);
66 do_check_throws(function() {
67 cm.countCookiesFromHost(".localhost.");
68 }, Cr.NS_ERROR_ILLEGAL_VALUE);
69
70 cm.add("co.uk", "/", "foo", "bar", false, false, true, expiry);
71 do_check_eq(cm.countCookiesFromHost("co.uk"), 1);
72 do_check_eq(cm.countCookiesFromHost("co.uk."), 0);
73 do_check_throws(function() {
74 cm.countCookiesFromHost(".co.uk");
75 }, Cr.NS_ERROR_ILLEGAL_VALUE);
76 do_check_throws(function() {
77 cm.countCookiesFromHost(".co.uk.");
78 }, Cr.NS_ERROR_ILLEGAL_VALUE);
79
80 cm.removeAll();
81
82 // test that setting an empty or '.' http:// host results in a no-op
83 var uri = NetUtil.newURI("http://baz.com/");
84 var emptyuri = NetUtil.newURI("http:///");
85 var doturi = NetUtil.newURI("http://./");
86 do_check_eq(uri.asciiHost, "baz.com");
87 do_check_eq(emptyuri.asciiHost, "");
88 do_check_eq(doturi.asciiHost, ".");
89 cs.setCookieString(emptyuri, null, "foo2=bar", null);
90 do_check_eq(getCookieCount(), 0);
91 cs.setCookieString(doturi, null, "foo3=bar", null);
92 do_check_eq(getCookieCount(), 0);
93 cs.setCookieString(uri, null, "foo=bar", null);
94 do_check_eq(getCookieCount(), 1);
95
96 do_check_eq(cs.getCookieString(uri, null), "foo=bar");
97 do_check_eq(cs.getCookieString(emptyuri, null), null);
98 do_check_eq(cs.getCookieString(doturi, null), null);
99
100 do_check_eq(cm.countCookiesFromHost(""), 0);
101 do_check_throws(function() {
102 cm.countCookiesFromHost(".");
103 }, Cr.NS_ERROR_ILLEGAL_VALUE);
104 do_check_throws(function() {
105 cm.countCookiesFromHost("..");
106 }, Cr.NS_ERROR_ILLEGAL_VALUE);
107
108 var e = cm.getCookiesFromHost("");
109 do_check_false(e.hasMoreElements());
110 do_check_throws(function() {
111 cm.getCookiesFromHost(".");
112 }, Cr.NS_ERROR_ILLEGAL_VALUE);
113 do_check_throws(function() {
114 cm.getCookiesFromHost("..");
115 }, Cr.NS_ERROR_ILLEGAL_VALUE);
116
117 e = cm.getCookiesFromHost("baz.com");
118 do_check_true(e.hasMoreElements());
119 do_check_eq(e.getNext().QueryInterface(Ci.nsICookie2).name, "foo");
120 do_check_false(e.hasMoreElements());
121 e = cm.getCookiesFromHost("");
122 do_check_false(e.hasMoreElements());
123 do_check_throws(function() {
124 cm.getCookiesFromHost(".");
125 }, Cr.NS_ERROR_ILLEGAL_VALUE);
126 do_check_throws(function() {
127 cm.getCookiesFromHost("..");
128 }, Cr.NS_ERROR_ILLEGAL_VALUE);
129
130 cm.removeAll();
131
132 // test that an empty file:// host works
133 emptyuri = NetUtil.newURI("file:///");
134 do_check_eq(emptyuri.asciiHost, "");
135 do_check_eq(NetUtil.newURI("file://./").asciiHost, "");
136 do_check_eq(NetUtil.newURI("file://foo.bar/").asciiHost, "");
137 cs.setCookieString(emptyuri, null, "foo2=bar", null);
138 do_check_eq(getCookieCount(), 1);
139 cs.setCookieString(emptyuri, null, "foo3=bar; domain=", null);
140 do_check_eq(getCookieCount(), 2);
141 cs.setCookieString(emptyuri, null, "foo4=bar; domain=.", null);
142 do_check_eq(getCookieCount(), 2);
143 cs.setCookieString(emptyuri, null, "foo5=bar; domain=bar.com", null);
144 do_check_eq(getCookieCount(), 2);
145
146 do_check_eq(cs.getCookieString(emptyuri, null), "foo2=bar; foo3=bar");
147
148 do_check_eq(cm.countCookiesFromHost("baz.com"), 0);
149 do_check_eq(cm.countCookiesFromHost(""), 2);
150 do_check_throws(function() {
151 cm.countCookiesFromHost(".");
152 }, Cr.NS_ERROR_ILLEGAL_VALUE);
153
154 e = cm.getCookiesFromHost("baz.com");
155 do_check_false(e.hasMoreElements());
156 e = cm.getCookiesFromHost("");
157 do_check_true(e.hasMoreElements());
158 e.getNext();
159 do_check_true(e.hasMoreElements());
160 e.getNext();
161 do_check_false(e.hasMoreElements());
162 do_check_throws(function() {
163 cm.getCookiesFromHost(".");
164 }, Cr.NS_ERROR_ILLEGAL_VALUE);
165
166 cm.removeAll();
167
168 // test that an empty host to add() or remove() works,
169 // but a host of '.' doesn't
170 cm.add("", "/", "foo2", "bar", false, false, true, expiry);
171 do_check_eq(getCookieCount(), 1);
172 do_check_throws(function() {
173 cm.add(".", "/", "foo3", "bar", false, false, true, expiry);
174 }, Cr.NS_ERROR_ILLEGAL_VALUE);
175 do_check_eq(getCookieCount(), 1);
176
177 cm.remove("", "foo2", "/", false);
178 do_check_eq(getCookieCount(), 0);
179 do_check_throws(function() {
180 cm.remove(".", "foo3", "/", false);
181 }, Cr.NS_ERROR_ILLEGAL_VALUE);
182
183 // test that the 'domain' attribute accepts a leading dot for IP addresses,
184 // aliases such as 'localhost', and eTLD's such as 'co.uk'; but that the
185 // resulting cookie is for the exact host only.
186 testDomainCookie("http://192.168.0.1/", "192.168.0.1");
187 testDomainCookie("http://localhost/", "localhost");
188 testDomainCookie("http://co.uk/", "co.uk");
189
190 // Test that trailing dots are treated differently for purposes of the
191 // 'domain' attribute when using setCookieString.
192 testTrailingDotCookie("http://192.168.0.1", "192.168.0.1");
193 testTrailingDotCookie("http://localhost", "localhost");
194 testTrailingDotCookie("http://foo.com", "foo.com");
195
196 cm.removeAll();
197 }
198
199 function getCookieCount() {
200 var count = 0;
201 var cm = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
202 var enumerator = cm.enumerator;
203 while (enumerator.hasMoreElements()) {
204 if (!(enumerator.getNext() instanceof Ci.nsICookie2))
205 throw new Error("not a cookie");
206 ++count;
207 }
208 return count;
209 }
210
211 function testDomainCookie(uriString, domain) {
212 var cs = Cc["@mozilla.org/cookieService;1"].getService(Ci.nsICookieService);
213 var cm = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
214
215 cm.removeAll();
216
217 var uri = NetUtil.newURI(uriString);
218 cs.setCookieString(uri, null, "foo=bar; domain=" + domain, null);
219 var e = cm.getCookiesFromHost(domain);
220 do_check_true(e.hasMoreElements());
221 do_check_eq(e.getNext().QueryInterface(Ci.nsICookie2).host, domain);
222 cm.removeAll();
223
224 cs.setCookieString(uri, null, "foo=bar; domain=." + domain, null);
225 e = cm.getCookiesFromHost(domain);
226 do_check_true(e.hasMoreElements());
227 do_check_eq(e.getNext().QueryInterface(Ci.nsICookie2).host, domain);
228 cm.removeAll();
229 }
230
231 function testTrailingDotCookie(uriString, domain) {
232 var cs = Cc["@mozilla.org/cookieService;1"].getService(Ci.nsICookieService);
233 var cm = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
234
235 cm.removeAll();
236
237 var uri = NetUtil.newURI(uriString);
238 cs.setCookieString(uri, null, "foo=bar; domain=" + domain + ".", null);
239 do_check_eq(cm.countCookiesFromHost(domain), 0);
240 do_check_eq(cm.countCookiesFromHost(domain + "."), 0);
241 cm.removeAll();
242
243 uri = NetUtil.newURI(uriString + ".");
244 cs.setCookieString(uri, null, "foo=bar; domain=" + domain, null);
245 do_check_eq(cm.countCookiesFromHost(domain), 0);
246 do_check_eq(cm.countCookiesFromHost(domain + "."), 0);
247 cm.removeAll();
248 }
249

mercurial