diff --git a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc index 6c3e6a341812d..fe83d31d20874 100644 --- a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc +++ b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc @@ -465,7 +465,15 @@ void WaylandToplevelWindow::HandleToplevelConfigure( int32_t width_dip, int32_t height_dip, const WindowStates& window_states) { + // HandleToplevelConfigureWithOrigin() calls into the delegate + // (OnActivationChanged et al.), which the views layer documents may + // synchronously close the widget and destroy this platform window. See + // DesktopWindowTreeHostPlatform::OnActivationChanged(). + auto alive = weak_ptr_factory_.GetWeakPtr(); HandleToplevelConfigureWithOrigin(0, 0, width_dip, height_dip, window_states); + if (!alive) { + return; + } UpdateSessionStateIfNeeded(); } @@ -566,7 +574,11 @@ void WaylandToplevelWindow::HandleToplevelConfigureWithOrigin( SetRestoredBoundsInDIP(GetBoundsInDIP()); } + auto alive = weak_ptr_factory_.GetWeakPtr(); UpdateActivationState(); + if (!alive) { + return; + } if (prev_suspended != is_suspended_) { frame_manager()->OnWindowSuspensionChanged(); }