Bug 1171708 - Rewrite browser_490040.js to be more Task-y. r=billm draft
authorMike Conley <mconley@mozilla.com>
Wed, 11 Nov 2015 14:16:02 -0500
changeset 309420 4383b875c03f15c4e634cae749cd93c89796032e
parent 309419 e9457e83c8044f3ad392a6d46f2405080ebb1a4b
child 309421 ec03c259160fa02602e3c3c957c854baee4a95e4
push id7601
push usermconley@mozilla.com
push dateTue, 17 Nov 2015 19:41:09 +0000
reviewersbillm
bugs1171708
milestone45.0a1
Bug 1171708 - Rewrite browser_490040.js to be more Task-y. r=billm
browser/components/sessionstore/test/browser_490040.js
--- a/browser/components/sessionstore/test/browser_490040.js
+++ b/browser/components/sessionstore/test/browser_490040.js
@@ -1,123 +1,65 @@
 /* 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/. */
 
-function test() {
-  /** Test for Bug 490040 **/
-
-  waitForExplicitFinish();
-
-  function testWithState(aState) {
-    // Ensure we can store the window if needed.
-    let curClosedWindowCount = ss.getClosedWindowCount();
-    gPrefService.setIntPref("browser.sessionstore.max_windows_undo",
-                            curClosedWindowCount + 1);
-
-    var origWin;
-    function windowObserver(aSubject, aTopic, aData) {
-      let theWin = aSubject.QueryInterface(Ci.nsIDOMWindow);
-      if (origWin && theWin != origWin)
-        return;
-
-      switch (aTopic) {
-        case "domwindowopened":
-          origWin = theWin;
-          theWin.addEventListener("load", function () {
-            theWin.removeEventListener("load", arguments.callee, false);
-            executeSoon(function () {
-              // Close the window as soon as the first tab loads, or
-              // immediately if there are no tabs.
-              if (aState.windowState.windows[0].tabs[0].entries.length) {
-                theWin.gBrowser.addEventListener("load", function() {
-                  theWin.gBrowser.removeEventListener("load",
-                                                      arguments.callee, true);
-                  theWin.close();
-                }, true);
-              } else {
-                executeSoon(function () {
-                  theWin.close();
-                });
-              }
-              ss.setWindowState(theWin, JSON.stringify(aState.windowState),
-                                true);
-            });
-          }, false);
-          break;
-
-        case "domwindowclosed":
-          Services.ww.unregisterNotification(windowObserver);
-          // Use executeSoon to ensure this happens after SS observer.
-          executeSoon(function () {
-            is(ss.getClosedWindowCount(),
-               curClosedWindowCount + (aState.shouldBeAdded ? 1 : 0),
-               "That window should " + (aState.shouldBeAdded ? "" : "not ") +
-               "be restorable");
-            executeSoon(runNextTest);
-          });
-          break;
-      }
+// Only windows with open tabs are restorable. Windows where a lone tab is
+// detached may have _closedTabs, but is left with just an empty tab.
+const STATES = [{
+    shouldBeAdded: true,
+    windowState: {
+      windows: [{
+        tabs: [{ entries: [{ url: "http://example.com", title: "example.com" }] }],
+        selected: 1,
+        _closedTabs: []
+      }]
+    }
+  }, {
+    shouldBeAdded: false,
+    windowState: {
+      windows: [{
+        tabs: [{ entries: [] }],
+        _closedTabs: []
+      }]
+    }
+  }, {
+    shouldBeAdded: false,
+    windowState: {
+      windows: [{
+        tabs: [{ entries: [] }],
+        _closedTabs: [{ state: { entries: [{ url: "http://example.com", index: 1 }] } }]
+      }]
     }
-    Services.ww.registerNotification(windowObserver);
-    Services.ww.openWindow(null,
-                           location,
-                           "_blank",
-                           "chrome,all,dialog=no",
-                           null);
-  }
+  }, {
+    shouldBeAdded: false,
+    windowState: {
+      windows: [{
+        tabs: [{ entries: [] }],
+        _closedTabs: [],
+        extData: { keyname: "pi != " + Math.random() }
+      }]
+    }
+  }];
 
-  // Only windows with open tabs are restorable. Windows where a lone tab is
-  // detached may have _closedTabs, but is left with just an empty tab.
-  let states = [
-    {
-      shouldBeAdded: true,
-      windowState: {
-        windows: [{
-          tabs: [{ entries: [{ url: "http://example.com", title: "example.com" }] }],
-          selected: 1,
-          _closedTabs: []
-        }]
-      }
-    },
-    {
-      shouldBeAdded: false,
-      windowState: {
-        windows: [{
-          tabs: [{ entries: [] }],
-          _closedTabs: []
-        }]
-      }
-    },
-    {
-      shouldBeAdded: false,
-      windowState: {
-        windows: [{
-          tabs: [{ entries: [] }],
-          _closedTabs: [{ state: { entries: [{ url: "http://example.com", index: 1 }] } }]
-        }]
-      }
-    },
-    {
-      shouldBeAdded: false,
-      windowState: {
-        windows: [{
-          tabs: [{ entries: [] }],
-          _closedTabs: [],
-          extData: { keyname: "pi != " + Math.random() }
-        }]
-      }
+add_task(function* test_bug_490040() {
+  for (let state of STATES) {
+    // Ensure we can store the window if needed.
+    let startingClosedWindowCount = ss.getClosedWindowCount();
+    yield pushPrefs(["browser.sessionstore.max_windows_undo",
+                     startingClosedWindowCount + 1]);
+
+    let curClosedWindowCount = ss.getClosedWindowCount();
+    let win = yield BrowserTestUtils.openNewBrowserWindow();
+
+    ss.setWindowState(win, JSON.stringify(state.windowState), true);
+    if (state.windowState.windows[0].tabs.length) {
+      yield BrowserTestUtils.browserLoaded(win.gBrowser.selectedBrowser);
     }
-  ];
+
+    yield BrowserTestUtils.closeWindow(win);
 
-  function runNextTest() {
-    if (states.length) {
-      let state = states.shift();
-      testWithState(state);
-    }
-    else {
-      gPrefService.clearUserPref("browser.sessionstore.max_windows_undo");
-      finish();
-    }
+    is(ss.getClosedWindowCount(),
+       curClosedWindowCount + (state.shouldBeAdded ? 1 : 0),
+       "That window should " + (state.shouldBeAdded ? "" : "not ") +
+       "be restorable");
   }
-  runNextTest();
-}
-
+});