diff --git a/shell/browser/native_window_mac.h b/shell/browser/native_window_mac.h index 7a4682a956e30..5036e571c542d 100644 --- a/shell/browser/native_window_mac.h +++ b/shell/browser/native_window_mac.h @@ -158,7 +158,7 @@ class NativeWindowMac : public NativeWindow { AtomTouchBar* touch_bar() const { return touch_bar_.get(); } bool zoom_to_page_width() const { return zoom_to_page_width_; } bool fullscreen_window_title() const { return fullscreen_window_title_; } - bool simple_fullscreen() const { return always_simple_fullscreen_; } + bool always_simple_fullscreen() const { return always_simple_fullscreen_; } protected: // views::WidgetDelegate: diff --git a/shell/browser/ui/cocoa/atom_ns_window.mm b/shell/browser/ui/cocoa/atom_ns_window.mm index 0b9a367bd6823..a455346ffc9be 100644 --- a/shell/browser/ui/cocoa/atom_ns_window.mm +++ b/shell/browser/ui/cocoa/atom_ns_window.mm @@ -178,8 +178,14 @@ - (void)performClose:(id)sender { } - (void)toggleFullScreenMode:(id)sender { - if (shell_->simple_fullscreen()) - shell_->SetSimpleFullScreen(!shell_->IsSimpleFullScreen()); + bool is_simple_fs = shell_->IsSimpleFullScreen(); + bool always_simple_fs = shell_->always_simple_fullscreen(); + + // If we're in simple fullscreen mode and trying to exit it + // we need to ensure we exit it properly to prevent a crash + // with NSWindowStyleMaskTitled mode + if (is_simple_fs || always_simple_fs) + shell_->SetSimpleFullScreen(!is_simple_fs); else [super toggleFullScreen:sender]; } diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts index d0aa5e278a511..50ef234632c65 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -3343,6 +3343,16 @@ describe('BrowserWindow module', () => { w.setFullScreen(true) }) + it('does not crash when exiting simpleFullScreen', (done) => { + const w = new BrowserWindow() + w.setSimpleFullScreen(true) + + setTimeout(() => { + w.setFullScreen(!w.isFullScreen()) + done() + }, 1000) + }) + it('should not be changed by setKiosk method', (done) => { const w = new BrowserWindow() w.once('enter-full-screen', async () => {