summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/browser_394759_behavior.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/sessionstore/test/browser_394759_behavior.js')
-rw-r--r--browser/components/sessionstore/test/browser_394759_behavior.js91
1 files changed, 91 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_394759_behavior.js b/browser/components/sessionstore/test/browser_394759_behavior.js
new file mode 100644
index 0000000000..ee4b121e84
--- /dev/null
+++ b/browser/components/sessionstore/test/browser_394759_behavior.js
@@ -0,0 +1,91 @@
+/**
+ * Test helper function that opens a series of windows, closes them
+ * and then checks the closed window data from SessionStore against
+ * expected results.
+ *
+ * @param windowsToOpen (Array)
+ * An array of Objects, where each object must define a single
+ * property "isPopup" for whether or not the opened window should
+ * be a popup.
+ * @param expectedResults (Array)
+ * An Object with two properies: mac and other, where each points
+ * at yet another Object, with the following properties:
+ *
+ * popup (int):
+ * The number of popup windows we expect to be in the closed window
+ * data.
+ * normal (int):
+ * The number of normal windows we expect to be in the closed window
+ * data.
+ * @returns Promise
+ */
+function testWindows(windowsToOpen, expectedResults) {
+ return (async function () {
+ let num = 0;
+ for (let winData of windowsToOpen) {
+ let features = "chrome,dialog=no," + (winData.isPopup ? "all=no" : "all");
+ let url = "http://example.com/?window=" + num;
+ num = num + 1;
+
+ let openWindowPromise = BrowserTestUtils.waitForNewWindow({ url });
+ openDialog(AppConstants.BROWSER_CHROME_URL, "", features, url);
+ let win = await openWindowPromise;
+ await BrowserTestUtils.closeWindow(win);
+ }
+
+ let closedWindowData = ss.getClosedWindowData();
+ let numPopups = closedWindowData.filter(function (el, i, arr) {
+ return el.isPopup;
+ }).length;
+ let numNormal = ss.getClosedWindowCount() - numPopups;
+ // #ifdef doesn't work in browser-chrome tests, so do a simple regex on platform
+ let oResults = navigator.platform.match(/Mac/)
+ ? expectedResults.mac
+ : expectedResults.other;
+ is(
+ numPopups,
+ oResults.popup,
+ "There were " + oResults.popup + " popup windows to reopen"
+ );
+ is(
+ numNormal,
+ oResults.normal,
+ "There were " + oResults.normal + " normal windows to repoen"
+ );
+ })();
+}
+
+add_task(async function test_closed_window_states() {
+ // This test takes quite some time, and timeouts frequently, so we require
+ // more time to run.
+ // See Bug 518970.
+ requestLongerTimeout(2);
+
+ let windowsToOpen = [
+ { isPopup: false },
+ { isPopup: false },
+ { isPopup: true },
+ { isPopup: true },
+ { isPopup: true },
+ ];
+ let expectedResults = {
+ mac: { popup: 3, normal: 0 },
+ other: { popup: 3, normal: 1 },
+ };
+
+ await testWindows(windowsToOpen, expectedResults);
+
+ let windowsToOpen2 = [
+ { isPopup: false },
+ { isPopup: false },
+ { isPopup: false },
+ { isPopup: false },
+ { isPopup: false },
+ ];
+ let expectedResults2 = {
+ mac: { popup: 0, normal: 3 },
+ other: { popup: 0, normal: 3 },
+ };
+
+ await testWindows(windowsToOpen2, expectedResults2);
+});