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

Unified Diff: chrome/browser/chromeos/power/power_prefs.cc

Issue 18153007: Add policies to control power management on the Chrome OS login screen (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Correct example in policy_templates.json. Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chromeos/power/power_prefs.h ('k') | chrome/browser/chromeos/power/power_prefs_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/power/power_prefs.cc
diff --git a/chrome/browser/chromeos/power/power_prefs.cc b/chrome/browser/chromeos/power/power_prefs.cc
new file mode 100644
index 0000000000000000000000000000000000000000..ff8be47c799222de96e923087d4a6feffa4bcd92
--- /dev/null
+++ b/chrome/browser/chromeos/power/power_prefs.cc
@@ -0,0 +1,267 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/power/power_prefs.h"
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/callback.h"
+#include "base/logging.h"
+#include "base/prefs/pref_change_registrar.h"
+#include "base/prefs/pref_service.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/common/pref_names.h"
+#include "chromeos/dbus/power_policy_controller.h"
+#include "components/user_prefs/pref_registry_syncable.h"
+#include "content/public/browser/notification_details.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_source.h"
+
+namespace chromeos {
+
+PowerPrefs::PowerPrefs(PowerPolicyController* power_policy_controller)
+ : power_policy_controller_(power_policy_controller),
+ profile_(NULL) {
+ notification_registrar_.Add(this,
+ chrome::NOTIFICATION_LOGIN_WEBUI_VISIBLE,
+ content::NotificationService::AllSources());
+ notification_registrar_.Add(this,
+ chrome::NOTIFICATION_SESSION_STARTED,
+ content::NotificationService::AllSources());
+ notification_registrar_.Add(this,
+ chrome::NOTIFICATION_PROFILE_DESTROYED,
+ content::NotificationService::AllSources());
+}
+
+PowerPrefs::~PowerPrefs() {
+}
+
+// static
+void PowerPrefs::RegisterUserProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+ RegisterProfilePrefs(registry);
+
+ registry->RegisterIntegerPref(
+ prefs::kPowerBatteryIdleAction,
+ PowerPolicyController::ACTION_SUSPEND,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kPowerLidClosedAction,
+ PowerPolicyController::ACTION_SUSPEND,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+}
+
+// static
+void PowerPrefs::RegisterLoginProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+ RegisterProfilePrefs(registry);
+
+ registry->RegisterIntegerPref(
+ prefs::kPowerBatteryIdleAction,
+ PowerPolicyController::ACTION_SHUT_DOWN,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kPowerLidClosedAction,
+ PowerPolicyController::ACTION_SHUT_DOWN,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+}
+
+void PowerPrefs::Observe(int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) {
+ switch (type) {
+ case chrome::NOTIFICATION_LOGIN_WEBUI_VISIBLE:
+ // Update |profile_| when entering the login screen.
+ SetProfile(ProfileHelper::GetSigninProfile());
+ break;
+ case chrome::NOTIFICATION_SESSION_STARTED:
+ // Update |profile_| when entering a session.
+ SetProfile(ProfileManager::GetDefaultProfile());
+ break;
+ case chrome::NOTIFICATION_PROFILE_DESTROYED: {
+ // Update |profile_| when exiting a session or shutting down.
+ Profile* profile = content::Source<Profile>(source).ptr();
+ if (profile_ == profile)
+ SetProfile(NULL);
+ break;
+ }
+ default:
+ NOTREACHED();
+ break;
+ }
+}
+
+void PowerPrefs::UpdatePowerPolicyFromPrefs() {
+ if (!pref_change_registrar_ || !pref_change_registrar_->prefs()) {
+ NOTREACHED();
+ return;
+ }
+
+ const PrefService* prefs = pref_change_registrar_->prefs();
+ PowerPolicyController::PrefValues values;
+ values.ac_screen_dim_delay_ms =
+ prefs->GetInteger(prefs::kPowerAcScreenDimDelayMs);
+ values.ac_screen_off_delay_ms =
+ prefs->GetInteger(prefs::kPowerAcScreenOffDelayMs);
+ values.ac_screen_lock_delay_ms =
+ prefs->GetInteger(prefs::kPowerAcScreenLockDelayMs);
+ values.ac_idle_warning_delay_ms =
+ prefs->GetInteger(prefs::kPowerAcIdleWarningDelayMs);
+ values.ac_idle_delay_ms =
+ prefs->GetInteger(prefs::kPowerAcIdleDelayMs);
+ values.battery_screen_dim_delay_ms =
+ prefs->GetInteger(prefs::kPowerBatteryScreenDimDelayMs);
+ values.battery_screen_off_delay_ms =
+ prefs->GetInteger(prefs::kPowerBatteryScreenOffDelayMs);
+ values.battery_screen_lock_delay_ms =
+ prefs->GetInteger(prefs::kPowerBatteryScreenLockDelayMs);
+ values.battery_idle_warning_delay_ms =
+ prefs->GetInteger(prefs::kPowerBatteryIdleWarningDelayMs);
+ values.battery_idle_delay_ms =
+ prefs->GetInteger(prefs::kPowerBatteryIdleDelayMs);
+ values.ac_idle_action = static_cast<PowerPolicyController::Action>(
+ prefs->GetInteger(prefs::kPowerAcIdleAction));
+ values.battery_idle_action = static_cast<PowerPolicyController::Action>(
+ prefs->GetInteger(prefs::kPowerBatteryIdleAction));
+ values.lid_closed_action = static_cast<PowerPolicyController::Action>(
+ prefs->GetInteger(prefs::kPowerLidClosedAction));
+ values.use_audio_activity =
+ prefs->GetBoolean(prefs::kPowerUseAudioActivity);
+ values.use_video_activity =
+ prefs->GetBoolean(prefs::kPowerUseVideoActivity);
+ values.allow_screen_wake_locks =
+ prefs->GetBoolean(prefs::kPowerAllowScreenWakeLocks);
+ values.enable_screen_lock =
+ prefs->GetBoolean(prefs::kEnableScreenLock);
+ values.presentation_screen_dim_delay_factor =
+ prefs->GetDouble(prefs::kPowerPresentationScreenDimDelayFactor);
+ values.user_activity_screen_dim_delay_factor =
+ prefs->GetDouble(prefs::kPowerUserActivityScreenDimDelayFactor);
+
+ power_policy_controller_->ApplyPrefs(values);
+}
+
+// static
+void PowerPrefs::RegisterProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+ registry->RegisterIntegerPref(
+ prefs::kPowerAcScreenDimDelayMs,
+ 420000,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kPowerAcScreenOffDelayMs,
+ 480000,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kPowerAcScreenLockDelayMs,
+ 0,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kPowerAcIdleWarningDelayMs,
+ 0,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kPowerAcIdleDelayMs,
+ 1800000,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kPowerBatteryScreenDimDelayMs,
+ 300000,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kPowerBatteryScreenOffDelayMs,
+ 360000,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kPowerBatteryScreenLockDelayMs,
+ 0,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kPowerBatteryIdleWarningDelayMs,
+ 0,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kPowerBatteryIdleDelayMs,
+ 600000,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kPowerAcIdleAction,
+ PowerPolicyController::ACTION_SUSPEND,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterBooleanPref(
+ prefs::kPowerUseAudioActivity,
+ true,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterBooleanPref(
+ prefs::kPowerUseVideoActivity,
+ true,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterBooleanPref(
+ prefs::kPowerAllowScreenWakeLocks,
+ true,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterBooleanPref(
+ prefs::kEnableScreenLock,
+ false,
+ user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
+ registry->RegisterDoublePref(
+ prefs::kPowerPresentationScreenDimDelayFactor,
+ 2.0,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterDoublePref(
+ prefs::kPowerUserActivityScreenDimDelayFactor,
+ 2.0,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+}
+
+void PowerPrefs::SetProfile(Profile* profile) {
+ profile_ = profile;
+ pref_change_registrar_.reset();
+
+ if (!profile) {
+ power_policy_controller_->ClearPrefs();
+ return;
+ }
+
+ base::Closure update_callback(base::Bind(
+ &PowerPrefs::UpdatePowerPolicyFromPrefs,
+ base::Unretained(this)));
+ pref_change_registrar_.reset(new PrefChangeRegistrar);
+ pref_change_registrar_->Init(profile->GetPrefs());
+ pref_change_registrar_->Add(prefs::kPowerAcScreenDimDelayMs, update_callback);
+ pref_change_registrar_->Add(prefs::kPowerAcScreenOffDelayMs, update_callback);
+ pref_change_registrar_->Add(prefs::kPowerAcScreenLockDelayMs,
+ update_callback);
+ pref_change_registrar_->Add(prefs::kPowerAcIdleWarningDelayMs,
+ update_callback);
+ pref_change_registrar_->Add(prefs::kPowerAcIdleDelayMs, update_callback);
+ pref_change_registrar_->Add(prefs::kPowerBatteryScreenDimDelayMs,
+ update_callback);
+ pref_change_registrar_->Add(prefs::kPowerBatteryScreenOffDelayMs,
+ update_callback);
+ pref_change_registrar_->Add(prefs::kPowerBatteryScreenLockDelayMs,
+ update_callback);
+ pref_change_registrar_->Add(prefs::kPowerBatteryIdleWarningDelayMs,
+ update_callback);
+ pref_change_registrar_->Add(prefs::kPowerBatteryIdleDelayMs, update_callback);
+ pref_change_registrar_->Add(prefs::kPowerAcIdleAction, update_callback);
+ pref_change_registrar_->Add(prefs::kPowerBatteryIdleAction, update_callback);
+ pref_change_registrar_->Add(prefs::kPowerLidClosedAction, update_callback);
+ pref_change_registrar_->Add(prefs::kPowerUseAudioActivity, update_callback);
+ pref_change_registrar_->Add(prefs::kPowerUseVideoActivity, update_callback);
+ pref_change_registrar_->Add(prefs::kPowerAllowScreenWakeLocks,
+ update_callback);
+ pref_change_registrar_->Add(prefs::kEnableScreenLock, update_callback);
+ pref_change_registrar_->Add(prefs::kPowerPresentationScreenDimDelayFactor,
+ update_callback);
+ pref_change_registrar_->Add(prefs::kPowerUserActivityScreenDimDelayFactor,
+ update_callback);
+
+ UpdatePowerPolicyFromPrefs();
+}
+
+} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/power/power_prefs.h ('k') | chrome/browser/chromeos/power/power_prefs_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698