[go: up one dir, main page]

Fix null dereference in shelf views

Tablet mode controller is destroyed slightly before shelf widget in
Shell destructor. Nullptr check is needed, because IsTabletModeEnabled()
can get called when shelf is being destroyed.

(cherry picked from commit 1b11ca42d8ec3be09f88c70bab2a7784f748ce6e)

Bug: 967149
Change-Id: I42b6abd6cf24902cc1647d03dd813b070d9aec05
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1637982
Reviewed-by: Xiyuan Xia <xiyuan@chromium.org>
Commit-Queue: Aga Wronska <agawronska@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#665126}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1652217
Reviewed-by: Aga Wronska <agawronska@chromium.org>
Cr-Commit-Position: refs/branch-heads/3809@{#300}
Cr-Branched-From: d82dec1a818f378c464ba307ddd9c92133eac355-refs/heads/master@{#665002}
diff --git a/ash/shelf/default_shelf_view.cc b/ash/shelf/default_shelf_view.cc
index 734197a..aa2554a8 100644
--- a/ash/shelf/default_shelf_view.cc
+++ b/ash/shelf/default_shelf_view.cc
@@ -21,9 +21,12 @@
 namespace {
 
 bool IsTabletModeEnabled() {
-  return Shell::Get()
-      ->tablet_mode_controller()
-      ->IsTabletModeWindowManagerEnabled();
+  // This check is needed, because tablet mode controller is destroyed before
+  // shelf widget. See https://crbug.com/967149 for more details.
+  return Shell::Get()->tablet_mode_controller() &&
+         Shell::Get()
+             ->tablet_mode_controller()
+             ->IsTabletModeWindowManagerEnabled();
 }
 
 }  // namespace
diff --git a/ash/shelf/kiosk_next_shelf_view.cc b/ash/shelf/kiosk_next_shelf_view.cc
index 2b3b2fd..c18b24b 100644
--- a/ash/shelf/kiosk_next_shelf_view.cc
+++ b/ash/shelf/kiosk_next_shelf_view.cc
@@ -90,9 +90,12 @@
 };
 
 bool IsTabletModeEnabled() {
-  return Shell::Get()
-      ->tablet_mode_controller()
-      ->IsTabletModeWindowManagerEnabled();
+  // This check is needed, because tablet mode controller is destroyed before
+  // shelf widget. See https://crbug.com/967149 for more details.
+  return Shell::Get()->tablet_mode_controller() &&
+         Shell::Get()
+             ->tablet_mode_controller()
+             ->IsTabletModeWindowManagerEnabled();
 }
 
 }  // namespace