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

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: Rebased. Created 8 years 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 4300c8437d2c1d34aa864e17290a2addf5785f76..5895692a2f78d40e59353dd458f8f29ca3addb09 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.
@@ -177,6 +177,15 @@ ChromeLauncherControllerPerApp::ChromeLauncherControllerPerApp(
prefs::kPinnedLauncherApps,
base::Bind(&ChromeLauncherControllerPerApp::UpdateAppLaunchersFromPref,
base::Unretained(this)));
+ pref_change_registrar_.Add(
+ prefs::kShelfAlignmentLocal,
+ base::Bind(&ChromeLauncherControllerPerApp::SetShelfAlignmentFromPrefs,
+ base::Unretained(this)));
+ pref_change_registrar_.Add(
+ prefs::kShelfAutoHideBehaviorLocal,
+ base::Bind(&ChromeLauncherControllerPerApp::
+ SetShelfAutoHideBehaviorFromPrefs,
+ base::Unretained(this)));
}
ChromeLauncherControllerPerApp::~ChromeLauncherControllerPerApp() {
@@ -230,8 +239,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()) {
// This causes OnIsSyncingChanged to be called when the value of
// PrefService::IsSyncing() changes.
prefs->AddObserver(this);
@@ -563,28 +573,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(
@@ -981,25 +1004,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