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

Unified Diff: chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc

Issue 1851883002: Cleanup shelf initialization and observation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Check for shelf before setting prefs in ChromeLauncherController. Created 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
index beaef90077f894328469c6895285f921dae9af3b..a79436772e19949367bd81ddc20429024cbe448c 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
@@ -14,7 +14,6 @@
#include "ash/root_window_controller.h"
#include "ash/shelf/shelf.h"
#include "ash/shelf/shelf_item_delegate_manager.h"
-#include "ash/shelf/shelf_layout_manager.h"
#include "ash/shelf/shelf_model.h"
#include "ash/shell.h"
#include "ash/system/tray/system_tray_delegate.h"
@@ -516,9 +515,6 @@ ChromeLauncherController::~ChromeLauncherController() {
// Reset the app window controllers here since it has a weak pointer to this.
app_window_controllers_.clear();
- for (auto iter : shelves_)
- iter->shelf_layout_manager()->RemoveObserver(this);
-
model_->RemoveObserver(this);
if (ash::Shell::HasInstance())
ash::Shell::GetInstance()->window_tree_host_manager()->RemoveObserver(this);
@@ -532,9 +528,6 @@ ChromeLauncherController::~ChromeLauncherController() {
model_->RemoveItemAt(index);
}
- if (ash::Shell::HasInstance())
- ash::Shell::GetInstance()->RemoveShellObserver(this);
-
// Release all profile dependent resources.
ReleaseProfile();
if (instance_ == this)
@@ -559,23 +552,20 @@ void ChromeLauncherController::Init() {
CreateBrowserShortcutLauncherItem();
UpdateAppLaunchersFromPref();
- // TODO(sky): update unit test so that this test isn't necessary.
- if (ash::Shell::HasInstance()) {
- SetShelfAutoHideBehaviorFromPrefs();
- SetShelfAlignmentFromPrefs();
#if defined(OS_CHROMEOS)
+ // TODO(sky): update unit test so that this test isn't necessary.
+ if (ash::Shell::HasInstance())
SetVirtualKeyboardBehaviorFromPrefs();
#endif // defined(OS_CHROMEOS)
- syncable_prefs::PrefServiceSyncable* prefs =
- PrefServiceSyncableFromProfile(profile_);
- if (!prefs->FindPreference(prefs::kShelfAlignmentLocal)->HasUserSetting() ||
- !prefs->FindPreference(prefs::kShelfAutoHideBehaviorLocal)->
- HasUserSetting()) {
- // This causes OnIsSyncingChanged to be called when the value of
- // PrefService::IsSyncing() changes.
- prefs->AddObserver(this);
- }
- ash::Shell::GetInstance()->AddShellObserver(this);
+
+ syncable_prefs::PrefServiceSyncable* prefs =
+ PrefServiceSyncableFromProfile(profile_);
+ if (!prefs->FindPreference(prefs::kShelfAlignmentLocal)->HasUserSetting() ||
+ !prefs->FindPreference(prefs::kShelfAutoHideBehaviorLocal)
+ ->HasUserSetting()) {
+ // This causes OnIsSyncingChanged to be called when the value of
+ // PrefService::IsSyncing() changes.
+ prefs->AddObserver(this);
}
}
@@ -893,12 +883,6 @@ void ChromeLauncherController::OnAppImageUpdated(const std::string& id,
}
}
-void ChromeLauncherController::OnAutoHideBehaviorChanged(
- aura::Window* root_window,
- ash::ShelfAutoHideBehavior new_behavior) {
- SetShelfAutoHideBehaviorPrefs(new_behavior, root_window);
-}
-
void ChromeLauncherController::SetLauncherItemImage(
ash::ShelfID shelf_id,
const gfx::ImageSkia& image) {
@@ -1156,14 +1140,73 @@ ChromeLauncherController::ActivateWindowOrMinimizeIfActive(
}
void ChromeLauncherController::OnShelfCreated(ash::Shelf* shelf) {
- shelves_.insert(shelf);
- shelf->shelf_layout_manager()->AddObserver(this);
+ aura::Window* root_window =
+ shelf->shelf_widget()->GetNativeWindow()->GetRootWindow();
+
+ shelf->SetAutoHideBehavior(
+ GetShelfAutoHideBehaviorFromPrefs(profile_, root_window));
+
+ if (ash::ShelfWidget::ShelfAlignmentAllowed())
+ shelf->SetAlignment(GetShelfAlignmentFromPrefs(profile_, root_window));
+}
+
+void ChromeLauncherController::OnShelfDestroyed(ash::Shelf* shelf) {}
+
+void ChromeLauncherController::OnShelfAlignmentChanged(ash::Shelf* shelf) {
+ const char* value = nullptr;
+ switch (shelf->GetAlignment()) {
+ case ash::SHELF_ALIGNMENT_BOTTOM:
+ value = ash::kShelfAlignmentBottom;
+ break;
+ case ash::SHELF_ALIGNMENT_LEFT:
+ value = ash::kShelfAlignmentLeft;
+ break;
+ case ash::SHELF_ALIGNMENT_RIGHT:
+ value = ash::kShelfAlignmentRight;
+ break;
+ }
+
+ aura::Window* root_window =
+ shelf->shelf_widget()->GetNativeWindow()->GetRootWindow();
+
+ UpdatePerDisplayPref(profile_->GetPrefs(), root_window,
+ prefs::kShelfAlignment, value);
+
+ if (root_window == ash::Shell::GetPrimaryRootWindow()) {
+ // See comment in |kShelfAlignment| about why we have two prefs here.
+ profile_->GetPrefs()->SetString(prefs::kShelfAlignmentLocal, value);
+ profile_->GetPrefs()->SetString(prefs::kShelfAlignment, value);
+ }
}
-void ChromeLauncherController::OnShelfDestroyed(ash::Shelf* shelf) {
- shelves_.erase(shelf);
- // RemoveObserver is not called here, since by the time this method is called
- // Shelf is already in its destructor.
+void ChromeLauncherController::OnShelfAutoHideBehaviorChanged(
+ ash::Shelf* shelf) {
+ const char* value = nullptr;
+ switch (shelf->GetAutoHideBehavior()) {
+ case ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS:
+ value = ash::kShelfAutoHideBehaviorAlways;
+ break;
+ case ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER:
+ value = ash::kShelfAutoHideBehaviorNever;
+ break;
+ case ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN:
+ // This one should not be a valid preference option for now. We only want
+ // to completely hide it when we run in app mode - or while we temporarily
+ // hide the shelf as part of an animation (e.g. the multi user change).
+ return;
+ }
+
+ aura::Window* root_window =
+ shelf->shelf_widget()->GetNativeWindow()->GetRootWindow();
+
+ UpdatePerDisplayPref(profile_->GetPrefs(), root_window,
+ prefs::kShelfAutoHideBehavior, value);
+
+ if (root_window == ash::Shell::GetPrimaryRootWindow()) {
+ // See comment in |kShelfAlignment| about why we have two prefs here.
+ profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehaviorLocal, value);
+ profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehavior, value);
+ }
}
void ChromeLauncherController::ShelfItemAdded(int index) {
@@ -1217,8 +1260,6 @@ void ChromeLauncherController::ActiveUserChanged(
controller->ActiveUserChanged(user_email);
// Update the user specific shell properties from the new user profile.
UpdateAppLaunchersFromPref();
- SetShelfAlignmentFromPrefs();
- SetShelfAutoHideBehaviorFromPrefs();
SetShelfBehaviorsFromPrefs();
#if defined(OS_CHROMEOS)
SetVirtualKeyboardBehaviorFromPrefs();
@@ -1282,31 +1323,6 @@ void ChromeLauncherController::OnAppUninstalled(
}
}
-void ChromeLauncherController::OnShelfAlignmentChanged(
- aura::Window* root_window) {
- const char* pref_value = NULL;
- switch (ash::Shell::GetInstance()->GetShelfAlignment(root_window)) {
- case ash::SHELF_ALIGNMENT_BOTTOM:
- pref_value = ash::kShelfAlignmentBottom;
- break;
- case ash::SHELF_ALIGNMENT_LEFT:
- pref_value = ash::kShelfAlignmentLeft;
- break;
- case ash::SHELF_ALIGNMENT_RIGHT:
- pref_value = ash::kShelfAlignmentRight;
- break;
- }
-
- UpdatePerDisplayPref(
- profile_->GetPrefs(), root_window, prefs::kShelfAlignment, pref_value);
-
- if (root_window == ash::Shell::GetPrimaryRootWindow()) {
- // See comment in |kShelfAlignment| about why we have two prefs here.
- profile_->GetPrefs()->SetString(prefs::kShelfAlignmentLocal, pref_value);
- profile_->GetPrefs()->SetString(prefs::kShelfAlignment, pref_value);
- }
-}
-
void ChromeLauncherController::OnDisplayConfigurationChanged() {
SetShelfBehaviorsFromPrefs();
}
@@ -1791,39 +1807,13 @@ void ChromeLauncherController::UpdateAppLaunchersFromPref() {
}
}
-void ChromeLauncherController::SetShelfAutoHideBehaviorPrefs(
- ash::ShelfAutoHideBehavior behavior,
- aura::Window* root_window) {
- const char* value = NULL;
- switch (behavior) {
- case ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS:
- value = ash::kShelfAutoHideBehaviorAlways;
- break;
- case ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER:
- value = ash::kShelfAutoHideBehaviorNever;
- break;
- case ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN:
- // This one should not be a valid preference option for now. We only want
- // to completely hide it when we run in app mode - or while we temporarily
- // hide the shelf as part of an animation (e.g. the multi user change).
- return;
- }
-
- UpdatePerDisplayPref(
- profile_->GetPrefs(), root_window, prefs::kShelfAutoHideBehavior, value);
-
- if (root_window == ash::Shell::GetPrimaryRootWindow()) {
- // See comment in |kShelfAlignment| about why we have two prefs here.
- profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehaviorLocal, value);
- profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehavior, value);
- }
-}
-
void ChromeLauncherController::SetShelfAutoHideBehaviorFromPrefs() {
- aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows();
- for (auto i = root_windows.begin(); i != root_windows.end(); ++i) {
- ash::Shell::GetInstance()->SetShelfAutoHideBehavior(
- GetShelfAutoHideBehaviorFromPrefs(profile_, *i), *i);
+ for (auto* window : ash::Shell::GetAllRootWindows()) {
+ ash::Shelf* shelf = ash::Shelf::ForWindow(window);
+ if (shelf) {
+ shelf->SetAutoHideBehavior(
+ GetShelfAutoHideBehaviorFromPrefs(profile_, window));
+ }
}
}
@@ -1831,10 +1821,10 @@ void ChromeLauncherController::SetShelfAlignmentFromPrefs() {
if (!ash::ShelfWidget::ShelfAlignmentAllowed())
return;
- aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows();
- for (auto i = root_windows.begin(); i != root_windows.end(); ++i) {
- ash::Shell::GetInstance()->SetShelfAlignment(
- GetShelfAlignmentFromPrefs(profile_, *i), *i);
+ for (auto* window : ash::Shell::GetAllRootWindows()) {
+ ash::Shelf* shelf = ash::Shelf::ForWindow(window);
+ if (shelf)
+ shelf->SetAlignment(GetShelfAlignmentFromPrefs(profile_, window));
}
}
« ash/shelf/shelf.cc ('K') | « chrome/browser/ui/ash/launcher/chrome_launcher_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698