summaryrefslogtreecommitdiffstats
path: root/comm/suite/components/tests/browser/browser_423132.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/suite/components/tests/browser/browser_423132.js')
-rw-r--r--comm/suite/components/tests/browser/browser_423132.js86
1 files changed, 86 insertions, 0 deletions
diff --git a/comm/suite/components/tests/browser/browser_423132.js b/comm/suite/components/tests/browser/browser_423132.js
new file mode 100644
index 0000000000..87108f6c6f
--- /dev/null
+++ b/comm/suite/components/tests/browser/browser_423132.js
@@ -0,0 +1,86 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
+
+function browserWindowsCount() {
+ let count = 0;
+ let e = Services.wm.getEnumerator("navigator:browser");
+ while (e.hasMoreElements()) {
+ if (!e.getNext().closed)
+ ++count;
+ }
+ return count;
+}
+
+function test() {
+ // test that cookies are stored and restored correctly by sessionstore,
+ // bug 423132, ported by bug 524371.
+ is(browserWindowsCount(), 1, "Only one browser window should be open initially");
+
+ waitForExplicitFinish();
+
+ let cs = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager);
+ cs.removeAll();
+
+ // make sure that sessionstore.js can be forced to be created by setting
+ // the interval pref to 0
+ Services.prefs.setIntPref("browser.sessionstore.interval", 0);
+
+ const testURL = "http://mochi.test:8888/browser/" +
+ "suite/common/tests/browser/browser_423132_sample.html";
+
+ // open a new window
+ let newWin = openDialog(location, "_blank", "chrome,all,dialog=no", "about:blank");
+
+ // make sure sessionstore saves the cookie data, then close the window
+ newWin.addEventListener("load", function testNewWinLoad(aEvent) {
+ newWin.removeEventListener("load", testNewWinLoad);
+
+ newWin.getBrowser().selectedBrowser.loadURI(testURL, null, null);
+
+ newWin.getBrowser().addEventListener("pageshow", function testNewWinPageShow(aEvent) {
+ newWin.getBrowser().removeEventListener("pageshow", testNewWinPageShow, true);
+
+ // get the sessionstore state for the window
+ let state = ss.getWindowState(newWin);
+
+ // verify our cookie got set during pageload
+ let e = cs.enumerator;
+ let cookie;
+ let i = 0;
+ while (e.hasMoreElements()) {
+ cookie = e.getNext().QueryInterface(Ci.nsICookie);
+ i++;
+ }
+ is(i, 1, "expected one cookie");
+
+ // remove the cookie
+ cs.removeAll();
+
+ // restore the window state
+ ss.setWindowState(newWin, state, true);
+
+ // at this point, the cookie should be restored...
+ e = cs.enumerator;
+ let cookie2;
+ while (e.hasMoreElements()) {
+ cookie2 = e.getNext().QueryInterface(Ci.nsICookie);
+ if (cookie.name == cookie2.name)
+ break;
+ }
+ is(cookie.name, cookie2.name, "cookie name successfully restored");
+ is(cookie.value, cookie2.value, "cookie value successfully restored");
+ is(cookie.path, cookie2.path, "cookie path successfully restored");
+
+ // clean up
+ if (Services.prefs.prefHasUserValue("browser.sessionstore.interval"))
+ Services.prefs.clearUserPref("browser.sessionstore.interval");
+ cs.removeAll();
+ newWin.close();
+ is(browserWindowsCount(), 1, "Only one browser window should be open eventually");
+ finish();
+ }, true);
+ });
+}