Skip to content

Commit

Permalink
browser(firefox): fix race between idleTasksFinishedPromise and windo…
Browse files Browse the repository at this point in the history
…w closure (#6308)
  • Loading branch information
dgozman committed Apr 23, 2021
1 parent d31107f commit 10c76ff
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 3 deletions.
4 changes: 2 additions & 2 deletions 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
23 changes: 22 additions & 1 deletion browser_patches/firefox/juggler/protocol/BrowserHandler.js
Expand Up @@ -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`.
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 10c76ff

Please sign in to comment.