extensions/cookie/test/unit/test_bug526789.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     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;
     9   cm.removeAll();
    11   // Allow all cookies.
    12   Services.prefs.setIntPref("network.cookie.cookieBehavior", 0);
    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);
    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);
    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);
    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);
    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);
    80   cm.removeAll();
    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);
    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);
   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);
   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);
   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);
   130   cm.removeAll();
   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);
   146   do_check_eq(cs.getCookieString(emptyuri, null), "foo2=bar; foo3=bar");
   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);
   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);
   166   cm.removeAll();
   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);
   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);
   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");
   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");
   196   cm.removeAll();
   197 }
   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 }
   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);
   215   cm.removeAll();
   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();
   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 }
   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);
   235   cm.removeAll();
   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();
   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 }

mercurial