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

Side by Side Diff: ash/shell.cc

Issue 2791463002: mash: Remove ShelfDelegate; move functions to ShelfModel. (Closed)
Patch Set: Sync and rebase; cleanup. Created 3 years, 8 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/shell.h" 5 #include "ash/shell.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #include "ash/magnifier/partial_magnification_controller.h" 48 #include "ash/magnifier/partial_magnification_controller.h"
49 #include "ash/media_controller.h" 49 #include "ash/media_controller.h"
50 #include "ash/new_window_controller.h" 50 #include "ash/new_window_controller.h"
51 #include "ash/palette_delegate.h" 51 #include "ash/palette_delegate.h"
52 #include "ash/public/cpp/config.h" 52 #include "ash/public/cpp/config.h"
53 #include "ash/public/cpp/shell_window_ids.h" 53 #include "ash/public/cpp/shell_window_ids.h"
54 #include "ash/root_window_controller.h" 54 #include "ash/root_window_controller.h"
55 #include "ash/session/session_controller.h" 55 #include "ash/session/session_controller.h"
56 #include "ash/session/session_state_delegate.h" 56 #include "ash/session/session_state_delegate.h"
57 #include "ash/shelf/shelf_controller.h" 57 #include "ash/shelf/shelf_controller.h"
58 #include "ash/shelf/shelf_delegate.h"
59 #include "ash/shelf/shelf_model.h" 58 #include "ash/shelf/shelf_model.h"
60 #include "ash/shelf/shelf_window_watcher.h" 59 #include "ash/shelf/shelf_window_watcher.h"
61 #include "ash/shelf/wm_shelf.h" 60 #include "ash/shelf/wm_shelf.h"
62 #include "ash/shell_delegate.h" 61 #include "ash/shell_delegate.h"
63 #include "ash/shell_init_params.h" 62 #include "ash/shell_init_params.h"
64 #include "ash/shell_observer.h" 63 #include "ash/shell_observer.h"
65 #include "ash/shell_port.h" 64 #include "ash/shell_port.h"
66 #include "ash/shutdown_controller.h" 65 #include "ash/shutdown_controller.h"
67 #include "ash/sticky_keys/sticky_keys_controller.h" 66 #include "ash/sticky_keys/sticky_keys_controller.h"
68 #include "ash/system/bluetooth/bluetooth_notification_controller.h" 67 #include "ash/system/bluetooth/bluetooth_notification_controller.h"
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 } 405 }
407 406
408 FirstRunHelper* Shell::CreateFirstRunHelper() { 407 FirstRunHelper* Shell::CreateFirstRunHelper() {
409 return new FirstRunHelperImpl; 408 return new FirstRunHelperImpl;
410 } 409 }
411 410
412 void Shell::CreateShelfView() { 411 void Shell::CreateShelfView() {
413 // Must occur after SessionController creation and user login. 412 // Must occur after SessionController creation and user login.
414 DCHECK(session_controller()); 413 DCHECK(session_controller());
415 DCHECK_GT(session_controller()->NumberOfLoggedInUsers(), 0); 414 DCHECK_GT(session_controller()->NumberOfLoggedInUsers(), 0);
416 CreateShelfDelegate();
417 415
416 // Notify the ShellDelegate that the shelf is being initialized.
417 // TODO(msw): Refine ChromeLauncherControllerImpl lifetime management.
418 shell_delegate_->ShelfInit();
James Cook 2017/04/19 00:23:47 Aside: It's unfortunate that ShelfInit() code has
msw 2017/04/19 20:56:06 Acknowledged.
419
420 if (!shelf_window_watcher_)
421 shelf_window_watcher_ = base::MakeUnique<ShelfWindowWatcher>(shelf_model());
418 for (WmWindow* root_window : shell_port_->GetAllRootWindows()) 422 for (WmWindow* root_window : shell_port_->GetAllRootWindows())
419 root_window->GetRootWindowController()->CreateShelfView(); 423 root_window->GetRootWindowController()->CreateShelfView();
420 } 424 }
421 425
422 void Shell::SetLargeCursorSizeInDip(int large_cursor_size_in_dip) { 426 void Shell::SetLargeCursorSizeInDip(int large_cursor_size_in_dip) {
423 window_tree_host_manager_->cursor_window_controller() 427 window_tree_host_manager_->cursor_window_controller()
424 ->SetLargeCursorSizeInDip(large_cursor_size_in_dip); 428 ->SetLargeCursorSizeInDip(large_cursor_size_in_dip);
425 } 429 }
426 430
427 void Shell::SetCursorCompositingEnabled(bool enabled) { 431 void Shell::SetCursorCompositingEnabled(bool enabled) {
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 // Balances the Install() in Initialize(). 724 // Balances the Install() in Initialize().
721 views::FocusManagerFactory::Install(nullptr); 725 views::FocusManagerFactory::Install(nullptr);
722 726
723 // ShelfWindowWatcher has window observers and a pointer to the shelf model. 727 // ShelfWindowWatcher has window observers and a pointer to the shelf model.
724 shelf_window_watcher_.reset(); 728 shelf_window_watcher_.reset();
725 729
726 // ShelfItemDelegate subclasses it owns have complex cleanup to run (e.g. ARC 730 // ShelfItemDelegate subclasses it owns have complex cleanup to run (e.g. ARC
727 // shelf items in Chrome) so explicitly shutdown early. 731 // shelf items in Chrome) so explicitly shutdown early.
728 shelf_model()->DestroyItemDelegates(); 732 shelf_model()->DestroyItemDelegates();
729 733
730 // Must be destroyed before FocusController. 734 // Notify the ShellDelegate that the shelf is shutting down.
731 shelf_delegate_.reset(); 735 // TODO(msw): Refine ChromeLauncherControllerImpl lifetime management.
736 shell_delegate_->ShelfShutdown();
732 737
733 // Removes itself as an observer of |pref_service_|. 738 // Removes itself as an observer of |pref_service_|.
734 shelf_controller_.reset(); 739 shelf_controller_.reset();
735 740
736 shell_port_->Shutdown(); 741 shell_port_->Shutdown();
737 742
738 // Depends on |focus_controller_|, so must be destroyed before. 743 // Depends on |focus_controller_|, so must be destroyed before.
739 window_tree_host_manager_.reset(); 744 window_tree_host_manager_.reset();
740 focus_controller_->RemoveObserver(this); 745 focus_controller_->RemoveObserver(this);
741 focus_controller_.reset(); 746 focus_controller_.reset();
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 controller->CloseChildWindows(); 1165 controller->CloseChildWindows();
1161 } else { 1166 } else {
1162 while (!root_window->children().empty()) { 1167 while (!root_window->children().empty()) {
1163 aura::Window* child = root_window->children()[0]; 1168 aura::Window* child = root_window->children()[0];
1164 delete child; 1169 delete child;
1165 } 1170 }
1166 } 1171 }
1167 } 1172 }
1168 } 1173 }
1169 1174
1170 void Shell::CreateShelfDelegate() {
1171 // May be called multiple times as shelves are created and destroyed.
1172 if (shelf_delegate_)
1173 return;
1174 // Must occur after SessionController creation and user login because
1175 // Chrome's implementation of ShelfDelegate assumes it can get information
1176 // about multi-profile login state.
1177 DCHECK(session_controller());
1178 DCHECK_GT(session_controller()->NumberOfLoggedInUsers(), 0);
1179 shelf_delegate_.reset(shell_delegate_->CreateShelfDelegate(shelf_model()));
1180 shelf_window_watcher_ = base::MakeUnique<ShelfWindowWatcher>(shelf_model());
1181 }
1182
1183 bool Shell::CanWindowReceiveEvents(aura::Window* window) { 1175 bool Shell::CanWindowReceiveEvents(aura::Window* window) {
1184 RootWindowControllerList controllers = GetAllRootWindowControllers(); 1176 RootWindowControllerList controllers = GetAllRootWindowControllers();
1185 for (RootWindowController* controller : controllers) { 1177 for (RootWindowController* controller : controllers) {
1186 if (controller->CanWindowReceiveEvents(window)) 1178 if (controller->CanWindowReceiveEvents(window))
1187 return true; 1179 return true;
1188 } 1180 }
1189 return false; 1181 return false;
1190 } 1182 }
1191 1183
1192 //////////////////////////////////////////////////////////////////////////////// 1184 ////////////////////////////////////////////////////////////////////////////////
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1258 void Shell::OnPrefServiceInitialized( 1250 void Shell::OnPrefServiceInitialized(
1259 std::unique_ptr<::PrefService> pref_service) { 1251 std::unique_ptr<::PrefService> pref_service) {
1260 if (!instance_) 1252 if (!instance_)
1261 return; 1253 return;
1262 // |pref_service_| is null if can't connect to Chrome (as happens when 1254 // |pref_service_| is null if can't connect to Chrome (as happens when
1263 // running mash outside of chrome --mash and chrome isn't built). 1255 // running mash outside of chrome --mash and chrome isn't built).
1264 pref_service_ = std::move(pref_service); 1256 pref_service_ = std::move(pref_service);
1265 } 1257 }
1266 1258
1267 } // namespace ash 1259 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698