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

Side by Side Diff: chrome/browser/chromeos/policy/login_screen_power_management_policy.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: Style improvements. 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 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/policy/login_screen_power_management_policy.h"
6
7 #include "base/json/json_reader.h"
8 #include "base/strings/string_number_conversions.h"
9 #include "base/values.h"
10 #include "chrome/browser/policy/policy_error_map.h"
11 #include "chromeos/dbus/power_policy_controller.h"
12 #include "grit/generated_resources.h"
13 #include "policy/policy_constants.h"
14
15 namespace policy {
16
17 namespace {
18 const char kScreenDimDelayAC[] = "AC.Delays.ScreenDim";
19 const char kScreenOffDelayAC[] = "AC.Delays.ScreenOff";
20 const char kIdleDelayAC[] = "AC.Delays.Idle";
21 const char kScreenDimDelayBattery[] = "Battery.Delays.ScreenDim";
22 const char kScreenOffDelayBattery[] = "Battery.Delays.ScreenOff";
23 const char kIdleDelayBattery[] = "Battery.Delays.Idle";
24 const char kIdleActionAC[] = "AC.IdleAction";
25 const char kIdleActionBattery[] = "Battery.IdleAction";
26 const char kLidCloseAction[] = "LidCloseAction";
27 const char kUserActivityScreenDimDelayScale[] =
28 "UserActivityScreenDimDelayScale";
29
30 scoped_ptr<base::Value> GetInteger(const base::DictionaryValue* dict,
31 const std::string& key,
32 PolicyErrorMap* errors) {
33 const base::Value* value;
34 if (!dict->Get(key, &value))
35 return scoped_ptr<base::Value>();
36
37 int integer;
38 if (!value->GetAsInteger(&integer)) {
39 if (errors) {
40 errors->AddError(key::kDeviceLoginScreenPowerManagement,
41 key,
42 IDS_POLICY_TYPE_ERROR,
43 "integer");
44 }
45 return scoped_ptr<base::Value>();
46 }
47
48 return scoped_ptr<base::Value>(new base::FundamentalValue(integer));
49 }
50
51 scoped_ptr<base::Value> GetInteger(const base::DictionaryValue* dict,
52 const std::string& key,
53 int minimum,
54 PolicyErrorMap* errors) {
55 scoped_ptr<base::Value> value = GetInteger(dict, key, errors);
56 int integer;
57 if (!value || !value->GetAsInteger(&integer) || integer >= minimum)
58 return value.Pass();
59
60 if (errors) {
61 errors->AddError(key::kDeviceLoginScreenPowerManagement,
62 key,
63 IDS_POLICY_OUT_OF_RANGE_ERROR,
64 base::IntToString(integer));
65 }
66 return scoped_ptr<base::Value>();
67 }
68
69 scoped_ptr<base::Value> GetAction(const base::DictionaryValue* dict,
70 const std::string& key,
71 PolicyErrorMap* errors) {
72 scoped_ptr<base::Value> value = GetInteger(dict, key, errors);
73 int action;
74 if (!value || !value->GetAsInteger(&action) ||
75 action == chromeos::PowerPolicyController::ACTION_SUSPEND ||
76 action == chromeos::PowerPolicyController::ACTION_SHUT_DOWN ||
77 action == chromeos::PowerPolicyController::ACTION_DO_NOTHING) {
78 return value.Pass();
79 }
80
81 if (errors) {
82 errors->AddError(key::kDeviceLoginScreenPowerManagement,
83 key,
84 IDS_POLICY_OUT_OF_RANGE_ERROR,
85 base::IntToString(action));
86 }
87 return scoped_ptr<base::Value>();
88 }
89
90 } // namespace
91
92 LoginScreenPowerManagementPolicy::LoginScreenPowerManagementPolicy() {
93 }
94
95 LoginScreenPowerManagementPolicy::~LoginScreenPowerManagementPolicy() {
96 }
97
98 bool LoginScreenPowerManagementPolicy::Init(const std::string& json,
99 PolicyErrorMap* errors) {
100 std::string error;
101 scoped_ptr<base::Value> root(base::JSONReader::ReadAndReturnError(
102 json, base::JSON_ALLOW_TRAILING_COMMAS, NULL, &error));
103 base::DictionaryValue* dict = NULL;
104 if (!root || !root->GetAsDictionary(&dict)) {
105 if (errors) {
106 errors->AddError(key::kDeviceLoginScreenPowerManagement,
107 IDS_POLICY_JSON_PARSE_ERROR,
108 error);
109 }
110 // Errors in JSON decoding are fatal.
111 return false;
112 }
113
114 screen_dim_delay_ac_ = GetInteger(dict, kScreenDimDelayAC, 0, errors);
115 screen_off_delay_ac_ = GetInteger(dict, kScreenOffDelayAC, 0, errors);
116 idle_delay_ac_ = GetInteger(dict, kIdleDelayAC, 0, errors);
117 screen_dim_delay_battery_ =
118 GetInteger(dict, kScreenDimDelayBattery, 0, errors);
119 screen_off_delay_battery_ =
120 GetInteger(dict, kScreenOffDelayBattery, 0, errors);
121 idle_delay_battery_ = GetInteger(dict, kIdleDelayBattery, 0, errors);
122 idle_action_ac_ = GetAction(dict, kIdleActionAC, errors);
123 idle_action_battery_ = GetAction(dict, kIdleActionBattery, errors);
124 lid_close_action_ = GetAction(dict, kLidCloseAction, errors);
125 user_activity_screen_dim_delay_scale_ =
126 GetInteger(dict, kUserActivityScreenDimDelayScale, 100, errors);
127
128 // Validation errors for individual power policies are non-fatal as other
129 // power policies that pass validation will still be applied.
130 return true;
131 }
132
133 const base::Value*
134 LoginScreenPowerManagementPolicy::GetScreenDimDelayAC() const {
135 return screen_dim_delay_ac_.get();
136 }
137
138 const base::Value*
139 LoginScreenPowerManagementPolicy::GetScreenOffDelayAC() const {
140 return screen_off_delay_ac_.get();
141 }
142
143 const base::Value* LoginScreenPowerManagementPolicy::GetIdleDelayAC() const {
144 return idle_delay_ac_.get();
145 }
146
147 const base::Value*
148 LoginScreenPowerManagementPolicy::GetScreenDimDelayBattery() const {
149 return screen_dim_delay_battery_.get();
150 }
151
152 const base::Value*
153 LoginScreenPowerManagementPolicy::GetScreenOffDelayBattery() const {
154 return screen_off_delay_battery_.get();
155 }
156
157 const base::Value*
158 LoginScreenPowerManagementPolicy::GetIdleDelayBattery() const {
159 return idle_delay_battery_.get();
160 }
161
162 const base::Value* LoginScreenPowerManagementPolicy::GetIdleActionAC() const {
163 return idle_action_ac_.get();
164 }
165
166 const base::Value*
167 LoginScreenPowerManagementPolicy::GetIdleActionBattery() const {
168 return idle_action_battery_.get();
169 }
170
171 const base::Value* LoginScreenPowerManagementPolicy::GetLidCloseAction() const {
172 return lid_close_action_.get();
173 }
174
175 const base::Value* LoginScreenPowerManagementPolicy::
176 GetUserActivityScreenDimDelayScale() const {
177 return user_activity_screen_dim_delay_scale_.get();
178 }
179
180 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698