extensions/cookie/test/unit/test_bug526789.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

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

mercurial