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

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: 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/chromeos/profiles/profile_helper.h"
14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/profiles/profile_manager.h"
16 #include "chrome/common/chrome_notification_types.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::RegisterUserPrefs(user_prefs::PrefRegistrySyncable* registry,
45 bool for_signin_profile) {
46 registry->RegisterIntegerPref(
47 prefs::kPowerAcScreenDimDelayMs,
48 420000,
49 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
50 registry->RegisterIntegerPref(
51 prefs::kPowerAcScreenOffDelayMs,
52 480000,
53 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
54 registry->RegisterIntegerPref(
55 prefs::kPowerAcScreenLockDelayMs,
56 0,
57 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
58 registry->RegisterIntegerPref(
59 prefs::kPowerAcIdleWarningDelayMs,
60 0,
61 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
62 registry->RegisterIntegerPref(
63 prefs::kPowerAcIdleDelayMs,
64 1800000,
65 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
66 registry->RegisterIntegerPref(
67 prefs::kPowerBatteryScreenDimDelayMs,
68 300000,
69 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
70 registry->RegisterIntegerPref(
71 prefs::kPowerBatteryScreenOffDelayMs,
72 360000,
73 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
74 registry->RegisterIntegerPref(
75 prefs::kPowerBatteryScreenLockDelayMs,
76 0,
77 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
78 registry->RegisterIntegerPref(
79 prefs::kPowerBatteryIdleWarningDelayMs,
80 0,
81 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
82 registry->RegisterIntegerPref(
83 prefs::kPowerBatteryIdleDelayMs,
84 600000,
85 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
86 registry->RegisterIntegerPref(
87 prefs::kPowerAcIdleAction,
88 PowerPolicyController::ACTION_SUSPEND,
89 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
90 registry->RegisterIntegerPref(
91 prefs::kPowerBatteryIdleAction,
92 for_signin_profile ? PowerPolicyController::ACTION_SHUT_DOWN :
Daniel Erat 2013/06/28 17:05:09 just to double-check: for_signin_profile will be f
bartfab (slow) 2013/07/01 12:32:59 Yes. The signin profile is a special profile used
93 PowerPolicyController::ACTION_SUSPEND,
94 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
95 registry->RegisterIntegerPref(
96 prefs::kPowerLidClosedAction,
97 for_signin_profile ? PowerPolicyController::ACTION_SHUT_DOWN :
98 PowerPolicyController::ACTION_SUSPEND,
99 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
100 registry->RegisterBooleanPref(
101 prefs::kPowerUseAudioActivity,
102 true,
103 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
104 registry->RegisterBooleanPref(
105 prefs::kPowerUseVideoActivity,
106 true,
107 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
108 registry->RegisterBooleanPref(
109 prefs::kPowerAllowScreenWakeLocks,
110 true,
111 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
112 registry->RegisterBooleanPref(
113 prefs::kEnableScreenLock,
Daniel Erat 2013/06/28 17:05:09 i'm not entirely convinced that this should be con
bartfab (slow) 2013/07/01 12:32:59 I do not feel strongly either way but considering
Daniel Erat 2013/07/01 14:29:05 okay, fine by me
114 false,
115 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
116 registry->RegisterDoublePref(
117 prefs::kPowerPresentationScreenDimDelayFactor,
118 2.0,
119 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
120 registry->RegisterDoublePref(
121 prefs::kPowerUserActivityScreenDimDelayFactor,
122 2.0,
123 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
124 }
125
126 void PowerPrefs::Observe(int type,
127 const content::NotificationSource& source,
128 const content::NotificationDetails& details) {
129 switch (type) {
130 case chrome::NOTIFICATION_LOGIN_WEBUI_VISIBLE:
131 // Update |profile_| when entering the login screen.
132 SetProfile(ProfileHelper::GetSigninProfile());
133 break;
134 case chrome::NOTIFICATION_SESSION_STARTED:
135 // Update |profile_| when entering a session.
136 SetProfile(ProfileManager::GetDefaultProfile());
137 break;
138 case chrome::NOTIFICATION_PROFILE_DESTROYED: {
139 // Update |profile_| when exiting a session or shutting down.
140 Profile* profile = content::Source<Profile>(source).ptr();
141 if (profile_ == profile)
142 SetProfile(NULL);
143 break;
144 }
Daniel Erat 2013/06/28 17:05:09 do you need a default: NOTREACHED() here to keep c
bartfab (slow) 2013/07/01 12:32:59 I had not tried to compile this with clang yet. Ma
145 }
146 }
147
148 void PowerPrefs::UpdatePowerPolicyFromPrefs() {
149 if (!pref_change_registrar_ || !pref_change_registrar_->prefs()) {
150 NOTREACHED();
151 return;
152 }
153
154 const PrefService* prefs = pref_change_registrar_->prefs();
155 PowerPolicyController::PrefValues values;
156 values.ac_screen_dim_delay_ms =
157 prefs->GetInteger(prefs::kPowerAcScreenDimDelayMs);
158 values.ac_screen_off_delay_ms =
159 prefs->GetInteger(prefs::kPowerAcScreenOffDelayMs);
160 values.ac_screen_lock_delay_ms =
161 prefs->GetInteger(prefs::kPowerAcScreenLockDelayMs);
162 values.ac_idle_warning_delay_ms =
163 prefs->GetInteger(prefs::kPowerAcIdleWarningDelayMs);
164 values.ac_idle_delay_ms =
165 prefs->GetInteger(prefs::kPowerAcIdleDelayMs);
166 values.battery_screen_dim_delay_ms =
167 prefs->GetInteger(prefs::kPowerBatteryScreenDimDelayMs);
168 values.battery_screen_off_delay_ms =
169 prefs->GetInteger(prefs::kPowerBatteryScreenOffDelayMs);
170 values.battery_screen_lock_delay_ms =
171 prefs->GetInteger(prefs::kPowerBatteryScreenLockDelayMs);
172 values.battery_idle_warning_delay_ms =
173 prefs->GetInteger(prefs::kPowerBatteryIdleWarningDelayMs);
174 values.battery_idle_delay_ms =
175 prefs->GetInteger(prefs::kPowerBatteryIdleDelayMs);
176 values.ac_idle_action = static_cast<PowerPolicyController::Action>(
177 prefs->GetInteger(prefs::kPowerAcIdleAction));
178 values.battery_idle_action = static_cast<PowerPolicyController::Action>(
179 prefs->GetInteger(prefs::kPowerBatteryIdleAction));
180 values.lid_closed_action = static_cast<PowerPolicyController::Action>(
181 prefs->GetInteger(prefs::kPowerLidClosedAction));
182 values.use_audio_activity =
183 prefs->GetBoolean(prefs::kPowerUseAudioActivity);
184 values.use_video_activity =
185 prefs->GetBoolean(prefs::kPowerUseVideoActivity);
186 values.allow_screen_wake_locks =
187 prefs->GetBoolean(prefs::kPowerAllowScreenWakeLocks);
188 values.enable_screen_lock =
189 prefs->GetBoolean(prefs::kEnableScreenLock);
190 values.presentation_screen_dim_delay_factor =
191 prefs->GetDouble(prefs::kPowerPresentationScreenDimDelayFactor);
192 values.user_activity_screen_dim_delay_factor =
193 prefs->GetDouble(prefs::kPowerUserActivityScreenDimDelayFactor);
194 power_policy_controller_->ApplyPrefs(values);
195 }
196
197 void PowerPrefs::SetProfile(Profile* profile) {
198 profile_ = profile;
199 pref_change_registrar_.reset();
200
201 if (!profile) {
202 power_policy_controller_->ClearPrefs();
203 return;
204 }
205
206 base::Closure update_callback(base::Bind(
207 &PowerPrefs::UpdatePowerPolicyFromPrefs,
208 base::Unretained(this)));
209 pref_change_registrar_.reset(new PrefChangeRegistrar);
210 pref_change_registrar_->Init(profile->GetPrefs());
211 pref_change_registrar_->Add(prefs::kPowerAcScreenDimDelayMs, update_callback);
212 pref_change_registrar_->Add(prefs::kPowerAcScreenOffDelayMs, update_callback);
213 pref_change_registrar_->Add(prefs::kPowerAcScreenLockDelayMs,
214 update_callback);
215 pref_change_registrar_->Add(prefs::kPowerAcIdleWarningDelayMs,
216 update_callback);
217 pref_change_registrar_->Add(prefs::kPowerAcIdleDelayMs, update_callback);
218 pref_change_registrar_->Add(prefs::kPowerBatteryScreenDimDelayMs,
219 update_callback);
220 pref_change_registrar_->Add(prefs::kPowerBatteryScreenOffDelayMs,
221 update_callback);
222 pref_change_registrar_->Add(prefs::kPowerBatteryScreenLockDelayMs,
223 update_callback);
224 pref_change_registrar_->Add(prefs::kPowerBatteryIdleWarningDelayMs,
225 update_callback);
226 pref_change_registrar_->Add(prefs::kPowerBatteryIdleDelayMs, update_callback);
227 pref_change_registrar_->Add(prefs::kPowerAcIdleAction, update_callback);
228 pref_change_registrar_->Add(prefs::kPowerBatteryIdleAction, update_callback);
229 pref_change_registrar_->Add(prefs::kPowerLidClosedAction, update_callback);
230 pref_change_registrar_->Add(prefs::kPowerUseAudioActivity, update_callback);
231 pref_change_registrar_->Add(prefs::kPowerUseVideoActivity, update_callback);
232 pref_change_registrar_->Add(prefs::kPowerAllowScreenWakeLocks,
233 update_callback);
234 pref_change_registrar_->Add(prefs::kEnableScreenLock, update_callback);
235 pref_change_registrar_->Add(prefs::kPowerPresentationScreenDimDelayFactor,
236 update_callback);
237 pref_change_registrar_->Add(prefs::kPowerUserActivityScreenDimDelayFactor,
238 update_callback);
239
240 UpdatePowerPolicyFromPrefs();
241 }
242
243 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698