Commit 0dbb0735 authored by Xiaoqian Dai's avatar Xiaoqian Dai Committed by Commit Bot

Cros splitscreen: Fix crash during shutdown when splitscreen is active.

The reason for this crash is when a window is destroying, it's still
regarded as an "activatable" window in MRU window list and is then
put in overview by SplitViewController::OnWindowDestroying(), which
will then cause crash when trying to adjust its bounds in overview.
(Currently the crash is only observed on Chrome built on linux
workstation, not reproducable on real devices)

To fix this, we observe OnWindowDestroyed() instead of
OnWindowDestroying() in SplitViewController.

Bug: 835925
Change-Id: Ieda91eb3f8ab12e2120365b0804a30aeef8d8f2f
Reviewed-on: https://chromium-review.googlesource.com/1091534
Commit-Queue: Xiaoqian Dai <xdai@chromium.org>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#565662}
parent a9d5574d
......@@ -676,7 +676,7 @@ void SplitViewController::AddObserver(mojom::SplitViewObserverPtr observer) {
observer_ptr->OnSplitViewStateChanged(ToMojomSplitViewState(state_));
}
void SplitViewController::OnWindowDestroying(aura::Window* window) {
void SplitViewController::OnWindowDestroyed(aura::Window* window) {
DCHECK(IsSplitViewModeActive());
DCHECK(window == left_window_ || window == right_window_);
auto iter = overview_window_item_bounds_map_.find(window);
......@@ -879,14 +879,15 @@ void SplitViewController::StartObserving(aura::Window* window) {
void SplitViewController::StopObserving(SnapPosition snap_position) {
aura::Window* window = snap_position == LEFT ? left_window_ : right_window_;
if (window == left_window_)
left_window_ = nullptr;
else
right_window_ = nullptr;
if (window && window->HasObserver(this)) {
window->RemoveObserver(this);
wm::GetWindowState(window)->RemoveObserver(this);
split_view_divider_->RemoveObservedWindow(window);
if (window == left_window_)
left_window_ = nullptr;
else
right_window_ = nullptr;
Shell::Get()->shadow_controller()->UpdateShadowForWindow(window);
}
}
......
......@@ -152,7 +152,7 @@ class ASH_EXPORT SplitViewController : public mojom::SplitViewController,
void AddObserver(mojom::SplitViewObserverPtr observer) override;
// aura::WindowObserver:
void OnWindowDestroying(aura::Window* window) override;
void OnWindowDestroyed(aura::Window* window) override;
void OnWindowPropertyChanged(aura::Window* window,
const void* key,
intptr_t old) override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment