Commit 37039682 authored by Avery Musbach's avatar Avery Musbach Committed by Commit Bot

accessibility: Stop observing the tablet mode controller during shutdown

The present CL addresses the problem that AccessibilityControllerImpl
never actually removes itself as an observer of TabletModeController. In
the following part of the destructor, the "if" condition is always false
because the tablet mode controller is destroyed first:

  if (Shell::Get()->tablet_mode_controller())
    Shell::Get()->tablet_mode_controller()->RemoveObserver(this);

Change-Id: Ib35b19751862921691c767520e6803007c763a8e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1816906Reviewed-by: default avatarJames Cook <jamescook@chromium.org>
Commit-Queue: Avery Musbach <amusbach@chromium.org>
Cr-Commit-Position: refs/heads/master@{#698624}
parent 56079c7a
...@@ -262,11 +262,7 @@ AccessibilityControllerImpl::AccessibilityControllerImpl() ...@@ -262,11 +262,7 @@ AccessibilityControllerImpl::AccessibilityControllerImpl()
Shell::Get()->tablet_mode_controller()->AddObserver(this); Shell::Get()->tablet_mode_controller()->AddObserver(this);
} }
AccessibilityControllerImpl::~AccessibilityControllerImpl() { AccessibilityControllerImpl::~AccessibilityControllerImpl() = default;
if (Shell::Get()->tablet_mode_controller())
Shell::Get()->tablet_mode_controller()->RemoveObserver(this);
Shell::Get()->session_controller()->RemoveObserver(this);
}
// static // static
void AccessibilityControllerImpl::RegisterProfilePrefs( void AccessibilityControllerImpl::RegisterProfilePrefs(
...@@ -359,6 +355,11 @@ void AccessibilityControllerImpl::RegisterProfilePrefs( ...@@ -359,6 +355,11 @@ void AccessibilityControllerImpl::RegisterProfilePrefs(
// TODO(jamescook): Move ownership to ash. // TODO(jamescook): Move ownership to ash.
} }
void AccessibilityControllerImpl::Shutdown() {
Shell::Get()->tablet_mode_controller()->RemoveObserver(this);
Shell::Get()->session_controller()->RemoveObserver(this);
}
void AccessibilityControllerImpl::SetHighContrastAcceleratorDialogAccepted() { void AccessibilityControllerImpl::SetHighContrastAcceleratorDialogAccepted() {
if (!active_user_prefs_) if (!active_user_prefs_)
return; return;
......
...@@ -56,6 +56,8 @@ class ASH_EXPORT AccessibilityControllerImpl : public AccessibilityController, ...@@ -56,6 +56,8 @@ class ASH_EXPORT AccessibilityControllerImpl : public AccessibilityController,
// See Shell::RegisterProfilePrefs(). // See Shell::RegisterProfilePrefs().
static void RegisterProfilePrefs(PrefRegistrySimple* registry, bool for_test); static void RegisterProfilePrefs(PrefRegistrySimple* registry, bool for_test);
void Shutdown();
void AddObserver(AccessibilityObserver* observer); void AddObserver(AccessibilityObserver* observer);
void RemoveObserver(AccessibilityObserver* observer); void RemoveObserver(AccessibilityObserver* observer);
......
...@@ -665,6 +665,10 @@ Shell::~Shell() { ...@@ -665,6 +665,10 @@ Shell::~Shell() {
// dependency on the latter. // dependency on the latter.
assistant_controller_.reset(); assistant_controller_.reset();
// Because this function will call |TabletModeController::RemoveObserver|, do
// it before destroying |tablet_mode_controller_|.
accessibility_controller_->Shutdown();
// Destroy tablet mode controller early on since it has some observers which // Destroy tablet mode controller early on since it has some observers which
// need to be removed. // need to be removed.
tablet_mode_controller_->Shutdown(); tablet_mode_controller_->Shutdown();
......
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