summaryrefslogtreecommitdiffstats
path: root/browser/components/preferences/in-content/tests/browser_bug705422.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/preferences/in-content/tests/browser_bug705422.js')
-rw-r--r--browser/components/preferences/in-content/tests/browser_bug705422.js144
1 files changed, 144 insertions, 0 deletions
diff --git a/browser/components/preferences/in-content/tests/browser_bug705422.js b/browser/components/preferences/in-content/tests/browser_bug705422.js
new file mode 100644
index 000000000..24732083b
--- /dev/null
+++ b/browser/components/preferences/in-content/tests/browser_bug705422.js
@@ -0,0 +1,144 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+function test() {
+ waitForExplicitFinish();
+ // Allow all cookies, then actually set up the test
+ SpecialPowers.pushPrefEnv({"set": [["network.cookie.cookieBehavior", 0]]}, initTest);
+}
+
+function initTest() {
+ const searchTerm = "example";
+ const dummyTerm = "elpmaxe";
+
+ var cm = Components.classes["@mozilla.org/cookiemanager;1"]
+ .getService(Components.interfaces.nsICookieManager);
+
+ // delete all cookies (might be left over from other tests)
+ cm.removeAll();
+
+ // data for cookies
+ var vals = [[searchTerm+".com", dummyTerm, dummyTerm], // match
+ [searchTerm+".org", dummyTerm, dummyTerm], // match
+ [dummyTerm+".com", searchTerm, dummyTerm], // match
+ [dummyTerm+".edu", searchTerm+dummyTerm, dummyTerm], // match
+ [dummyTerm+".net", dummyTerm, searchTerm], // match
+ [dummyTerm+".org", dummyTerm, searchTerm+dummyTerm], // match
+ [dummyTerm+".int", dummyTerm, dummyTerm]]; // no match
+
+ // matches must correspond to above data
+ const matches = 6;
+
+ var ios = Components.classes["@mozilla.org/network/io-service;1"]
+ .getService(Components.interfaces.nsIIOService);
+ var cookieSvc = Components.classes["@mozilla.org/cookieService;1"]
+ .getService(Components.interfaces.nsICookieService);
+ var v;
+ // inject cookies
+ for (v in vals) {
+ let [host, name, value] = vals[v];
+ var cookieUri = ios.newURI("http://"+host, null, null);
+ cookieSvc.setCookieString(cookieUri, null, name+"="+value+";", null);
+ }
+
+ // open cookie manager
+ var cmd = window.openDialog("chrome://browser/content/preferences/cookies.xul",
+ "Browser:Cookies", "", {});
+
+ // when it has loaded, run actual tests
+ cmd.addEventListener("load", function() { executeSoon(function() { runTest(cmd, searchTerm, vals.length, matches); }); }, false);
+}
+
+function isDisabled(win, expectation) {
+ var disabled = win.document.getElementById("removeAllCookies").disabled;
+ is(disabled, expectation, "Remove all cookies button has correct state: "+(expectation?"disabled":"enabled"));
+}
+
+function runTest(win, searchTerm, cookies, matches) {
+ var cm = Components.classes["@mozilla.org/cookiemanager;1"]
+ .getService(Components.interfaces.nsICookieManager);
+
+
+ // number of cookies should match injected cookies
+ var injectedCookies = 0,
+ injectedEnumerator = cm.enumerator;
+ while (injectedEnumerator.hasMoreElements()) {
+ injectedCookies++;
+ injectedEnumerator.getNext();
+ }
+ is(injectedCookies, cookies, "Number of cookies match injected cookies");
+
+ // "delete all cookies" should be enabled
+ isDisabled(win, false);
+
+ // filter cookies and count matches
+ win.gCookiesWindow.setFilter(searchTerm);
+ is(win.gCookiesWindow._view.rowCount, matches, "Correct number of cookies shown after filter is applied");
+
+ // "delete all cookies" should be enabled
+ isDisabled(win, false);
+
+
+ // select first cookie and delete
+ var tree = win.document.getElementById("cookiesList");
+ var deleteButton = win.document.getElementById("removeSelectedCookies");
+ var rect = tree.treeBoxObject.getCoordsForCellItem(0, tree.columns[0], "cell");
+ EventUtils.synthesizeMouse(tree.body, rect.x + rect.width / 2, rect.y + rect.height / 2, {}, win);
+ EventUtils.synthesizeMouseAtCenter(deleteButton, {}, win);
+
+ // count cookies should be matches-1
+ is(win.gCookiesWindow._view.rowCount, matches-1, "Deleted selected cookie");
+
+ // select two adjacent cells and delete
+ EventUtils.synthesizeMouse(tree.body, rect.x + rect.width / 2, rect.y + rect.height / 2, {}, win);
+ var eventObj = {};
+ if (navigator.platform.indexOf("Mac") >= 0)
+ eventObj.metaKey = true;
+ else
+ eventObj.ctrlKey = true;
+ rect = tree.treeBoxObject.getCoordsForCellItem(1, tree.columns[0], "cell");
+ EventUtils.synthesizeMouse(tree.body, rect.x + rect.width / 2, rect.y + rect.height / 2, eventObj, win);
+ EventUtils.synthesizeMouseAtCenter(deleteButton, {}, win);
+
+ // count cookies should be matches-3
+ is(win.gCookiesWindow._view.rowCount, matches-3, "Deleted selected two adjacent cookies");
+
+ // "delete all cookies" should be enabled
+ isDisabled(win, false);
+
+ // delete all cookies and count
+ var deleteAllButton = win.document.getElementById("removeAllCookies");
+ EventUtils.synthesizeMouseAtCenter(deleteAllButton, {}, win);
+ is(win.gCookiesWindow._view.rowCount, 0, "Deleted all matching cookies");
+
+ // "delete all cookies" should be disabled
+ isDisabled(win, true);
+
+ // clear filter and count should be cookies-matches
+ win.gCookiesWindow.setFilter("");
+ is(win.gCookiesWindow._view.rowCount, cookies-matches, "Unmatched cookies remain");
+
+ // "delete all cookies" should be enabled
+ isDisabled(win, false);
+
+ // delete all cookies and count should be 0
+ EventUtils.synthesizeMouseAtCenter(deleteAllButton, {}, win);
+ is(win.gCookiesWindow._view.rowCount, 0, "Deleted all cookies");
+
+ // check that datastore is also at 0
+ var remainingCookies = 0,
+ remainingEnumerator = cm.enumerator;
+ while (remainingEnumerator.hasMoreElements()) {
+ remainingCookies++;
+ remainingEnumerator.getNext();
+ }
+ is(remainingCookies, 0, "Zero cookies remain");
+
+ // "delete all cookies" should be disabled
+ isDisabled(win, true);
+
+ // clean up
+ win.close();
+ finish();
+}
+