Browse Source

fix: safer check for WCO button updates (#35031)

Co-authored-by: Shelley Vohr <[email protected]>
trop[bot] 2 years ago
parent
commit
e1e00e3b8a
2 changed files with 38 additions and 3 deletions
  1. 3 3
      shell/browser/native_window_views.cc
  2. 35 0
      spec-main/api-browser-window-spec.ts

+ 3 - 3
shell/browser/native_window_views.cc

@@ -875,7 +875,7 @@ bool NativeWindowViews::IsMovable() {
 void NativeWindowViews::SetMinimizable(bool minimizable) {
 #if defined(OS_WIN)
   FlipWindowStyle(GetAcceleratedWidget(), minimizable, WS_MINIMIZEBOX);
-  if (titlebar_overlay_enabled()) {
+  if (IsWindowControlsOverlayEnabled()) {
     auto* frame_view =
         static_cast<WinFrameView*>(widget()->non_client_view()->frame_view());
     frame_view->caption_button_container()->UpdateButtons();
@@ -895,7 +895,7 @@ bool NativeWindowViews::IsMinimizable() {
 void NativeWindowViews::SetMaximizable(bool maximizable) {
 #if defined(OS_WIN)
   FlipWindowStyle(GetAcceleratedWidget(), maximizable, WS_MAXIMIZEBOX);
-  if (titlebar_overlay_enabled()) {
+  if (IsWindowControlsOverlayEnabled()) {
     auto* frame_view =
         static_cast<WinFrameView*>(widget()->non_client_view()->frame_view());
     frame_view->caption_button_container()->UpdateButtons();
@@ -935,7 +935,7 @@ void NativeWindowViews::SetClosable(bool closable) {
   } else {
     EnableMenuItem(menu, SC_CLOSE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
   }
-  if (titlebar_overlay_enabled()) {
+  if (IsWindowControlsOverlayEnabled()) {
     auto* frame_view =
         static_cast<WinFrameView*>(widget()->non_client_view()->frame_view());
     frame_view->caption_button_container()->UpdateButtons();

+ 35 - 0
spec-main/api-browser-window-spec.ts

@@ -2162,6 +2162,41 @@ describe('BrowserWindow module', () => {
     ifit(process.platform === 'darwin')('sets Window Control Overlay with hidden inset title bar', async () => {
       await testWindowsOverlay('hiddenInset');
     });
+
+    ifdescribe(process.platform === 'win32')('when an invalid titleBarStyle is initially set', () => {
+      let w: BrowserWindow;
+
+      beforeEach(() => {
+        w = new BrowserWindow({
+          show: false,
+          webPreferences: {
+            nodeIntegration: true,
+            contextIsolation: false
+          },
+          titleBarOverlay: {
+            color: '#0000f0',
+            symbolColor: '#ffffff'
+          },
+          titleBarStyle: 'hiddenInset'
+        });
+      });
+
+      afterEach(async () => {
+        await closeAllWindows();
+      });
+
+      it('does not crash changing minimizability ', () => {
+        expect(() => {
+          w.setMinimizable(false);
+        }).to.not.throw();
+      });
+
+      it('does not crash changing maximizability', () => {
+        expect(() => {
+          w.setMaximizable(false);
+        }).to.not.throw();
+      });
+    });
   });
 
   ifdescribe(process.platform === 'win32' || (process.platform === 'darwin' && semver.gte(os.release(), '14.0.0')))('"titleBarOverlay" option', () => {