Bug 1363902 - Simplify some browser chrome tests by utilizing TestUtils.topicObserved. r?mikedeboer
MozReview-Commit-ID: Flc8iE19Gkt
--- 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");
});