From a0500a5faa9fc75f34fe4d899b7b0e57b39e9ac8 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 17:33:49 -0700 Subject: [PATCH] fix: fix cast in ElectronDesktopWindowTreeHostLinux (#42184) 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 Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Fedor Indutny --- .../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(); }