extensions/cookie/test/file_testloadflags.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/extensions/cookie/test/file_testloadflags.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,175 @@
     1.4 +var gExpectedCookies;
     1.5 +var gExpectedHeaders;
     1.6 +var gExpectedLoads;
     1.7 +
     1.8 +var gObs;
     1.9 +var gPopup;
    1.10 +
    1.11 +var gHeaders = 0;
    1.12 +var gLoads = 0;
    1.13 +
    1.14 +// setupTest() is run from 'onload='.
    1.15 +function setupTest(uri, domain, cookies, loads, headers) {
    1.16 +  ok(true, "setupTest uri: " + uri + " domain: " + domain + " cookies: " + cookies +
    1.17 +           " loads: " + loads + " headers: " + headers);
    1.18 +
    1.19 +  SimpleTest.waitForExplicitFinish();
    1.20 +
    1.21 +  SpecialPowers.Cc["@mozilla.org/preferences-service;1"]
    1.22 +               .getService(SpecialPowers.Ci.nsIPrefBranch)
    1.23 +               .setIntPref("network.cookie.cookieBehavior", 1);
    1.24 +
    1.25 +  var cs = SpecialPowers.Cc["@mozilla.org/cookiemanager;1"]
    1.26 +                        .getService(SpecialPowers.Ci.nsICookieManager2);
    1.27 +
    1.28 +  ok(true, "we are going to remove these cookies");
    1.29 +  var count = 0;
    1.30 +  var list = cs.enumerator;
    1.31 +  while (list.hasMoreElements()) {
    1.32 +    var cookie = list.getNext().QueryInterface(SpecialPowers.Ci.nsICookie);
    1.33 +    ok(true, "cookie: " + cookie);
    1.34 +    ok(true, "cookie host " + cookie.host + " path " + cookie.path + " name " + cookie.name +
    1.35 +       " value " + cookie.value + " isSecure " + cookie.isSecure + " expires " + cookie.expires);
    1.36 +    ++count;
    1.37 +  }
    1.38 +  ok(true, count + " cookies");
    1.39 +
    1.40 +  cs.removeAll();
    1.41 +  cs.add(domain, "", "oh", "hai", false, false, true, Math.pow(2, 62));
    1.42 +  is(cs.countCookiesFromHost(domain), 1, "number of cookies for domain " + domain);
    1.43 +
    1.44 +  gExpectedCookies = cookies;
    1.45 +  gExpectedLoads = loads;
    1.46 +  gExpectedHeaders = headers;
    1.47 +
    1.48 +  gObs = new obs();
    1.49 +  // Listen for MessageEvents.
    1.50 +  window.addEventListener("message", messageReceiver, false);
    1.51 +
    1.52 +  // load a window which contains an iframe; each will attempt to set
    1.53 +  // cookies from their respective domains.
    1.54 +  gPopup = window.open(uri, 'hai', 'width=100,height=100');
    1.55 +}
    1.56 +
    1.57 +function finishTest()
    1.58 +{
    1.59 +  gObs.remove();
    1.60 +
    1.61 +  SpecialPowers.Cc["@mozilla.org/preferences-service;1"]
    1.62 +               .getService(SpecialPowers.Ci.nsIPrefBranch)
    1.63 +               .clearUserPref("network.cookie.cookieBehavior");
    1.64 +
    1.65 +  SimpleTest.finish();
    1.66 +}
    1.67 +
    1.68 +// Count headers.
    1.69 +function obs () {
    1.70 +  netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    1.71 +
    1.72 +  ok(true, "adding observer");
    1.73 +
    1.74 +  this.window = window;
    1.75 +  this.os = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
    1.76 +                         .getService(SpecialPowers.Ci.nsIObserverService);
    1.77 +  this.os.addObserver(this, "http-on-modify-request", false);
    1.78 +}
    1.79 +
    1.80 +obs.prototype = {
    1.81 +  observe: function obs_observe (theSubject, theTopic, theData)
    1.82 +  {
    1.83 +    ok(true, "theSubject " + theSubject);
    1.84 +    ok(true, "theTopic " + theTopic);
    1.85 +    ok(true, "theData " + theData);
    1.86 +
    1.87 +    var channel = theSubject.QueryInterface(
    1.88 +                    this.window.SpecialPowers.Ci.nsIHttpChannel);
    1.89 +    ok(true, "channel " + channel);
    1.90 +    try {
    1.91 +      ok(true, "channel.URI " + channel.URI);
    1.92 +      ok(true, "channel.URI.spec " + channel.URI.spec);
    1.93 +      channel.visitRequestHeaders({
    1.94 +        visitHeader: function(aHeader, aValue) {
    1.95 +          ok(true, aHeader + ": " + aValue);
    1.96 +        }});
    1.97 +    } catch (err) {
    1.98 +      ok(false, "catch error " + err);
    1.99 +    }
   1.100 +
   1.101 +    // Ignore notifications we don't care about (like favicons)
   1.102 +    if (channel.URI.spec.indexOf(
   1.103 +          "http://example.org/tests/extensions/cookie/test/") == -1) {
   1.104 +      ok(true, "ignoring this one");
   1.105 +      return;
   1.106 +    }
   1.107 +
   1.108 +    this.window.isnot(channel.getRequestHeader("Cookie").indexOf("oh=hai"), -1,
   1.109 +                      "cookie 'oh=hai' is in header for " + channel.URI.spec);
   1.110 +    ++gHeaders;
   1.111 +  },
   1.112 +
   1.113 +  remove: function obs_remove()
   1.114 +  {
   1.115 +    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
   1.116 +
   1.117 +    ok(true, "removing observer");
   1.118 +
   1.119 +    this.os.removeObserver(this, "http-on-modify-request");
   1.120 +    this.os = null;
   1.121 +    this.window = null;
   1.122 +  }
   1.123 +}
   1.124 +
   1.125 +/** Receives MessageEvents to this window. */
   1.126 +// Count and check loads.
   1.127 +function messageReceiver(evt)
   1.128 +{
   1.129 +  ok(evt.data == "f_lf_i msg data img" || evt.data == "f_lf_i msg data page",
   1.130 +     "message data received from popup");
   1.131 +  if (evt.data == "f_lf_i msg data img") {
   1.132 +    ok(true, "message data received from popup for image");
   1.133 +  }
   1.134 +  if (evt.data == "f_lf_i msg data page") {
   1.135 +    ok(true, "message data received from popup for page");
   1.136 +  }
   1.137 +  if (evt.data != "f_lf_i msg data img" && evt.data != "f_lf_i msg data page") {
   1.138 +    ok(true, "got this message but don't know what it is " + evt.data);
   1.139 +    gPopup.close();
   1.140 +    window.removeEventListener("message", messageReceiver, false);
   1.141 +
   1.142 +    finishTest();
   1.143 +    return;
   1.144 +  }
   1.145 +
   1.146 +  // only run the test when all our children are done loading & setting cookies
   1.147 +  if (++gLoads == gExpectedLoads) {
   1.148 +    gPopup.close();
   1.149 +    window.removeEventListener("message", messageReceiver, false);
   1.150 +
   1.151 +    runTest();
   1.152 +  }
   1.153 +}
   1.154 +
   1.155 +// runTest() is run by messageReceiver().
   1.156 +// Check headers, and count and check cookies.
   1.157 +function runTest() {
   1.158 +  // set a cookie from a domain of "localhost"
   1.159 +  document.cookie = "o=noes";
   1.160 +
   1.161 +  is(gHeaders, gExpectedHeaders, "number of observed request headers");
   1.162 +
   1.163 +  var cs = SpecialPowers.Cc["@mozilla.org/cookiemanager;1"]
   1.164 +                        .getService(SpecialPowers.Ci.nsICookieManager);
   1.165 +  var count = 0;
   1.166 +  var list = cs.enumerator;
   1.167 +  while (list.hasMoreElements()) {
   1.168 +    var cookie = list.getNext().QueryInterface(SpecialPowers.Ci.nsICookie);
   1.169 +    ok(true, "cookie: " + cookie);
   1.170 +    ok(true, "cookie host " + cookie.host + " path " + cookie.path + " name " + cookie.name +
   1.171 +       " value " + cookie.value + " isSecure " + cookie.isSecure + " expires " + cookie.expires);
   1.172 +    ++count;
   1.173 +  }
   1.174 +  is(count, gExpectedCookies, "total number of cookies");
   1.175 +  cs.removeAll();
   1.176 +
   1.177 +  finishTest();
   1.178 +}

mercurial