diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index 2c0a3b3f8c5e..45eef7e744f8 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -352,8 +352,11 @@ void NativeWindowMac::Close() { // [window_ performClose:nil], the window won't close properly // even after the user has ended the sheet. // Ensure it's closed before calling [window_ performClose:nil]. - if ([window_ attachedSheet]) + // If multiple sheets are open, they must all be closed. + while ([window_ attachedSheet]) { [window_ endSheet:[window_ attachedSheet]]; + } + DCHECK_EQ([[window_ sheets] count], 0UL); // window_ could be nil after performClose. bool should_notify = is_modal() && parent() && IsVisible(); diff --git a/spec/api-browser-window-spec.ts b/spec/api-browser-window-spec.ts index debae0bf4be8..6d3ba73d8fa4 100644 --- a/spec/api-browser-window-spec.ts +++ b/spec/api-browser-window-spec.ts @@ -117,6 +117,14 @@ describe('BrowserWindow module', () => { await closed; }); + it('should work if called when multiple messageBoxes are showing', async () => { + const closed = once(w, 'closed'); + dialog.showMessageBox(w, { message: 'Hello Error' }); + dialog.showMessageBox(w, { message: 'Hello Error' }); + w.close(); + await closed; + }); + it('closes window without rounded corners', async () => { await closeWindow(w); w = new BrowserWindow({ show: false, frame: false, roundedCorners: false });