Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(653)

Side by Side Diff: ash/common/wm_shell.cc

Issue 2177663002: mash: Move ownership of ShelfDelegate to WmShell (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix WallpaperManagerBrowserTest Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/common/wm_shell.h" 5 #include "ash/common/wm_shell.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "ash/common/accelerators/accelerator_controller.h" 9 #include "ash/common/accelerators/accelerator_controller.h"
10 #include "ash/common/accessibility_delegate.h" 10 #include "ash/common/accessibility_delegate.h"
11 #include "ash/common/focus_cycler.h" 11 #include "ash/common/focus_cycler.h"
12 #include "ash/common/keyboard/keyboard_ui.h" 12 #include "ash/common/keyboard/keyboard_ui.h"
13 #include "ash/common/shelf/app_list_shelf_item_delegate.h" 13 #include "ash/common/shelf/app_list_shelf_item_delegate.h"
14 #include "ash/common/shelf/shelf_delegate.h"
14 #include "ash/common/shelf/shelf_model.h" 15 #include "ash/common/shelf/shelf_model.h"
15 #include "ash/common/shell_delegate.h" 16 #include "ash/common/shell_delegate.h"
16 #include "ash/common/shell_window_ids.h" 17 #include "ash/common/shell_window_ids.h"
17 #include "ash/common/system/brightness_control_delegate.h" 18 #include "ash/common/system/brightness_control_delegate.h"
18 #include "ash/common/system/keyboard_brightness_control_delegate.h" 19 #include "ash/common/system/keyboard_brightness_control_delegate.h"
19 #include "ash/common/system/toast/toast_manager.h" 20 #include "ash/common/system/toast/toast_manager.h"
20 #include "ash/common/system/tray/system_tray_delegate.h" 21 #include "ash/common/system/tray/system_tray_delegate.h"
21 #include "ash/common/system/tray/system_tray_notifier.h" 22 #include "ash/common/system/tray/system_tray_notifier.h"
22 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" 23 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h"
23 #include "ash/common/wm/mru_window_tracker.h" 24 #include "ash/common/wm/mru_window_tracker.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 // Create the app list item in the shelf data model. 61 // Create the app list item in the shelf data model.
61 AppListShelfItemDelegate::CreateAppListItemAndDelegate(shelf_model_.get()); 62 AppListShelfItemDelegate::CreateAppListItemAndDelegate(shelf_model_.get());
62 } 63 }
63 64
64 void WmShell::Shutdown() { 65 void WmShell::Shutdown() {
65 // Accesses WmShell in its destructor. 66 // Accesses WmShell in its destructor.
66 accessibility_delegate_.reset(); 67 accessibility_delegate_.reset();
67 // ShelfItemDelegate subclasses it owns have complex cleanup to run (e.g. ARC 68 // ShelfItemDelegate subclasses it owns have complex cleanup to run (e.g. ARC
68 // shelf items in Chrome) so explicitly shutdown early. 69 // shelf items in Chrome) so explicitly shutdown early.
69 shelf_model_->DestroyItemDelegates(); 70 shelf_model_->DestroyItemDelegates();
71 // Must be destroyed before FocusClient.
72 shelf_delegate_.reset();
70 } 73 }
71 74
72 void WmShell::OnMaximizeModeStarted() { 75 void WmShell::OnMaximizeModeStarted() {
73 FOR_EACH_OBSERVER(ShellObserver, shell_observers_, OnMaximizeModeStarted()); 76 FOR_EACH_OBSERVER(ShellObserver, shell_observers_, OnMaximizeModeStarted());
74 } 77 }
75 78
76 void WmShell::OnMaximizeModeEnded() { 79 void WmShell::OnMaximizeModeEnded() {
77 FOR_EACH_OBSERVER(ShellObserver, shell_observers_, OnMaximizeModeEnded()); 80 FOR_EACH_OBSERVER(ShellObserver, shell_observers_, OnMaximizeModeEnded());
78 } 81 }
79 82
(...skipping 21 matching lines...) Expand all
101 } 104 }
102 105
103 void WmShell::AddLockStateObserver(LockStateObserver* observer) { 106 void WmShell::AddLockStateObserver(LockStateObserver* observer) {
104 lock_state_observers_.AddObserver(observer); 107 lock_state_observers_.AddObserver(observer);
105 } 108 }
106 109
107 void WmShell::RemoveLockStateObserver(LockStateObserver* observer) { 110 void WmShell::RemoveLockStateObserver(LockStateObserver* observer) {
108 lock_state_observers_.RemoveObserver(observer); 111 lock_state_observers_.RemoveObserver(observer);
109 } 112 }
110 113
114 void WmShell::SetShelfDelegateForTesting(
115 std::unique_ptr<ShelfDelegate> test_delegate) {
116 shelf_delegate_ = std::move(test_delegate);
117 }
118
111 WmShell::WmShell(std::unique_ptr<ShellDelegate> shell_delegate) 119 WmShell::WmShell(std::unique_ptr<ShellDelegate> shell_delegate)
112 : delegate_(std::move(shell_delegate)), 120 : delegate_(std::move(shell_delegate)),
113 focus_cycler_(new FocusCycler), 121 focus_cycler_(new FocusCycler),
114 shelf_model_(new ShelfModel), // Must create before ShelfDelegate. 122 shelf_model_(new ShelfModel), // Must create before ShelfDelegate.
115 system_tray_notifier_(new SystemTrayNotifier), 123 system_tray_notifier_(new SystemTrayNotifier),
116 window_cycle_controller_(new WindowCycleController), 124 window_cycle_controller_(new WindowCycleController),
117 window_selector_controller_(new WindowSelectorController) { 125 window_selector_controller_(new WindowSelectorController) {
118 #if defined(OS_CHROMEOS) 126 #if defined(OS_CHROMEOS)
119 brightness_control_delegate_.reset(new system::BrightnessControllerChromeos); 127 brightness_control_delegate_.reset(new system::BrightnessControllerChromeos);
120 keyboard_brightness_control_delegate_.reset(new KeyboardBrightnessController); 128 keyboard_brightness_control_delegate_.reset(new KeyboardBrightnessController);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 } 196 }
189 197
190 void WmShell::DeleteSystemTrayDelegate() { 198 void WmShell::DeleteSystemTrayDelegate() {
191 DCHECK(system_tray_delegate_); 199 DCHECK(system_tray_delegate_);
192 #if defined(OS_CHROMEOS) 200 #if defined(OS_CHROMEOS)
193 logout_confirmation_controller_.reset(); 201 logout_confirmation_controller_.reset();
194 #endif 202 #endif
195 system_tray_delegate_.reset(); 203 system_tray_delegate_.reset();
196 } 204 }
197 205
206 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
207 // May be called multiple times as shelves are created and destroyed.
208 if (shelf_delegate_)
209 return;
210 shelf_delegate_.reset(delegate_->CreateShelfDelegate(shelf_model_.get()));
211 }
212
198 void WmShell::DeleteWindowCycleController() { 213 void WmShell::DeleteWindowCycleController() {
199 window_cycle_controller_.reset(); 214 window_cycle_controller_.reset();
200 } 215 }
201 216
202 void WmShell::DeleteWindowSelectorController() { 217 void WmShell::DeleteWindowSelectorController() {
203 window_selector_controller_.reset(); 218 window_selector_controller_.reset();
204 } 219 }
205 220
206 void WmShell::CreateMaximizeModeController() { 221 void WmShell::CreateMaximizeModeController() {
207 maximize_mode_controller_.reset(new MaximizeModeController); 222 maximize_mode_controller_.reset(new MaximizeModeController);
(...skipping 14 matching lines...) Expand all
222 void WmShell::DeleteToastManager() { 237 void WmShell::DeleteToastManager() {
223 toast_manager_.reset(); 238 toast_manager_.reset();
224 } 239 }
225 240
226 void WmShell::SetAcceleratorController( 241 void WmShell::SetAcceleratorController(
227 std::unique_ptr<AcceleratorController> accelerator_controller) { 242 std::unique_ptr<AcceleratorController> accelerator_controller) {
228 accelerator_controller_ = std::move(accelerator_controller); 243 accelerator_controller_ = std::move(accelerator_controller);
229 } 244 }
230 245
231 } // namespace ash 246 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698