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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/power/power_prefs.h"
6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "base/callback.h"
10 #include "base/logging.h"
11 #include "base/prefs/pref_change_registrar.h"
12 #include "base/prefs/pref_service.h"
13 #include "chrome/browser/chrome_notification_types.h"
14 #include "chrome/browser/chromeos/profiles/profile_helper.h"
15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/profiles/profile_manager.h"
17 #include "chrome/common/pref_names.h"
18 #include "chromeos/dbus/power_policy_controller.h"
19 #include "components/user_prefs/pref_registry_syncable.h"
20 #include "content/public/browser/notification_details.h"
21 #include "content/public/browser/notification_service.h"
22 #include "content/public/browser/notification_source.h"
23
24 namespace chromeos {
25
26 PowerPrefs::PowerPrefs(PowerPolicyController* power_policy_controller)
27 : power_policy_controller_(power_policy_controller),
28 profile_(NULL) {
29 notification_registrar_.Add(this,
30 chrome::NOTIFICATION_LOGIN_WEBUI_VISIBLE,
31 content::NotificationService::AllSources());
32 notification_registrar_.Add(this,
33 chrome::NOTIFICATION_SESSION_STARTED,
34 content::NotificationService::AllSources());
35 notification_registrar_.Add(this,
36 chrome::NOTIFICATION_PROFILE_DESTROYED,
37 content::NotificationService::AllSources());
38 }
39
40 PowerPrefs::~PowerPrefs() {
41 }
42
43 // static
44 void PowerPrefs::RegisterUserProfilePrefs(
45 user_prefs::PrefRegistrySyncable* registry) {
46 RegisterProfilePrefs(registry);
47
48 registry->RegisterIntegerPref(
49 prefs::kPowerBatteryIdleAction,
50 PowerPolicyController::ACTION_SUSPEND,
51 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
52 registry->RegisterIntegerPref(
53 prefs::kPowerLidClosedAction,
54 PowerPolicyController::ACTION_SUSPEND,
55 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
56 }
57
58 // static
59 void PowerPrefs::RegisterLoginProfilePrefs(
60 user_prefs::PrefRegistrySyncable* registry) {
61 RegisterProfilePrefs(registry);
62
63 registry->RegisterIntegerPref(
64 prefs::kPowerBatteryIdleAction,
65 PowerPolicyController::ACTION_SHUT_DOWN,
66 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
67 registry->RegisterIntegerPref(
68 prefs::kPowerLidClosedAction,
69 PowerPolicyController::ACTION_SHUT_DOWN,
70 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
71 }
72
73 void PowerPrefs::Observe(int type,
74 const content::NotificationSource& source,
75 const content::NotificationDetails& details) {
76 switch (type) {
77 case chrome::NOTIFICATION_LOGIN_WEBUI_VISIBLE:
78 // Update |profile_| when entering the login screen.
79 SetProfile(ProfileHelper::GetSigninProfile());
80 break;
81 case chrome::NOTIFICATION_SESSION_STARTED:
82 // Update |profile_| when entering a session.
83 SetProfile(ProfileManager::GetDefaultProfile());
84 break;
85 case chrome::NOTIFICATION_PROFILE_DESTROYED: {
86 // Update |profile_| when exiting a session or shutting down.
87 Profile* profile = content::Source<Profile>(source).ptr();
88 if (profile_ == profile)
89 SetProfile(NULL);
90 break;
91 }
92 default:
93 NOTREACHED();
94 break;
95 }
96 }
97
98 void PowerPrefs::UpdatePowerPolicyFromPrefs() {
99 if (!pref_change_registrar_ || !pref_change_registrar_->prefs()) {
100 NOTREACHED();
101 return;
102 }
103
104 const PrefService* prefs = pref_change_registrar_->prefs();
105 PowerPolicyController::PrefValues values;
106 values.ac_screen_dim_delay_ms =
107 prefs->GetInteger(prefs::kPowerAcScreenDimDelayMs);
108 values.ac_screen_off_delay_ms =
109 prefs->GetInteger(prefs::kPowerAcScreenOffDelayMs);
110 values.ac_screen_lock_delay_ms =
111 prefs->GetInteger(prefs::kPowerAcScreenLockDelayMs);
112 values.ac_idle_warning_delay_ms =
113 prefs->GetInteger(prefs::kPowerAcIdleWarningDelayMs);
114 values.ac_idle_delay_ms =
115 prefs->GetInteger(prefs::kPowerAcIdleDelayMs);
116 values.battery_screen_dim_delay_ms =
117 prefs->GetInteger(prefs::kPowerBatteryScreenDimDelayMs);
118 values.battery_screen_off_delay_ms =
119 prefs->GetInteger(prefs::kPowerBatteryScreenOffDelayMs);
120 values.battery_screen_lock_delay_ms =
121 prefs->GetInteger(prefs::kPowerBatteryScreenLockDelayMs);
122 values.battery_idle_warning_delay_ms =
123 prefs->GetInteger(prefs::kPowerBatteryIdleWarningDelayMs);
124 values.battery_idle_delay_ms =
125 prefs->GetInteger(prefs::kPowerBatteryIdleDelayMs);
126 values.ac_idle_action = static_cast<PowerPolicyController::Action>(
127 prefs->GetInteger(prefs::kPowerAcIdleAction));
128 values.battery_idle_action = static_cast<PowerPolicyController::Action>(
129 prefs->GetInteger(prefs::kPowerBatteryIdleAction));
130 values.lid_closed_action = static_cast<PowerPolicyController::Action>(
131 prefs->GetInteger(prefs::kPowerLidClosedAction));
132 values.use_audio_activity =
133 prefs->GetBoolean(prefs::kPowerUseAudioActivity);
134 values.use_video_activity =
135 prefs->GetBoolean(prefs::kPowerUseVideoActivity);
136 values.allow_screen_wake_locks =
137 prefs->GetBoolean(prefs::kPowerAllowScreenWakeLocks);
138 values.enable_screen_lock =
139 prefs->GetBoolean(prefs::kEnableScreenLock);
140 values.presentation_screen_dim_delay_factor =
141 prefs->GetDouble(prefs::kPowerPresentationScreenDimDelayFactor);
142 values.user_activity_screen_dim_delay_factor =
143 prefs->GetDouble(prefs::kPowerUserActivityScreenDimDelayFactor);
144
145 power_policy_controller_->ApplyPrefs(values);
146 }
147
148 // static
149 void PowerPrefs::RegisterProfilePrefs(
150 user_prefs::PrefRegistrySyncable* registry) {
151 registry->RegisterIntegerPref(
152 prefs::kPowerAcScreenDimDelayMs,
153 420000,
154 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
155 registry->RegisterIntegerPref(
156 prefs::kPowerAcScreenOffDelayMs,
157 480000,
158 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
159 registry->RegisterIntegerPref(
160 prefs::kPowerAcScreenLockDelayMs,
161 0,
162 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
163 registry->RegisterIntegerPref(
164 prefs::kPowerAcIdleWarningDelayMs,
165 0,
166 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
167 registry->RegisterIntegerPref(
168 prefs::kPowerAcIdleDelayMs,
169 1800000,
170 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
171 registry->RegisterIntegerPref(
172 prefs::kPowerBatteryScreenDimDelayMs,
173 300000,
174 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
175 registry->RegisterIntegerPref(
176 prefs::kPowerBatteryScreenOffDelayMs,
177 360000,
178 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
179 registry->RegisterIntegerPref(
180 prefs::kPowerBatteryScreenLockDelayMs,
181 0,
182 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
183 registry->RegisterIntegerPref(
184 prefs::kPowerBatteryIdleWarningDelayMs,
185 0,
186 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
187 registry->RegisterIntegerPref(
188 prefs::kPowerBatteryIdleDelayMs,
189 600000,
190 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
191 registry->RegisterIntegerPref(
192 prefs::kPowerAcIdleAction,
193 PowerPolicyController::ACTION_SUSPEND,
194 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
195 registry->RegisterBooleanPref(
196 prefs::kPowerUseAudioActivity,
197 true,
198 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
199 registry->RegisterBooleanPref(
200 prefs::kPowerUseVideoActivity,
201 true,
202 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
203 registry->RegisterBooleanPref(
204 prefs::kPowerAllowScreenWakeLocks,
205 true,
206 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
207 registry->RegisterBooleanPref(
208 prefs::kEnableScreenLock,
209 false,
210 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
211 registry->RegisterDoublePref(
212 prefs::kPowerPresentationScreenDimDelayFactor,
213 2.0,
214 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
215 registry->RegisterDoublePref(
216 prefs::kPowerUserActivityScreenDimDelayFactor,
217 2.0,
218 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
219 }
220
221 void PowerPrefs::SetProfile(Profile* profile) {
222 profile_ = profile;
223 pref_change_registrar_.reset();
224
225 if (!profile) {
226 power_policy_controller_->ClearPrefs();
227 return;
228 }
229
230 base::Closure update_callback(base::Bind(
231 &PowerPrefs::UpdatePowerPolicyFromPrefs,
232 base::Unretained(this)));
233 pref_change_registrar_.reset(new PrefChangeRegistrar);
234 pref_change_registrar_->Init(profile->GetPrefs());
235 pref_change_registrar_->Add(prefs::kPowerAcScreenDimDelayMs, update_callback);
236 pref_change_registrar_->Add(prefs::kPowerAcScreenOffDelayMs, update_callback);
237 pref_change_registrar_->Add(prefs::kPowerAcScreenLockDelayMs,
238 update_callback);
239 pref_change_registrar_->Add(prefs::kPowerAcIdleWarningDelayMs,
240 update_callback);
241 pref_change_registrar_->Add(prefs::kPowerAcIdleDelayMs, update_callback);
242 pref_change_registrar_->Add(prefs::kPowerBatteryScreenDimDelayMs,
243 update_callback);
244 pref_change_registrar_->Add(prefs::kPowerBatteryScreenOffDelayMs,
245 update_callback);
246 pref_change_registrar_->Add(prefs::kPowerBatteryScreenLockDelayMs,
247 update_callback);
248 pref_change_registrar_->Add(prefs::kPowerBatteryIdleWarningDelayMs,
249 update_callback);
250 pref_change_registrar_->Add(prefs::kPowerBatteryIdleDelayMs, update_callback);
251 pref_change_registrar_->Add(prefs::kPowerAcIdleAction, update_callback);
252 pref_change_registrar_->Add(prefs::kPowerBatteryIdleAction, update_callback);
253 pref_change_registrar_->Add(prefs::kPowerLidClosedAction, update_callback);
254 pref_change_registrar_->Add(prefs::kPowerUseAudioActivity, update_callback);
255 pref_change_registrar_->Add(prefs::kPowerUseVideoActivity, update_callback);
256 pref_change_registrar_->Add(prefs::kPowerAllowScreenWakeLocks,
257 update_callback);
258 pref_change_registrar_->Add(prefs::kEnableScreenLock, update_callback);
259 pref_change_registrar_->Add(prefs::kPowerPresentationScreenDimDelayFactor,
260 update_callback);
261 pref_change_registrar_->Add(prefs::kPowerUserActivityScreenDimDelayFactor,
262 update_callback);
263
264 UpdatePowerPolicyFromPrefs();
265 }
266
267 } // namespace chromeos
OLDNEW
« 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