From f2af35182c9a7b13a7047992cb330652c15cec69 Mon Sep 17 00:00:00 2001 From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Date: Tue, 14 May 2024 14:26:39 -0700 Subject: [PATCH] fix: fix cast in ElectronDesktopWindowTreeHostLinux (#42179) Fix cast in ElectronDesktopWindowTreeHostLinux The frame view of the widget is an `ClientFrameViewLinux` instance only when both `frame` and `client_frame` booleans are set to `true`. Otherwise it is an instance of a different class and thus casting to `ClientFrameViewLinux` is incorrect and leads to crashes. Fix: #41839 --- .../ui/electron_desktop_window_tree_host_linux.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/shell/browser/ui/electron_desktop_window_tree_host_linux.cc b/shell/browser/ui/electron_desktop_window_tree_host_linux.cc index 386275e80c41..30153881739e 100644 --- a/shell/browser/ui/electron_desktop_window_tree_host_linux.cc +++ b/shell/browser/ui/electron_desktop_window_tree_host_linux.cc @@ -87,9 +87,15 @@ void ElectronDesktopWindowTreeHostLinux::OnWindowStateChanged( void ElectronDesktopWindowTreeHostLinux::OnWindowTiledStateChanged( ui::WindowTiledEdges new_tiled_edges) { - static_cast( - native_window_view_->widget()->non_client_view()->frame_view()) - ->set_tiled_edges(new_tiled_edges); + // CreateNonClientFrameView creates `ClientFrameViewLinux` only when both + // frame and client_frame booleans are set, otherwise it is a different type + // of view. + if (native_window_view_->has_frame() && + native_window_view_->has_client_frame()) { + static_cast( + native_window_view_->widget()->non_client_view()->frame_view()) + ->set_tiled_edges(new_tiled_edges); + } UpdateFrameHints(); }