OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chromeos/dbus/power_policy_controller.h" | 5 #include "chromeos/dbus/power_policy_controller.h" |
6 | 6 |
7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 str += base::StringPrintf("wait_for_initial_user_activity=%d ", | 127 str += base::StringPrintf("wait_for_initial_user_activity=%d ", |
128 policy.wait_for_initial_user_activity()); | 128 policy.wait_for_initial_user_activity()); |
129 } | 129 } |
130 if (policy.has_reason()) | 130 if (policy.has_reason()) |
131 str += base::StringPrintf("reason=\"%s\" ", policy.reason().c_str()); | 131 str += base::StringPrintf("reason=\"%s\" ", policy.reason().c_str()); |
132 TrimWhitespace(str, TRIM_TRAILING, &str); | 132 TrimWhitespace(str, TRIM_TRAILING, &str); |
133 return str; | 133 return str; |
134 } | 134 } |
135 | 135 |
136 PowerPolicyController::PowerPolicyController() | 136 PowerPolicyController::PowerPolicyController() |
137 : manager_(NULL), | 137 : client_(NULL), |
138 client_(NULL), | |
139 prefs_were_set_(false), | 138 prefs_were_set_(false), |
140 honor_screen_wake_locks_(true), | 139 honor_screen_wake_locks_(true), |
141 next_wake_lock_id_(1) { | 140 next_wake_lock_id_(1) { |
142 } | 141 } |
143 | 142 |
144 PowerPolicyController::~PowerPolicyController() { | 143 PowerPolicyController::~PowerPolicyController() { |
145 DCHECK(manager_); | 144 if (client_) { |
146 // The power manager's policy is reset before this point, in | 145 client_->RemoveObserver(this); |
147 // OnDBusThreadManagerDestroying(). At the time that | 146 client_ = NULL; |
148 // PowerPolicyController is destroyed, PowerManagerClient's D-Bus proxy | 147 } |
149 // to the power manager is already gone. | |
150 client_->RemoveObserver(this); | |
151 client_ = NULL; | |
152 manager_->RemoveObserver(this); | |
153 manager_ = NULL; | |
154 } | 148 } |
155 | 149 |
156 void PowerPolicyController::Init(DBusThreadManager* manager) { | 150 void PowerPolicyController::Init(DBusThreadManager* manager) { |
157 manager_ = manager; | 151 client_ = manager->GetPowerManagerClient(); |
158 manager_->AddObserver(this); | |
159 client_ = manager_->GetPowerManagerClient(); | |
160 client_->AddObserver(this); | 152 client_->AddObserver(this); |
161 SendCurrentPolicy(); | |
162 } | 153 } |
163 | 154 |
164 void PowerPolicyController::ApplyPrefs(const PrefValues& values) { | 155 void PowerPolicyController::ApplyPrefs(const PrefValues& values) { |
165 prefs_policy_.Clear(); | 156 prefs_policy_.Clear(); |
166 | 157 |
167 power_manager::PowerManagementPolicy::Delays* delays = | 158 power_manager::PowerManagementPolicy::Delays* delays = |
168 prefs_policy_.mutable_ac_delays(); | 159 prefs_policy_.mutable_ac_delays(); |
169 delays->set_screen_dim_ms(values.ac_screen_dim_delay_ms); | 160 delays->set_screen_dim_ms(values.ac_screen_dim_delay_ms); |
170 delays->set_screen_off_ms(values.ac_screen_off_delay_ms); | 161 delays->set_screen_off_ms(values.ac_screen_off_delay_ms); |
171 delays->set_screen_lock_ms(values.ac_screen_lock_delay_ms); | 162 delays->set_screen_lock_ms(values.ac_screen_lock_delay_ms); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 values.user_activity_screen_dim_delay_factor); | 204 values.user_activity_screen_dim_delay_factor); |
214 prefs_policy_.set_wait_for_initial_user_activity( | 205 prefs_policy_.set_wait_for_initial_user_activity( |
215 values.wait_for_initial_user_activity); | 206 values.wait_for_initial_user_activity); |
216 | 207 |
217 honor_screen_wake_locks_ = values.allow_screen_wake_locks; | 208 honor_screen_wake_locks_ = values.allow_screen_wake_locks; |
218 | 209 |
219 prefs_were_set_ = true; | 210 prefs_were_set_ = true; |
220 SendCurrentPolicy(); | 211 SendCurrentPolicy(); |
221 } | 212 } |
222 | 213 |
223 void PowerPolicyController::ClearPrefs() { | |
224 prefs_policy_.Clear(); | |
225 honor_screen_wake_locks_ = true; | |
226 prefs_were_set_ = false; | |
227 SendCurrentPolicy(); | |
228 } | |
229 | |
230 int PowerPolicyController::AddScreenWakeLock(const std::string& reason) { | 214 int PowerPolicyController::AddScreenWakeLock(const std::string& reason) { |
231 int id = next_wake_lock_id_++; | 215 int id = next_wake_lock_id_++; |
232 screen_wake_locks_[id] = reason; | 216 screen_wake_locks_[id] = reason; |
233 SendCurrentPolicy(); | 217 SendCurrentPolicy(); |
234 return id; | 218 return id; |
235 } | 219 } |
236 | 220 |
237 int PowerPolicyController::AddSystemWakeLock(const std::string& reason) { | 221 int PowerPolicyController::AddSystemWakeLock(const std::string& reason) { |
238 int id = next_wake_lock_id_++; | 222 int id = next_wake_lock_id_++; |
239 system_wake_locks_[id] = reason; | 223 system_wake_locks_[id] = reason; |
240 SendCurrentPolicy(); | 224 SendCurrentPolicy(); |
241 return id; | 225 return id; |
242 } | 226 } |
243 | 227 |
244 void PowerPolicyController::RemoveWakeLock(int id) { | 228 void PowerPolicyController::RemoveWakeLock(int id) { |
245 if (!screen_wake_locks_.erase(id) && !system_wake_locks_.erase(id)) | 229 if (!screen_wake_locks_.erase(id) && !system_wake_locks_.erase(id)) |
246 LOG(WARNING) << "Ignoring request to remove nonexistent wake lock " << id; | 230 LOG(WARNING) << "Ignoring request to remove nonexistent wake lock " << id; |
247 else | 231 else |
248 SendCurrentPolicy(); | 232 SendCurrentPolicy(); |
249 } | 233 } |
250 | 234 |
251 void PowerPolicyController::OnDBusThreadManagerDestroying( | |
252 DBusThreadManager* manager) { | |
253 DCHECK_EQ(manager, manager_); | |
254 SendEmptyPolicy(); | |
255 } | |
256 | |
257 void PowerPolicyController::PowerManagerRestarted() { | 235 void PowerPolicyController::PowerManagerRestarted() { |
258 SendCurrentPolicy(); | 236 SendCurrentPolicy(); |
259 } | 237 } |
260 | 238 |
261 void PowerPolicyController::SendCurrentPolicy() { | 239 void PowerPolicyController::SendCurrentPolicy() { |
262 std::string reason; | 240 std::string reason; |
263 | 241 |
264 power_manager::PowerManagementPolicy policy = prefs_policy_; | 242 power_manager::PowerManagementPolicy policy = prefs_policy_; |
265 if (prefs_were_set_) | 243 if (prefs_were_set_) |
266 reason = "Prefs"; | 244 reason = "Prefs"; |
(...skipping 27 matching lines...) Expand all Loading... |
294 for (WakeLockMap::const_iterator it = system_wake_locks_.begin(); | 272 for (WakeLockMap::const_iterator it = system_wake_locks_.begin(); |
295 it != system_wake_locks_.end(); ++it) { | 273 it != system_wake_locks_.end(); ++it) { |
296 reason += (reason.empty() ? "" : ", ") + it->second; | 274 reason += (reason.empty() ? "" : ", ") + it->second; |
297 } | 275 } |
298 | 276 |
299 if (!reason.empty()) | 277 if (!reason.empty()) |
300 policy.set_reason(reason); | 278 policy.set_reason(reason); |
301 client_->SetPolicy(policy); | 279 client_->SetPolicy(policy); |
302 } | 280 } |
303 | 281 |
304 void PowerPolicyController::SendEmptyPolicy() { | |
305 client_->SetPolicy(power_manager::PowerManagementPolicy()); | |
306 } | |
307 | |
308 } // namespace chromeos | 282 } // namespace chromeos |
OLD | NEW |