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

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

Issue 11418114: Add policy for ash launcher auto-hide behavior (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments addressed- Rebased. Created 8 years, 1 month 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_per_app.cc
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc
index 37d250925992bcb840826881d8544564026700e9..6ac0b4a8943b74ced00836889d55d6bc72929b87 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc
@@ -127,12 +127,12 @@ std::string GetLocalOrRemotePref(PrefService* pref_service,
return value.empty() ? pref_service->GetString(synced_path) : value;
}
-// If prefs have synced and the pref value at |local_path| is empty the value
+// If prefs have synced and no user-set value exists at |local_path|, the value
// from |synced_path| is copied to |local_path|.
void MaybePropagatePrefToLocal(PrefService* pref_service,
const char* local_path,
const char* synced_path) {
- if (pref_service->GetString(local_path).empty() &&
+ if (!pref_service->FindPreference(local_path)->HasUserSetting() &&
pref_service->IsSyncing()) {
// First time the user is using this machine, propagate from remote to
// local.
@@ -174,6 +174,8 @@ ChromeLauncherControllerPerApp::ChromeLauncherControllerPerApp(
content::Source<Profile>(profile_));
pref_change_registrar_.Init(profile_->GetPrefs());
pref_change_registrar_.Add(prefs::kPinnedLauncherApps, this);
+ pref_change_registrar_.Add(prefs::kShelfAlignmentLocal, this);
+ pref_change_registrar_.Add(prefs::kShelfAutoHideBehaviorLocal, this);
}
ChromeLauncherControllerPerApp::~ChromeLauncherControllerPerApp() {
@@ -227,8 +229,9 @@ void ChromeLauncherControllerPerApp::Init() {
SetShelfAutoHideBehaviorFromPrefs();
SetShelfAlignmentFromPrefs();
PrefService* prefs = profile_->GetPrefs();
- if (prefs->GetString(prefs::kShelfAlignmentLocal).empty() ||
- prefs->GetString(prefs::kShelfAutoHideBehaviorLocal).empty()) {
+ if (!prefs->FindPreference(prefs::kShelfAlignmentLocal)->HasUserSetting() ||
+ !prefs->FindPreference(prefs::kShelfAutoHideBehaviorLocal)->
+ HasUserSetting()) {
prefs->AddObserver(this);
}
ash::Shell::GetInstance()->AddShellObserver(this);
@@ -558,28 +561,41 @@ bool ChromeLauncherControllerPerApp::CanPin() const {
return pref && pref->IsUserModifiable();
}
-void ChromeLauncherControllerPerApp::SetAutoHideBehavior(
- ash::ShelfAutoHideBehavior behavior,
- aura::RootWindow* root_window) {
- ash::Shell::GetInstance()->SetShelfAutoHideBehavior(
- behavior,
- root_window);
- // TODO(oshima): Support multiple launcher.
- if (root_window != ash::Shell::GetPrimaryRootWindow())
- return;
+ash::ShelfAutoHideBehavior
+ ChromeLauncherControllerPerApp::GetShelfAutoHideBehavior(
+ aura::RootWindow* root_window) const {
+ // TODO(oshima): Support multiple launchers.
- 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;
- }
- // See comment in |kShelfAlignment| about why we have two prefs here.
- profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehaviorLocal, value);
- profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehavior, value);
+ // See comment in |kShelfAlignment| as to why we consider two prefs.
+ const std::string behavior_value(
+ GetLocalOrRemotePref(profile_->GetPrefs(),
+ prefs::kShelfAutoHideBehaviorLocal,
+ prefs::kShelfAutoHideBehavior));
+
+ // Note: To maintain sync compatibility with old images of chrome/chromeos
+ // the set of values that may be encountered includes the now-extinct
+ // "Default" as well as "Never" and "Always", "Default" should now
+ // be treated as "Never" (http://crbug.com/146773).
+ if (behavior_value == ash::kShelfAutoHideBehaviorAlways)
+ return ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS;
+ return ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER;
+}
+
+bool ChromeLauncherControllerPerApp::CanUserModifyShelfAutoHideBehavior(
+ aura::RootWindow* root_window) const {
+ // TODO(oshima): Support multiple launchers.
+ return profile_->GetPrefs()->
+ FindPreference(prefs::kShelfAutoHideBehaviorLocal)->IsUserModifiable();
+}
+
+void ChromeLauncherControllerPerApp::ToggleShelfAutoHideBehavior(
+ aura::RootWindow* root_window) {
+ ash::ShelfAutoHideBehavior behavior = GetShelfAutoHideBehavior(root_window) ==
+ ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS ?
+ ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER :
+ ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS;
+ SetShelfAutoHideBehaviorPrefs(behavior, root_window);
+ return;
}
void ChromeLauncherControllerPerApp::RemoveTabFromRunningApp(
@@ -987,25 +1003,32 @@ void ChromeLauncherControllerPerApp::UpdateAppLaunchersFromPref() {
DoPinAppWithID(*pref_app_id);
}
-void ChromeLauncherControllerPerApp::SetShelfAutoHideBehaviorFromPrefs() {
- // See comment in |kShelfAlignment| as to why we consider two prefs.
- const std::string behavior_value(
- GetLocalOrRemotePref(profile_->GetPrefs(),
- prefs::kShelfAutoHideBehaviorLocal,
- prefs::kShelfAutoHideBehavior));
+void ChromeLauncherControllerPerApp::SetShelfAutoHideBehaviorPrefs(
+ ash::ShelfAutoHideBehavior behavior,
+ aura::RootWindow* root_window) {
+ // TODO(oshima): Support multiple launchers.
+ if (root_window != ash::Shell::GetPrimaryRootWindow())
+ return;
- // Note: To maintain sync compatibility with old images of chrome/chromeos
- // the set of values that may be encountered includes the now-extinct
- // "Default" as well as "Never" and "Always", "Default" should now
- // be treated as "Never".
- // (http://code.google.com/p/chromium/issues/detail?id=146773)
- ash::ShelfAutoHideBehavior behavior =
- ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER;
- if (behavior_value == ash::kShelfAutoHideBehaviorAlways)
- behavior = ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS;
+ 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;
+ }
+ // See comment in |kShelfAlignment| about why we have two prefs here.
+ profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehaviorLocal, value);
+ profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehavior, value);
+}
+
+void ChromeLauncherControllerPerApp::SetShelfAutoHideBehaviorFromPrefs() {
// TODO(oshima): Support multiple displays.
+ aura::RootWindow* root_window = ash::Shell::GetPrimaryRootWindow();
ash::Shell::GetInstance()->SetShelfAutoHideBehavior(
- behavior, ash::Shell::GetPrimaryRootWindow());
+ GetShelfAutoHideBehavior(root_window), root_window);
}
void ChromeLauncherControllerPerApp::SetShelfAlignmentFromPrefs() {

Powered by Google App Engine
This is Rietveld 408576698