diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index a7ec8a2bfef3..abcb79f87693 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -346,8 +346,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 d5d21b962975..57a50521b384 100644 --- a/spec/api-browser-window-spec.ts +++ b/spec/api-browser-window-spec.ts @@ -116,6 +116,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 });