Bug 1458375 - Make browser mochitests wait for browser-idle-startup-tasks-finished before running tests. r?kmag
MozReview-Commit-ID: Jfl4p4LIPC4
--- a/testing/mochitest/browser-test.js
+++ b/testing/mochitest/browser-test.js
@@ -506,20 +506,35 @@ Tester.prototype = {
this._globalProperties = Object.keys(window);
this._globalPropertyWhitelist = [
"navigator", "constructor", "top",
"Application",
"__SS_tabsToRestore", "__SSi",
"webConsoleCommandController",
];
- if (this.tests.length)
- this.waitForGraphicsTestWindowToBeGone(this.nextTest.bind(this));
- else
+ if (this.tests.length) {
+ this.waitForWindowsReady().then(() => {
+ this.nextTest();
+ });
+ } else {
this.finish();
+ }
+ },
+
+ async waitForWindowsReady() {
+ await new Promise(resolve => this.waitForGraphicsTestWindowToBeGone(resolve));
+ await this.promiseMainWindowReady();
+ },
+
+ async promiseMainWindowReady() {
+ if (!gBrowserInit.idleTasksFinished) {
+ await this.TestUtils.topicObserved("browser-idle-startup-tasks-finished",
+ subject => subject === window);
+ }
},
waitForGraphicsTestWindowToBeGone(aCallback) {
let windowsEnum = Services.wm.getEnumerator(null);
while (windowsEnum.hasMoreElements()) {
let win = windowsEnum.getNext();
if (win != window && !win.closed &&
win.document.documentURI == "chrome://gfxsanity/content/sanityparent.html") {