mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
browser(firefox): fix race between idleTasksFinishedPromise and window closure (#6308)
This commit is contained in:
parent
d31107f342
commit
10c76ff56f
@ -1,2 +1,2 @@
|
|||||||
1246
|
1247
|
||||||
Changed: lushnikov@chromium.org Tue 20 Apr 2021 10:26:28 AM PDT
|
Changed: dgozman@gmail.com Fri Apr 23 15:46:40 PDT 2021
|
||||||
|
|||||||
@ -138,7 +138,12 @@ class BrowserHandler {
|
|||||||
"navigator:browser"
|
"navigator:browser"
|
||||||
);
|
);
|
||||||
if (browserWindow && browserWindow.gBrowserInit) {
|
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.
|
// Try to fully initialize browser before closing.
|
||||||
// See comment in `Browser.enable`.
|
// 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) {
|
function nullToUndefined(value) {
|
||||||
return value === null ? undefined : value;
|
return value === null ? undefined : value;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user