Bug 1355426 - Update browser_hide_removing.js to wait for TabClose instead of TabSelect. r?jaws draft
authorMike Conley <mconley@mozilla.com>
Mon, 31 Jul 2017 18:26:11 -0400
changeset 619844 64e1dbeeea61ce8fcc194113deb4566f0b91f6a3
parent 619843 6acc9538cbcbec25c4b98351dc9984aab9f43b8d
child 619845 69b5f327ac66df787152b387425b526036884ca9
push id71845
push usermconley@mozilla.com
push dateWed, 02 Aug 2017 18:13:02 +0000
reviewersjaws
bugs1355426
milestone56.0a1
Bug 1355426 - Update browser_hide_removing.js to wait for TabClose instead of TabSelect. r?jaws browser_hide_removing.js assumes that when a tab is closed, the next tab to be displayed will fire its TabSelect event _after_ the closed tab has been marked as "closed". Bug 1355426 makes it so that the tab selection occurs earlier, so this test has been updated to use the TabClose event instead. MozReview-Commit-ID: 17rdlNaotq
browser/base/content/test/general/browser_hide_removing.js
--- a/browser/base/content/test/general/browser_hide_removing.js
+++ b/browser/base/content/test/general/browser_hide_removing.js
@@ -1,37 +1,29 @@
 /* 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/. */
 
 // Bug 587922: tabs don't get removed if they're hidden
 
-function test() {
-  waitForExplicitFinish();
-
+add_task(async function() {
   // Add a tab that will get removed and hidden
-  let testTab = BrowserTestUtils.addTab(gBrowser, "about:blank", {skipAnimation: true});
+  let testTab = BrowserTestUtils.addTab(gBrowser, "about:blank", { skipAnimation: true });
   is(gBrowser.visibleTabs.length, 2, "just added a tab, so 2 tabs");
-  gBrowser.selectedTab = testTab;
+  await BrowserTestUtils.switchTab(gBrowser, testTab);
 
   let numVisBeforeHide, numVisAfterHide;
-  gBrowser.tabContainer.addEventListener("TabSelect", function() {
-    // While the next tab is being selected, hide the removing tab
-    numVisBeforeHide = gBrowser.visibleTabs.length;
-    gBrowser.hideTab(testTab);
-    numVisAfterHide = gBrowser.visibleTabs.length;
-  }, {once: true});
-  gBrowser.removeTab(testTab, {animate: true});
+
+  // We have to animate the tab removal in order to get an async
+  // tab close.
+  let tabClosed = BrowserTestUtils.waitForEvent(gBrowser.tabContainer, "TabClose");
+  let tabRemoved = BrowserTestUtils.removeTab(testTab, { animate: true });
+  await tabClosed;
 
-  // Make sure the tab gets removed at the end of the animation by polling
-  (function checkRemoved() {
-    return setTimeout(function() {
-      if (gBrowser.tabs.length != 1) {
-        checkRemoved();
-        return;
-      }
+  numVisBeforeHide = gBrowser.visibleTabs.length;
+  gBrowser.hideTab(testTab);
+  numVisAfterHide = gBrowser.visibleTabs.length;
 
-      is(numVisBeforeHide, 1, "animated remove has in 1 tab left");
-      is(numVisAfterHide, 1, "hiding a removing tab is also has 1 tab");
-      finish();
-    }, 50);
-  })();
-}
+  is(numVisBeforeHide, 1, "animated remove has in 1 tab left");
+  is(numVisAfterHide, 1, "hiding a removing tab also has 1 tab");
+
+  await tabRemoved;
+});