summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/browser_600545.js
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /browser/components/sessionstore/test/browser_600545.js
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'browser/components/sessionstore/test/browser_600545.js')
-rw-r--r--browser/components/sessionstore/test/browser_600545.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_600545.js b/browser/components/sessionstore/test/browser_600545.js
new file mode 100644
index 000000000..6852357c2
--- /dev/null
+++ b/browser/components/sessionstore/test/browser_600545.js
@@ -0,0 +1,89 @@
+/* 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/. */
+
+requestLongerTimeout(2);
+
+var stateBackup = JSON.parse(ss.getBrowserState());
+
+function test() {
+ /** Test for Bug 600545 **/
+ waitForExplicitFinish();
+ testBug600545();
+}
+
+function testBug600545() {
+ // Set the pref to false to cause non-app tabs to be stripped out on a save
+ Services.prefs.setBoolPref("browser.sessionstore.resume_from_crash", false);
+ Services.prefs.setIntPref("browser.sessionstore.interval", 2000);
+
+ registerCleanupFunction(function () {
+ Services.prefs.clearUserPref("browser.sessionstore.resume_from_crash");
+ Services.prefs.clearUserPref("browser.sessionstore.interval");
+ });
+
+ // This tests the following use case: When multiple windows are open
+ // and browser.sessionstore.resume_from_crash preference is false,
+ // tab session data for non-active window is stripped for non-pinned
+ // tabs. This occurs after "sessionstore-state-write-complete"
+ // fires which will only fire in this case if there is at least one
+ // pinned tab.
+ let state = { windows: [
+ {
+ tabs: [
+ { entries: [{ url: "http://example.org#0" }], pinned:true },
+ { entries: [{ url: "http://example.com#1" }] },
+ { entries: [{ url: "http://example.com#2" }] },
+ ],
+ selected: 2
+ },
+ {
+ tabs: [
+ { entries: [{ url: "http://example.com#3" }] },
+ { entries: [{ url: "http://example.com#4" }] },
+ { entries: [{ url: "http://example.com#5" }] },
+ { entries: [{ url: "http://example.com#6" }] }
+ ],
+ selected: 3
+ }
+ ] };
+
+ waitForBrowserState(state, function() {
+ // Need to wait for SessionStore's saveState function to be called
+ // so that non-pinned tabs will be stripped from non-active window
+ waitForSaveState(function () {
+ let expectedNumberOfTabs = getStateTabCount(state);
+ let retrievedState = JSON.parse(ss.getBrowserState());
+ let actualNumberOfTabs = getStateTabCount(retrievedState);
+
+ is(actualNumberOfTabs, expectedNumberOfTabs,
+ "Number of tabs in retreived session data, matches number of tabs set.");
+
+ done();
+ });
+ });
+}
+
+function done() {
+ // Enumerate windows and close everything but our primary window. We can't
+ // use waitForFocus() because apparently it's buggy. See bug 599253.
+ let windowsEnum = Services.wm.getEnumerator("navigator:browser");
+ let closeWinPromises = [];
+ while (windowsEnum.hasMoreElements()) {
+ let currentWindow = windowsEnum.getNext();
+ if (currentWindow != window)
+ closeWinPromises.push(BrowserTestUtils.closeWindow(currentWindow));
+ }
+
+ Promise.all(closeWinPromises).then(() => {
+ waitForBrowserState(stateBackup, finish);
+ });
+}
+
+// Count up the number of tabs in the state data
+function getStateTabCount(aState) {
+ let tabCount = 0;
+ for (let i in aState.windows)
+ tabCount += aState.windows[i].tabs.length;
+ return tabCount;
+}