Chromium Code Reviews| Index: ash/common/wm_shell.cc |
| diff --git a/ash/common/wm_shell.cc b/ash/common/wm_shell.cc |
| index f0ed84ed71194a1548ca50c8f78008d0f1fda893..034f4820266aeb75b20c41330abdbabbface37ae 100644 |
| --- a/ash/common/wm_shell.cc |
| +++ b/ash/common/wm_shell.cc |
| @@ -11,6 +11,7 @@ |
| #include "ash/common/focus_cycler.h" |
| #include "ash/common/keyboard/keyboard_ui.h" |
| #include "ash/common/shelf/app_list_shelf_item_delegate.h" |
| +#include "ash/common/shelf/shelf_delegate.h" |
| #include "ash/common/shelf/shelf_model.h" |
| #include "ash/common/shell_delegate.h" |
| #include "ash/common/shell_window_ids.h" |
| @@ -67,6 +68,8 @@ void WmShell::Shutdown() { |
| // ShelfItemDelegate subclasses it owns have complex cleanup to run (e.g. ARC |
| // shelf items in Chrome) so explicitly shutdown early. |
| shelf_model_->DestroyItemDelegates(); |
| + // Must be destroyed before FocusClient. |
| + shelf_delegate_.reset(); |
| } |
| void WmShell::OnMaximizeModeStarted() { |
| @@ -108,6 +111,11 @@ void WmShell::RemoveLockStateObserver(LockStateObserver* observer) { |
| lock_state_observers_.RemoveObserver(observer); |
| } |
| +void WmShell::SetShelfDelegateForTesting( |
| + std::unique_ptr<ShelfDelegate> test_delegate) { |
| + shelf_delegate_ = std::move(test_delegate); |
| +} |
| + |
| WmShell::WmShell(std::unique_ptr<ShellDelegate> shell_delegate) |
| : delegate_(std::move(shell_delegate)), |
| focus_cycler_(new FocusCycler), |
| @@ -195,6 +203,13 @@ void WmShell::DeleteSystemTrayDelegate() { |
| system_tray_delegate_.reset(); |
| } |
| +void WmShell::CreateShelfDelegate() { |
|
msw
2016/07/23 00:02:36
Could we just do this once in the ctor?
James Cook
2016/07/23 00:38:03
No. It must be done after login. Moved the DCHECKS
|
| + // May be called multiple times as shelves are created and destroyed. |
| + if (shelf_delegate_) |
| + return; |
| + shelf_delegate_.reset(delegate_->CreateShelfDelegate(shelf_model_.get())); |
| +} |
| + |
| void WmShell::DeleteWindowCycleController() { |
| window_cycle_controller_.reset(); |
| } |