diff --git a/browser_patches/firefox/BUILD_NUMBER b/browser_patches/firefox/BUILD_NUMBER index 01d8949b80..358b8dbc3a 100644 --- a/browser_patches/firefox/BUILD_NUMBER +++ b/browser_patches/firefox/BUILD_NUMBER @@ -1,2 +1,2 @@ -1246 -Changed: lushnikov@chromium.org Tue 20 Apr 2021 10:26:28 AM PDT +1247 +Changed: dgozman@gmail.com Fri Apr 23 15:46:40 PDT 2021 diff --git a/browser_patches/firefox/juggler/protocol/BrowserHandler.js b/browser_patches/firefox/juggler/protocol/BrowserHandler.js index a084b3389c..92dea19214 100644 --- a/browser_patches/firefox/juggler/protocol/BrowserHandler.js +++ b/browser_patches/firefox/juggler/protocol/BrowserHandler.js @@ -138,7 +138,12 @@ class BrowserHandler { "navigator:browser" ); if (browserWindow && browserWindow.gBrowserInit) { - await browserWindow.gBrowserInit.idleTasksFinishedPromise; + // idleTasksFinishedPromise does not resolve when the window + // is closed early enough, so we race against window closure. + await Promise.race([ + browserWindow.gBrowserInit.idleTasksFinishedPromise, + waitForWindowClosed(browserWindow), + ]); } // Try to fully initialize browser before closing. // See comment in `Browser.enable`. @@ -281,6 +286,22 @@ async function waitForAddonManager() { }); } +async function waitForWindowClosed(browserWindow) { + if (browserWindow.closed) + return; + await new Promise((resolve => { + const listener = { + onCloseWindow: window => { + if (window === browserWindow) { + Services.wm.removeListener(listener); + resolve(); + } + }, + }; + Services.wm.addListener(listener); + })); +} + function nullToUndefined(value) { return value === null ? undefined : value; }