summaryrefslogtreecommitdiffstats
path: root/extensions/cookie/test/file_testloadflags_chromescript.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/cookie/test/file_testloadflags_chromescript.js')
-rw-r--r--extensions/cookie/test/file_testloadflags_chromescript.js112
1 files changed, 112 insertions, 0 deletions
diff --git a/extensions/cookie/test/file_testloadflags_chromescript.js b/extensions/cookie/test/file_testloadflags_chromescript.js
new file mode 100644
index 000000000..26eedacd9
--- /dev/null
+++ b/extensions/cookie/test/file_testloadflags_chromescript.js
@@ -0,0 +1,112 @@
+let { classes: Cc, interfaces: Ci } = Components;
+
+var gObs;
+
+function info(s) {
+ sendAsyncMessage("info", { str: String(s) });
+}
+
+function ok(c, m) {
+ sendAsyncMessage("ok", { c, m });
+}
+
+function is(a, b, m) {
+ ok(Object.is(a, b), m + " (" + a + " === " + b + ")");
+}
+
+// Count headers.
+function obs() {
+ info("adding observer");
+
+ this.os = Cc["@mozilla.org/observer-service;1"]
+ .getService(Ci.nsIObserverService);
+ this.os.addObserver(this, "http-on-modify-request", false);
+}
+
+obs.prototype = {
+ observe(theSubject, theTopic, theData) {
+ info("theSubject " + theSubject);
+ info("theTopic " + theTopic);
+ info("theData " + theData);
+
+ var channel = theSubject.QueryInterface(Ci.nsIHttpChannel);
+ info("channel " + channel);
+ try {
+ info("channel.URI " + channel.URI);
+ info("channel.URI.spec " + channel.URI.spec);
+ channel.visitRequestHeaders({
+ visitHeader: function(aHeader, aValue) {
+ info(aHeader + ": " + aValue);
+ }});
+ } catch (err) {
+ ok(false, "catch error " + err);
+ }
+
+ // Ignore notifications we don't care about (like favicons)
+ if (channel.URI.spec.indexOf(
+ "http://example.org/tests/extensions/cookie/test/") == -1) {
+ info("ignoring this one");
+ return;
+ }
+
+ sendAsyncMessage("observer:gotCookie",
+ { cookie: channel.getRequestHeader("Cookie"),
+ uri: channel.URI.spec });
+ },
+
+ remove() {
+ info("removing observer");
+
+ this.os.removeObserver(this, "http-on-modify-request");
+ this.os = null;
+ }
+}
+
+function getCookieCount(cs) {
+ let count = 0;
+ let list = cs.enumerator;
+ while (list.hasMoreElements()) {
+ let cookie = list.getNext().QueryInterface(Ci.nsICookie);
+ info("cookie: " + cookie);
+ info("cookie host " + cookie.host + " path " + cookie.path + " name " + cookie.name +
+ " value " + cookie.value + " isSecure " + cookie.isSecure + " expires " + cookie.expires);
+ ++count;
+ }
+
+ return count;
+}
+
+addMessageListener("init", ({ domain }) => {
+ let cs = Cc["@mozilla.org/cookiemanager;1"]
+ .getService(Ci.nsICookieManager2);
+
+ info("we are going to remove these cookies");
+
+ let count = getCookieCount(cs);
+ info(count + " cookies");
+
+ cs.removeAll();
+ cs.add(domain, "", "oh", "hai", false, false, true, Math.pow(2, 62), {});
+ is(cs.countCookiesFromHost(domain), 1, "number of cookies for domain " + domain);
+
+ gObs = new obs();
+ sendAsyncMessage("init:return");
+});
+
+addMessageListener("getCookieCount", () => {
+ let cs = Cc["@mozilla.org/cookiemanager;1"]
+ .getService(Ci.nsICookieManager);
+ let count = getCookieCount(cs);
+
+ cs.removeAll();
+ sendAsyncMessage("getCookieCount:return", { count });
+});
+
+addMessageListener("shutdown", () => {
+ gObs.remove();
+
+ let cs = Cc["@mozilla.org/cookiemanager;1"]
+ .getService(Ci.nsICookieManager2);
+ cs.removeAll();
+ sendAsyncMessage("shutdown:return");
+});