Bug 1363902 - Simplify some browser chrome tests by utilizing TestUtils.topicObserved. r?mikedeboer draft
authorDão Gottwald <dao@mozilla.com>
Thu, 11 May 2017 00:24:37 +0200
changeset 575889 86865e18d5caaba278bda055e8d5341a8fc1be11
parent 575624 ce2218406119c36a551e3faea4e192186ee46cc5
child 628031 ca8c7a14006bd2ed9d0d8fe01303cebd4c3fcb9c
push id58183
push userdgottwald@mozilla.com
push dateWed, 10 May 2017 22:24:57 +0000
reviewersmikedeboer
bugs1363902
milestone55.0a1
Bug 1363902 - Simplify some browser chrome tests by utilizing TestUtils.topicObserved. r?mikedeboer MozReview-Commit-ID: Flc8iE19Gkt
browser/base/content/test/general/browser_bug1299667.js
browser/components/sessionstore/test/browser_not_collect_when_idle.js
--- a/browser/base/content/test/general/browser_bug1299667.js
+++ b/browser/base/content/test/general/browser_bug1299667.js
@@ -1,39 +1,19 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
-const { addObserver, removeObserver } = Cc["@mozilla.org/observer-service;1"].
-                                          getService(Ci.nsIObserverService);
-
-function receive(topic) {
-  return new Promise((resolve, reject) => {
-    let timeout = setTimeout(() => {
-      reject(new Error("Timeout"));
-    }, 90000);
-
-    const observer = {
-      observe: subject => {
-        removeObserver(observer, topic);
-        clearTimeout(timeout);
-        resolve(subject);
-      }
-    };
-    addObserver(observer, topic, false);
-  });
-}
-
 add_task(function* () {
   yield BrowserTestUtils.openNewForegroundTab(gBrowser, "http://example.com");
 
   yield ContentTask.spawn(gBrowser.selectedBrowser, {}, function* () {
     content.history.pushState({}, "2", "2.html");
   });
 
-  yield receive("sessionstore-state-write-complete");
+  yield TestUtils.topicObserved("sessionstore-state-write-complete");
 
   // Wait for the session data to be flushed before continuing the test
   yield new Promise(resolve => SessionStore.getSessionHistory(gBrowser.selectedTab, resolve));
 
   let backButton = document.getElementById("back-button");
   let contextMenu = document.getElementById("backForwardMenu");
 
   info("waiting for the history menu to open");
--- a/browser/components/sessionstore/test/browser_not_collect_when_idle.js
+++ b/browser/components/sessionstore/test/browser_not_collect_when_idle.js
@@ -63,30 +63,20 @@ add_task(async function testIntervalChan
   // Hook idle/active observer to mock idle service by changing pref `idleDelay`
   // to a whatever value, which will not be used.
   Services.prefs.setIntPref("browser.sessionstore.idleDelay", 5000000);
 
   // Wait a `sessionstore-state-write-complete` event from any previous
   // scheduled state write. This is needed since the `_lastSaveTime` in
   // runDelayed() should be set at least once, or the `_isIdle` flag will not
   // become effective.
-  // We wait at most 30 sec which is about as long as the timeout for the
-  // regular whole test case, and we don't expect the write event comes fast
-  // enough for an immediate `waitForSaveState()` from now.
-  await new Promise(function(resolve, reject) {
-    waitForTopic("sessionstore-state-write-complete", 30 * 1000, function(isSuccessful) {
-      if (!isSuccessful) {
-        reject(new Error("Timeout: didn't get any `sessionstore-state-write-complete` event"));
-      } else {
-        resolve();
-      }
-    });
-  });
+  info("Waiting for sessionstore-state-write-complete notification");
+  await TestUtils.topicObserved("sessionstore-state-write-complete");
 
-  info("Got the state write event, start to test idle mode...");
+  info("Got the sessionstore-state-write-complete notification, now testing idle mode");
 
   // Enter the "idle mode" (raise the `_isIdle` flag) by firing idle
   // observer of mock idle service.
   idleService._fireObservers("idle");
 
   // Cancel any possible state save, which is not related with this test to
   // avoid interference.
   SessionSaver.cancel();
@@ -103,20 +93,12 @@ add_task(async function testIntervalChan
   // Test again for better reliability. Same, we expect following promise hits
   // the timeout.
   await Assert.rejects(promiseSaveState(), null, "[Test 1B] Again: No state write during idle.");
 
   // Back to the active mode.
   info("Start to test active mode...");
   idleService._fireObservers("active");
 
-  await new Promise(function(resolve, reject) {
-    waitForTopic("sessionstore-state-write-complete", PREF_SS_INTERVAL + 10000, function(isSuccessful) {
-      if (!isSuccessful) {
-        reject(new Error("Timeout: didn't get any `sessionstore-state-write-complete` event"));
-      } else {
-        resolve();
-      }
-    });
-  });
-  info("[Test 2] Has state write during active.");
+  info("[Test 2] Waiting for sessionstore-state-write-complete during active");
+  await TestUtils.topicObserved("sessionstore-state-write-complete");
 });