OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/chromeos/policy/device_policy_decoder_chromeos.h" | 5 #include "chrome/browser/chromeos/policy/device_policy_decoder_chromeos.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
11 #include "base/json/json_reader.h" | 11 #include "base/json/json_reader.h" |
12 #include "base/logging.h" | 12 #include "base/logging.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
| 14 #include "base/memory/ptr_util.h" |
14 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
15 #include "base/values.h" | 16 #include "base/values.h" |
16 #include "chrome/browser/browser_process.h" | 17 #include "chrome/browser/browser_process.h" |
17 #include "chrome/browser/chromeos/policy/device_local_account.h" | 18 #include "chrome/browser/chromeos/policy/device_local_account.h" |
18 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" | 19 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" |
19 #include "chromeos/dbus/dbus_thread_manager.h" | 20 #include "chromeos/dbus/dbus_thread_manager.h" |
20 #include "chromeos/dbus/update_engine_client.h" | 21 #include "chromeos/dbus/update_engine_client.h" |
21 #include "chromeos/settings/cros_settings_names.h" | 22 #include "chromeos/settings/cros_settings_names.h" |
22 #include "components/policy/core/browser/browser_policy_connector.h" | 23 #include "components/policy/core/browser/browser_policy_connector.h" |
23 #include "components/policy/core/common/external_data_fetcher.h" | 24 #include "components/policy/core/common/external_data_fetcher.h" |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 } | 89 } |
89 } else { | 90 } else { |
90 LOG(WARNING) << "Unknown or invalid policy schema for " << policy_name | 91 LOG(WARNING) << "Unknown or invalid policy schema for " << policy_name |
91 << "."; | 92 << "."; |
92 return std::unique_ptr<base::Value>(); | 93 return std::unique_ptr<base::Value>(); |
93 } | 94 } |
94 | 95 |
95 return root; | 96 return root; |
96 } | 97 } |
97 | 98 |
98 base::Value* DecodeConnectionType(int value) { | 99 std::unique_ptr<base::Value> DecodeConnectionType(int value) { |
99 static const char* const kConnectionTypes[] = { | 100 static const char* const kConnectionTypes[] = { |
100 shill::kTypeEthernet, | 101 shill::kTypeEthernet, |
101 shill::kTypeWifi, | 102 shill::kTypeWifi, |
102 shill::kTypeWimax, | 103 shill::kTypeWimax, |
103 shill::kTypeBluetooth, | 104 shill::kTypeBluetooth, |
104 shill::kTypeCellular, | 105 shill::kTypeCellular, |
105 }; | 106 }; |
106 | 107 |
107 if (value < 0 || value >= static_cast<int>(arraysize(kConnectionTypes))) | 108 if (value < 0 || value >= static_cast<int>(arraysize(kConnectionTypes))) |
108 return NULL; | 109 return nullptr; |
109 | 110 |
110 return new base::StringValue(kConnectionTypes[value]); | 111 return base::WrapUnique(new base::StringValue(kConnectionTypes[value])); |
111 } | 112 } |
112 | 113 |
113 void DecodeLoginPolicies(const em::ChromeDeviceSettingsProto& policy, | 114 void DecodeLoginPolicies(const em::ChromeDeviceSettingsProto& policy, |
114 PolicyMap* policies) { | 115 PolicyMap* policies) { |
115 if (policy.has_guest_mode_enabled()) { | 116 if (policy.has_guest_mode_enabled()) { |
116 const em::GuestModeEnabledProto& container(policy.guest_mode_enabled()); | 117 const em::GuestModeEnabledProto& container(policy.guest_mode_enabled()); |
117 if (container.has_guest_mode_enabled()) { | 118 if (container.has_guest_mode_enabled()) { |
118 policies->Set(key::kDeviceGuestModeEnabled, | 119 policies->Set(key::kDeviceGuestModeEnabled, POLICY_LEVEL_MANDATORY, |
119 POLICY_LEVEL_MANDATORY, | 120 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
120 POLICY_SCOPE_MACHINE, | 121 base::WrapUnique(new base::FundamentalValue( |
121 POLICY_SOURCE_CLOUD, | 122 container.guest_mode_enabled())), |
122 new base::FundamentalValue( | 123 nullptr); |
123 container.guest_mode_enabled()), | |
124 NULL); | |
125 } | 124 } |
126 } | 125 } |
127 | 126 |
128 if (policy.has_reboot_on_shutdown()) { | 127 if (policy.has_reboot_on_shutdown()) { |
129 const em::RebootOnShutdownProto& container(policy.reboot_on_shutdown()); | 128 const em::RebootOnShutdownProto& container(policy.reboot_on_shutdown()); |
130 if (container.has_reboot_on_shutdown()) { | 129 if (container.has_reboot_on_shutdown()) { |
131 policies->Set(key::kDeviceRebootOnShutdown, POLICY_LEVEL_MANDATORY, | 130 policies->Set(key::kDeviceRebootOnShutdown, POLICY_LEVEL_MANDATORY, |
132 POLICY_SCOPE_MACHINE, | 131 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
133 POLICY_SOURCE_CLOUD, | 132 base::WrapUnique(new base::FundamentalValue( |
134 new base::FundamentalValue(container.reboot_on_shutdown()), | 133 container.reboot_on_shutdown())), |
135 NULL); | 134 nullptr); |
136 } | 135 } |
137 } | 136 } |
138 | 137 |
139 if (policy.has_show_user_names()) { | 138 if (policy.has_show_user_names()) { |
140 const em::ShowUserNamesOnSigninProto& container(policy.show_user_names()); | 139 const em::ShowUserNamesOnSigninProto& container(policy.show_user_names()); |
141 if (container.has_show_user_names()) { | 140 if (container.has_show_user_names()) { |
142 policies->Set(key::kDeviceShowUserNamesOnSignin, | 141 policies->Set(key::kDeviceShowUserNamesOnSignin, POLICY_LEVEL_MANDATORY, |
143 POLICY_LEVEL_MANDATORY, | 142 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
144 POLICY_SCOPE_MACHINE, | 143 base::WrapUnique(new base::FundamentalValue( |
145 POLICY_SOURCE_CLOUD, | 144 container.show_user_names())), |
146 new base::FundamentalValue( | 145 nullptr); |
147 container.show_user_names()), | |
148 NULL); | |
149 } | 146 } |
150 } | 147 } |
151 | 148 |
152 if (policy.has_allow_new_users()) { | 149 if (policy.has_allow_new_users()) { |
153 const em::AllowNewUsersProto& container(policy.allow_new_users()); | 150 const em::AllowNewUsersProto& container(policy.allow_new_users()); |
154 if (container.has_allow_new_users()) { | 151 if (container.has_allow_new_users()) { |
155 policies->Set(key::kDeviceAllowNewUsers, | 152 policies->Set(key::kDeviceAllowNewUsers, POLICY_LEVEL_MANDATORY, |
156 POLICY_LEVEL_MANDATORY, | 153 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
157 POLICY_SCOPE_MACHINE, | 154 base::WrapUnique(new base::FundamentalValue( |
158 POLICY_SOURCE_CLOUD, | 155 container.allow_new_users())), |
159 new base::FundamentalValue( | 156 nullptr); |
160 container.allow_new_users()), | |
161 NULL); | |
162 } | 157 } |
163 } | 158 } |
164 | 159 |
165 if (policy.has_user_whitelist()) { | 160 if (policy.has_user_whitelist()) { |
166 const em::UserWhitelistProto& container(policy.user_whitelist()); | 161 const em::UserWhitelistProto& container(policy.user_whitelist()); |
167 base::ListValue* whitelist = new base::ListValue(); | 162 std::unique_ptr<base::ListValue> whitelist(new base::ListValue); |
168 RepeatedPtrField<std::string>::const_iterator entry; | 163 for (const auto& entry : container.user_whitelist()) |
169 for (entry = container.user_whitelist().begin(); | 164 whitelist->Append(new base::StringValue(entry)); |
170 entry != container.user_whitelist().end(); | 165 policies->Set(key::kDeviceUserWhitelist, POLICY_LEVEL_MANDATORY, |
171 ++entry) { | 166 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
172 whitelist->Append(new base::StringValue(*entry)); | 167 std::move(whitelist), nullptr); |
173 } | |
174 policies->Set(key::kDeviceUserWhitelist, | |
175 POLICY_LEVEL_MANDATORY, | |
176 POLICY_SCOPE_MACHINE, | |
177 POLICY_SOURCE_CLOUD, | |
178 whitelist, | |
179 NULL); | |
180 } | 168 } |
181 | 169 |
182 if (policy.has_ephemeral_users_enabled()) { | 170 if (policy.has_ephemeral_users_enabled()) { |
183 const em::EphemeralUsersEnabledProto& container( | 171 const em::EphemeralUsersEnabledProto& container( |
184 policy.ephemeral_users_enabled()); | 172 policy.ephemeral_users_enabled()); |
185 if (container.has_ephemeral_users_enabled()) { | 173 if (container.has_ephemeral_users_enabled()) { |
186 policies->Set(key::kDeviceEphemeralUsersEnabled, | 174 policies->Set(key::kDeviceEphemeralUsersEnabled, POLICY_LEVEL_MANDATORY, |
187 POLICY_LEVEL_MANDATORY, | 175 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
188 POLICY_SCOPE_MACHINE, | 176 base::WrapUnique(new base::FundamentalValue( |
189 POLICY_SOURCE_CLOUD, | 177 container.ephemeral_users_enabled())), |
190 new base::FundamentalValue( | 178 nullptr); |
191 container.ephemeral_users_enabled()), | |
192 NULL); | |
193 } | 179 } |
194 } | 180 } |
195 | 181 |
196 if (policy.has_device_local_accounts()) { | 182 if (policy.has_device_local_accounts()) { |
197 const em::DeviceLocalAccountsProto& container( | 183 const em::DeviceLocalAccountsProto& container( |
198 policy.device_local_accounts()); | 184 policy.device_local_accounts()); |
199 const RepeatedPtrField<em::DeviceLocalAccountInfoProto>& accounts = | 185 const RepeatedPtrField<em::DeviceLocalAccountInfoProto>& accounts = |
200 container.account(); | 186 container.account(); |
201 std::unique_ptr<base::ListValue> account_list(new base::ListValue()); | 187 std::unique_ptr<base::ListValue> account_list(new base::ListValue()); |
202 RepeatedPtrField<em::DeviceLocalAccountInfoProto>::const_iterator entry; | 188 for (const auto& entry : accounts) { |
203 for (entry = accounts.begin(); entry != accounts.end(); ++entry) { | |
204 std::unique_ptr<base::DictionaryValue> entry_dict( | 189 std::unique_ptr<base::DictionaryValue> entry_dict( |
205 new base::DictionaryValue()); | 190 new base::DictionaryValue()); |
206 if (entry->has_type()) { | 191 if (entry.has_type()) { |
207 if (entry->has_account_id()) { | 192 if (entry.has_account_id()) { |
208 entry_dict->SetStringWithoutPathExpansion( | 193 entry_dict->SetStringWithoutPathExpansion( |
209 chromeos::kAccountsPrefDeviceLocalAccountsKeyId, | 194 chromeos::kAccountsPrefDeviceLocalAccountsKeyId, |
210 entry->account_id()); | 195 entry.account_id()); |
211 } | 196 } |
212 entry_dict->SetIntegerWithoutPathExpansion( | 197 entry_dict->SetIntegerWithoutPathExpansion( |
213 chromeos::kAccountsPrefDeviceLocalAccountsKeyType, entry->type()); | 198 chromeos::kAccountsPrefDeviceLocalAccountsKeyType, entry.type()); |
214 if (entry->kiosk_app().has_app_id()) { | 199 if (entry.kiosk_app().has_app_id()) { |
215 entry_dict->SetStringWithoutPathExpansion( | 200 entry_dict->SetStringWithoutPathExpansion( |
216 chromeos::kAccountsPrefDeviceLocalAccountsKeyKioskAppId, | 201 chromeos::kAccountsPrefDeviceLocalAccountsKeyKioskAppId, |
217 entry->kiosk_app().app_id()); | 202 entry.kiosk_app().app_id()); |
218 } | 203 } |
219 if (entry->kiosk_app().has_update_url()) { | 204 if (entry.kiosk_app().has_update_url()) { |
220 entry_dict->SetStringWithoutPathExpansion( | 205 entry_dict->SetStringWithoutPathExpansion( |
221 chromeos::kAccountsPrefDeviceLocalAccountsKeyKioskAppUpdateURL, | 206 chromeos::kAccountsPrefDeviceLocalAccountsKeyKioskAppUpdateURL, |
222 entry->kiosk_app().update_url()); | 207 entry.kiosk_app().update_url()); |
223 } | 208 } |
224 } else if (entry->has_deprecated_public_session_id()) { | 209 } else if (entry.has_deprecated_public_session_id()) { |
225 // Deprecated public session specification. | 210 // Deprecated public session specification. |
226 entry_dict->SetStringWithoutPathExpansion( | 211 entry_dict->SetStringWithoutPathExpansion( |
227 chromeos::kAccountsPrefDeviceLocalAccountsKeyId, | 212 chromeos::kAccountsPrefDeviceLocalAccountsKeyId, |
228 entry->deprecated_public_session_id()); | 213 entry.deprecated_public_session_id()); |
229 entry_dict->SetIntegerWithoutPathExpansion( | 214 entry_dict->SetIntegerWithoutPathExpansion( |
230 chromeos::kAccountsPrefDeviceLocalAccountsKeyType, | 215 chromeos::kAccountsPrefDeviceLocalAccountsKeyType, |
231 DeviceLocalAccount::TYPE_PUBLIC_SESSION); | 216 DeviceLocalAccount::TYPE_PUBLIC_SESSION); |
232 } | 217 } |
233 account_list->Append(entry_dict.release()); | 218 account_list->Append(std::move(entry_dict)); |
234 } | 219 } |
235 policies->Set(key::kDeviceLocalAccounts, | 220 policies->Set(key::kDeviceLocalAccounts, POLICY_LEVEL_MANDATORY, |
236 POLICY_LEVEL_MANDATORY, | 221 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
237 POLICY_SCOPE_MACHINE, | 222 std::move(account_list), nullptr); |
238 POLICY_SOURCE_CLOUD, | |
239 account_list.release(), | |
240 NULL); | |
241 if (container.has_auto_login_id()) { | 223 if (container.has_auto_login_id()) { |
242 policies->Set(key::kDeviceLocalAccountAutoLoginId, | 224 policies->Set( |
243 POLICY_LEVEL_MANDATORY, | 225 key::kDeviceLocalAccountAutoLoginId, POLICY_LEVEL_MANDATORY, |
244 POLICY_SCOPE_MACHINE, | 226 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
245 POLICY_SOURCE_CLOUD, | 227 base::WrapUnique(new base::StringValue(container.auto_login_id())), |
246 new base::StringValue(container.auto_login_id()), | 228 nullptr); |
247 NULL); | |
248 } | 229 } |
249 if (container.has_auto_login_delay()) { | 230 if (container.has_auto_login_delay()) { |
250 policies->Set(key::kDeviceLocalAccountAutoLoginDelay, | 231 policies->Set(key::kDeviceLocalAccountAutoLoginDelay, |
251 POLICY_LEVEL_MANDATORY, | 232 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
252 POLICY_SCOPE_MACHINE, | |
253 POLICY_SOURCE_CLOUD, | 233 POLICY_SOURCE_CLOUD, |
254 DecodeIntegerValue(container.auto_login_delay()).release(), | 234 DecodeIntegerValue(container.auto_login_delay()), nullptr); |
255 NULL); | |
256 } | 235 } |
257 if (container.has_enable_auto_login_bailout()) { | 236 if (container.has_enable_auto_login_bailout()) { |
258 policies->Set(key::kDeviceLocalAccountAutoLoginBailoutEnabled, | 237 policies->Set(key::kDeviceLocalAccountAutoLoginBailoutEnabled, |
259 POLICY_LEVEL_MANDATORY, | 238 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
260 POLICY_SCOPE_MACHINE, | |
261 POLICY_SOURCE_CLOUD, | 239 POLICY_SOURCE_CLOUD, |
262 new base::FundamentalValue( | 240 base::WrapUnique(new base::FundamentalValue( |
263 container.enable_auto_login_bailout()), | 241 container.enable_auto_login_bailout())), |
264 NULL); | 242 nullptr); |
265 } | 243 } |
266 if (container.has_prompt_for_network_when_offline()) { | 244 if (container.has_prompt_for_network_when_offline()) { |
267 policies->Set(key::kDeviceLocalAccountPromptForNetworkWhenOffline, | 245 policies->Set(key::kDeviceLocalAccountPromptForNetworkWhenOffline, |
268 POLICY_LEVEL_MANDATORY, | 246 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
269 POLICY_SCOPE_MACHINE, | |
270 POLICY_SOURCE_CLOUD, | 247 POLICY_SOURCE_CLOUD, |
271 new base::FundamentalValue( | 248 base::WrapUnique(new base::FundamentalValue( |
272 container.prompt_for_network_when_offline()), | 249 container.prompt_for_network_when_offline())), |
273 NULL); | 250 nullptr); |
274 } | 251 } |
275 } | 252 } |
276 | 253 |
277 if (policy.has_supervised_users_settings()) { | 254 if (policy.has_supervised_users_settings()) { |
278 const em::SupervisedUsersSettingsProto& container = | 255 const em::SupervisedUsersSettingsProto& container = |
279 policy.supervised_users_settings(); | 256 policy.supervised_users_settings(); |
280 if (container.has_supervised_users_enabled()) { | 257 if (container.has_supervised_users_enabled()) { |
281 base::Value* value = new base::FundamentalValue( | 258 policies->Set(key::kSupervisedUsersEnabled, POLICY_LEVEL_MANDATORY, |
282 container.supervised_users_enabled()); | 259 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
283 policies->Set(key::kSupervisedUsersEnabled, | 260 base::WrapUnique(new base::FundamentalValue( |
284 POLICY_LEVEL_MANDATORY, | 261 container.supervised_users_enabled())), |
285 POLICY_SCOPE_MACHINE, | 262 nullptr); |
286 POLICY_SOURCE_CLOUD, | |
287 value, | |
288 NULL); | |
289 } | 263 } |
290 } | 264 } |
291 | 265 |
292 if (policy.has_saml_settings()) { | 266 if (policy.has_saml_settings()) { |
293 const em::SAMLSettingsProto& container(policy.saml_settings()); | 267 const em::SAMLSettingsProto& container(policy.saml_settings()); |
294 if (container.has_transfer_saml_cookies()) { | 268 if (container.has_transfer_saml_cookies()) { |
295 policies->Set(key::kDeviceTransferSAMLCookies, | 269 policies->Set(key::kDeviceTransferSAMLCookies, POLICY_LEVEL_MANDATORY, |
296 POLICY_LEVEL_MANDATORY, | 270 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
297 POLICY_SCOPE_MACHINE, | 271 base::WrapUnique(new base::FundamentalValue( |
298 POLICY_SOURCE_CLOUD, | 272 container.transfer_saml_cookies())), |
299 new base::FundamentalValue( | 273 nullptr); |
300 container.transfer_saml_cookies()), | |
301 NULL); | |
302 } | 274 } |
303 } | 275 } |
304 | 276 |
305 if (policy.has_login_authentication_behavior()) { | 277 if (policy.has_login_authentication_behavior()) { |
306 const em::LoginAuthenticationBehaviorProto& container( | 278 const em::LoginAuthenticationBehaviorProto& container( |
307 policy.login_authentication_behavior()); | 279 policy.login_authentication_behavior()); |
308 if (container.has_login_authentication_behavior()) { | 280 if (container.has_login_authentication_behavior()) { |
309 policies->Set(key::kLoginAuthenticationBehavior, | 281 policies->Set( |
310 POLICY_LEVEL_MANDATORY, | 282 key::kLoginAuthenticationBehavior, POLICY_LEVEL_MANDATORY, |
311 POLICY_SCOPE_MACHINE, | 283 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
312 POLICY_SOURCE_CLOUD, | 284 DecodeIntegerValue(container.login_authentication_behavior()), |
313 DecodeIntegerValue( | 285 nullptr); |
314 container.login_authentication_behavior()).release(), | |
315 nullptr); | |
316 } | 286 } |
317 } | 287 } |
318 | 288 |
319 if (policy.has_allow_bluetooth()) { | 289 if (policy.has_allow_bluetooth()) { |
320 const em::AllowBluetoothProto& container(policy.allow_bluetooth()); | 290 const em::AllowBluetoothProto& container(policy.allow_bluetooth()); |
321 if (container.has_allow_bluetooth()) { | 291 if (container.has_allow_bluetooth()) { |
322 policies->Set(key::kDeviceAllowBluetooth, POLICY_LEVEL_MANDATORY, | 292 policies->Set(key::kDeviceAllowBluetooth, POLICY_LEVEL_MANDATORY, |
323 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, | 293 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
324 new base::FundamentalValue(container.allow_bluetooth()), | 294 base::WrapUnique(new base::FundamentalValue( |
| 295 container.allow_bluetooth())), |
325 nullptr); | 296 nullptr); |
326 } | 297 } |
327 } | 298 } |
328 | 299 |
329 if (policy.has_login_video_capture_allowed_urls()) { | 300 if (policy.has_login_video_capture_allowed_urls()) { |
330 const em::LoginVideoCaptureAllowedUrlsProto& container( | 301 const em::LoginVideoCaptureAllowedUrlsProto& container( |
331 policy.login_video_capture_allowed_urls()); | 302 policy.login_video_capture_allowed_urls()); |
332 std::unique_ptr<base::ListValue> urls(new base::ListValue()); | 303 std::unique_ptr<base::ListValue> urls(new base::ListValue()); |
333 for (const auto& entry : container.urls()) { | 304 for (const auto& entry : container.urls()) { |
334 urls->Append(new base::StringValue(entry)); | 305 urls->Append(new base::StringValue(entry)); |
335 } | 306 } |
336 policies->Set(key::kLoginVideoCaptureAllowedUrls, POLICY_LEVEL_MANDATORY, | 307 policies->Set(key::kLoginVideoCaptureAllowedUrls, POLICY_LEVEL_MANDATORY, |
337 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, urls.release(), | 308 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(urls), |
338 nullptr); | 309 nullptr); |
339 } | 310 } |
340 } | 311 } |
341 | 312 |
342 void DecodeNetworkPolicies(const em::ChromeDeviceSettingsProto& policy, | 313 void DecodeNetworkPolicies(const em::ChromeDeviceSettingsProto& policy, |
343 PolicyMap* policies) { | 314 PolicyMap* policies) { |
344 if (policy.has_data_roaming_enabled()) { | 315 if (policy.has_data_roaming_enabled()) { |
345 const em::DataRoamingEnabledProto& container(policy.data_roaming_enabled()); | 316 const em::DataRoamingEnabledProto& container(policy.data_roaming_enabled()); |
346 if (container.has_data_roaming_enabled()) { | 317 if (container.has_data_roaming_enabled()) { |
347 policies->Set(key::kDeviceDataRoamingEnabled, | 318 policies->Set(key::kDeviceDataRoamingEnabled, POLICY_LEVEL_MANDATORY, |
348 POLICY_LEVEL_MANDATORY, | 319 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
349 POLICY_SCOPE_MACHINE, | 320 base::WrapUnique(new base::FundamentalValue( |
350 POLICY_SOURCE_CLOUD, | 321 container.data_roaming_enabled())), |
351 new base::FundamentalValue( | 322 nullptr); |
352 container.data_roaming_enabled()), | |
353 NULL); | |
354 } | 323 } |
355 } | 324 } |
356 | 325 |
357 if (policy.has_open_network_configuration() && | 326 if (policy.has_open_network_configuration() && |
358 policy.open_network_configuration().has_open_network_configuration()) { | 327 policy.open_network_configuration().has_open_network_configuration()) { |
359 std::string config( | 328 std::string config( |
360 policy.open_network_configuration().open_network_configuration()); | 329 policy.open_network_configuration().open_network_configuration()); |
361 policies->Set(key::kDeviceOpenNetworkConfiguration, | 330 policies->Set(key::kDeviceOpenNetworkConfiguration, POLICY_LEVEL_MANDATORY, |
362 POLICY_LEVEL_MANDATORY, | 331 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
363 POLICY_SCOPE_MACHINE, | 332 base::WrapUnique(new base::StringValue(config)), nullptr); |
364 POLICY_SOURCE_CLOUD, | |
365 new base::StringValue(config), | |
366 NULL); | |
367 } | 333 } |
368 } | 334 } |
369 | 335 |
370 void DecodeReportingPolicies(const em::ChromeDeviceSettingsProto& policy, | 336 void DecodeReportingPolicies(const em::ChromeDeviceSettingsProto& policy, |
371 PolicyMap* policies) { | 337 PolicyMap* policies) { |
372 if (policy.has_device_reporting()) { | 338 if (policy.has_device_reporting()) { |
373 const em::DeviceReportingProto& container(policy.device_reporting()); | 339 const em::DeviceReportingProto& container(policy.device_reporting()); |
374 if (container.has_report_version_info()) { | 340 if (container.has_report_version_info()) { |
375 policies->Set(key::kReportDeviceVersionInfo, | 341 policies->Set(key::kReportDeviceVersionInfo, POLICY_LEVEL_MANDATORY, |
376 POLICY_LEVEL_MANDATORY, | 342 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
377 POLICY_SCOPE_MACHINE, | 343 base::WrapUnique(new base::FundamentalValue( |
378 POLICY_SOURCE_CLOUD, | 344 container.report_version_info())), |
379 new base::FundamentalValue( | 345 nullptr); |
380 container.report_version_info()), | |
381 NULL); | |
382 } | 346 } |
383 if (container.has_report_activity_times()) { | 347 if (container.has_report_activity_times()) { |
384 policies->Set(key::kReportDeviceActivityTimes, | 348 policies->Set(key::kReportDeviceActivityTimes, POLICY_LEVEL_MANDATORY, |
385 POLICY_LEVEL_MANDATORY, | 349 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
386 POLICY_SCOPE_MACHINE, | 350 base::WrapUnique(new base::FundamentalValue( |
387 POLICY_SOURCE_CLOUD, | 351 container.report_activity_times())), |
388 new base::FundamentalValue( | 352 nullptr); |
389 container.report_activity_times()), | |
390 NULL); | |
391 } | 353 } |
392 if (container.has_report_boot_mode()) { | 354 if (container.has_report_boot_mode()) { |
393 policies->Set(key::kReportDeviceBootMode, | 355 policies->Set(key::kReportDeviceBootMode, POLICY_LEVEL_MANDATORY, |
394 POLICY_LEVEL_MANDATORY, | 356 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
395 POLICY_SCOPE_MACHINE, | 357 base::WrapUnique(new base::FundamentalValue( |
396 POLICY_SOURCE_CLOUD, | 358 container.report_boot_mode())), |
397 new base::FundamentalValue( | 359 nullptr); |
398 container.report_boot_mode()), | |
399 NULL); | |
400 } | 360 } |
401 if (container.has_report_location()) { | 361 if (container.has_report_location()) { |
402 policies->Set(key::kReportDeviceLocation, | 362 policies->Set(key::kReportDeviceLocation, POLICY_LEVEL_MANDATORY, |
403 POLICY_LEVEL_MANDATORY, | 363 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
404 POLICY_SCOPE_MACHINE, | 364 base::WrapUnique(new base::FundamentalValue( |
405 POLICY_SOURCE_CLOUD, | 365 container.report_location())), |
406 new base::FundamentalValue( | 366 nullptr); |
407 container.report_location()), | |
408 NULL); | |
409 } | 367 } |
410 if (container.has_report_network_interfaces()) { | 368 if (container.has_report_network_interfaces()) { |
411 policies->Set(key::kReportDeviceNetworkInterfaces, | 369 policies->Set(key::kReportDeviceNetworkInterfaces, POLICY_LEVEL_MANDATORY, |
412 POLICY_LEVEL_MANDATORY, | 370 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
413 POLICY_SCOPE_MACHINE, | 371 base::WrapUnique(new base::FundamentalValue( |
414 POLICY_SOURCE_CLOUD, | 372 container.report_network_interfaces())), |
415 new base::FundamentalValue( | 373 nullptr); |
416 container.report_network_interfaces()), | |
417 NULL); | |
418 } | 374 } |
419 if (container.has_report_users()) { | 375 if (container.has_report_users()) { |
420 policies->Set(key::kReportDeviceUsers, | 376 policies->Set(key::kReportDeviceUsers, POLICY_LEVEL_MANDATORY, |
421 POLICY_LEVEL_MANDATORY, | 377 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
422 POLICY_SCOPE_MACHINE, | 378 base::WrapUnique( |
423 POLICY_SOURCE_CLOUD, | 379 new base::FundamentalValue(container.report_users())), |
424 new base::FundamentalValue(container.report_users()), | 380 nullptr); |
425 NULL); | |
426 } | 381 } |
427 if (container.has_report_hardware_status()) { | 382 if (container.has_report_hardware_status()) { |
428 policies->Set(key::kReportDeviceHardwareStatus, | 383 policies->Set(key::kReportDeviceHardwareStatus, POLICY_LEVEL_MANDATORY, |
429 POLICY_LEVEL_MANDATORY, | 384 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
430 POLICY_SCOPE_MACHINE, | 385 base::WrapUnique(new base::FundamentalValue( |
431 POLICY_SOURCE_CLOUD, | 386 container.report_hardware_status())), |
432 new base::FundamentalValue( | 387 nullptr); |
433 container.report_hardware_status()), | |
434 NULL); | |
435 } | 388 } |
436 if (container.has_report_session_status()) { | 389 if (container.has_report_session_status()) { |
437 policies->Set(key::kReportDeviceSessionStatus, | 390 policies->Set(key::kReportDeviceSessionStatus, POLICY_LEVEL_MANDATORY, |
438 POLICY_LEVEL_MANDATORY, | 391 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
439 POLICY_SCOPE_MACHINE, | 392 base::WrapUnique(new base::FundamentalValue( |
440 POLICY_SOURCE_CLOUD, | 393 container.report_session_status())), |
441 new base::FundamentalValue( | 394 nullptr); |
442 container.report_session_status()), | |
443 NULL); | |
444 } | 395 } |
445 if (container.has_device_status_frequency()) { | 396 if (container.has_device_status_frequency()) { |
446 policies->Set(key::kReportUploadFrequency, | 397 policies->Set(key::kReportUploadFrequency, POLICY_LEVEL_MANDATORY, |
447 POLICY_LEVEL_MANDATORY, | 398 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
448 POLICY_SCOPE_MACHINE, | 399 DecodeIntegerValue(container.device_status_frequency()), |
449 POLICY_SOURCE_CLOUD, | 400 nullptr); |
450 DecodeIntegerValue( | |
451 container.device_status_frequency()).release(), | |
452 NULL); | |
453 } | 401 } |
454 } | 402 } |
455 | 403 |
456 if (policy.has_device_heartbeat_settings()) { | 404 if (policy.has_device_heartbeat_settings()) { |
457 const em::DeviceHeartbeatSettingsProto& container( | 405 const em::DeviceHeartbeatSettingsProto& container( |
458 policy.device_heartbeat_settings()); | 406 policy.device_heartbeat_settings()); |
459 if (container.has_heartbeat_enabled()) { | 407 if (container.has_heartbeat_enabled()) { |
460 policies->Set(key::kHeartbeatEnabled, | 408 policies->Set(key::kHeartbeatEnabled, POLICY_LEVEL_MANDATORY, |
461 POLICY_LEVEL_MANDATORY, | 409 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
462 POLICY_SCOPE_MACHINE, | 410 base::WrapUnique(new base::FundamentalValue( |
463 POLICY_SOURCE_CLOUD, | 411 container.heartbeat_enabled())), |
464 new base::FundamentalValue( | 412 nullptr); |
465 container.heartbeat_enabled()), | |
466 NULL); | |
467 } | 413 } |
468 if (container.has_heartbeat_frequency()) { | 414 if (container.has_heartbeat_frequency()) { |
469 policies->Set(key::kHeartbeatFrequency, | 415 policies->Set(key::kHeartbeatFrequency, POLICY_LEVEL_MANDATORY, |
470 POLICY_LEVEL_MANDATORY, | 416 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
471 POLICY_SCOPE_MACHINE, | 417 DecodeIntegerValue(container.heartbeat_frequency()), |
472 POLICY_SOURCE_CLOUD, | 418 nullptr); |
473 DecodeIntegerValue( | |
474 container.heartbeat_frequency()).release(), | |
475 NULL); | |
476 } | 419 } |
477 } | 420 } |
478 | 421 |
479 if (policy.has_device_log_upload_settings()) { | 422 if (policy.has_device_log_upload_settings()) { |
480 const em::DeviceLogUploadSettingsProto& container( | 423 const em::DeviceLogUploadSettingsProto& container( |
481 policy.device_log_upload_settings()); | 424 policy.device_log_upload_settings()); |
482 if (container.has_system_log_upload_enabled()) { | 425 if (container.has_system_log_upload_enabled()) { |
483 policies->Set( | 426 policies->Set(key::kLogUploadEnabled, POLICY_LEVEL_MANDATORY, |
484 key::kLogUploadEnabled, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, | 427 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
485 POLICY_SOURCE_CLOUD, | 428 base::WrapUnique(new base::FundamentalValue( |
486 new base::FundamentalValue(container.system_log_upload_enabled()), | 429 container.system_log_upload_enabled())), |
487 NULL); | 430 nullptr); |
488 } | 431 } |
489 } | 432 } |
490 } | 433 } |
491 | 434 |
492 void DecodeAutoUpdatePolicies(const em::ChromeDeviceSettingsProto& policy, | 435 void DecodeAutoUpdatePolicies(const em::ChromeDeviceSettingsProto& policy, |
493 PolicyMap* policies) { | 436 PolicyMap* policies) { |
494 if (policy.has_release_channel()) { | 437 if (policy.has_release_channel()) { |
495 const em::ReleaseChannelProto& container(policy.release_channel()); | 438 const em::ReleaseChannelProto& container(policy.release_channel()); |
496 if (container.has_release_channel()) { | 439 if (container.has_release_channel()) { |
497 std::string channel(container.release_channel()); | 440 std::string channel(container.release_channel()); |
498 policies->Set(key::kChromeOsReleaseChannel, | 441 policies->Set(key::kChromeOsReleaseChannel, POLICY_LEVEL_MANDATORY, |
499 POLICY_LEVEL_MANDATORY, | 442 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
500 POLICY_SCOPE_MACHINE, | 443 base::WrapUnique(new base::StringValue(channel)), nullptr); |
501 POLICY_SOURCE_CLOUD, | |
502 new base::StringValue(channel), | |
503 NULL); | |
504 // TODO(dubroy): Once http://crosbug.com/17015 is implemented, we won't | 444 // TODO(dubroy): Once http://crosbug.com/17015 is implemented, we won't |
505 // have to pass the channel in here, only ping the update engine to tell | 445 // have to pass the channel in here, only ping the update engine to tell |
506 // it to fetch the channel from the policy. | 446 // it to fetch the channel from the policy. |
507 chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()-> | 447 chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()-> |
508 SetChannel(channel, false); | 448 SetChannel(channel, false); |
509 } | 449 } |
510 if (container.has_release_channel_delegated()) { | 450 if (container.has_release_channel_delegated()) { |
511 policies->Set(key::kChromeOsReleaseChannelDelegated, | 451 policies->Set(key::kChromeOsReleaseChannelDelegated, |
512 POLICY_LEVEL_MANDATORY, | 452 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
513 POLICY_SCOPE_MACHINE, | |
514 POLICY_SOURCE_CLOUD, | 453 POLICY_SOURCE_CLOUD, |
515 new base::FundamentalValue( | 454 base::WrapUnique(new base::FundamentalValue( |
516 container.release_channel_delegated()), | 455 container.release_channel_delegated())), |
517 NULL); | 456 nullptr); |
518 } | 457 } |
519 } | 458 } |
520 | 459 |
521 if (policy.has_auto_update_settings()) { | 460 if (policy.has_auto_update_settings()) { |
522 const em::AutoUpdateSettingsProto& container(policy.auto_update_settings()); | 461 const em::AutoUpdateSettingsProto& container(policy.auto_update_settings()); |
523 if (container.has_update_disabled()) { | 462 if (container.has_update_disabled()) { |
524 policies->Set(key::kDeviceAutoUpdateDisabled, | 463 policies->Set(key::kDeviceAutoUpdateDisabled, POLICY_LEVEL_MANDATORY, |
525 POLICY_LEVEL_MANDATORY, | 464 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
526 POLICY_SCOPE_MACHINE, | 465 base::WrapUnique(new base::FundamentalValue( |
527 POLICY_SOURCE_CLOUD, | 466 container.update_disabled())), |
528 new base::FundamentalValue( | 467 nullptr); |
529 container.update_disabled()), | |
530 NULL); | |
531 } | 468 } |
532 | 469 |
533 if (container.has_target_version_prefix()) { | 470 if (container.has_target_version_prefix()) { |
534 policies->Set(key::kDeviceTargetVersionPrefix, | 471 policies->Set(key::kDeviceTargetVersionPrefix, POLICY_LEVEL_MANDATORY, |
535 POLICY_LEVEL_MANDATORY, | 472 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
536 POLICY_SCOPE_MACHINE, | 473 base::WrapUnique(new base::StringValue( |
537 POLICY_SOURCE_CLOUD, | 474 container.target_version_prefix())), |
538 new base::StringValue( | 475 nullptr); |
539 container.target_version_prefix()), | |
540 NULL); | |
541 } | 476 } |
542 | 477 |
543 // target_version_display_name is not actually a policy, but a display | 478 // target_version_display_name is not actually a policy, but a display |
544 // string for target_version_prefix, so we ignore it. | 479 // string for target_version_prefix, so we ignore it. |
545 | 480 |
546 if (container.has_scatter_factor_in_seconds()) { | 481 if (container.has_scatter_factor_in_seconds()) { |
547 policies->Set(key::kDeviceUpdateScatterFactor, | 482 // TODO(dcheng): Shouldn't this use DecodeIntegerValue? |
548 POLICY_LEVEL_MANDATORY, | 483 policies->Set( |
549 POLICY_SCOPE_MACHINE, | 484 key::kDeviceUpdateScatterFactor, POLICY_LEVEL_MANDATORY, |
550 POLICY_SOURCE_CLOUD, | 485 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
551 new base::FundamentalValue(static_cast<int>( | 486 base::WrapUnique(new base::FundamentalValue( |
552 container.scatter_factor_in_seconds())), | 487 static_cast<int>(container.scatter_factor_in_seconds()))), |
553 NULL); | 488 nullptr); |
554 } | 489 } |
555 | 490 |
556 if (container.allowed_connection_types_size()) { | 491 if (container.allowed_connection_types_size()) { |
557 base::ListValue* allowed_connection_types = new base::ListValue(); | 492 std::unique_ptr<base::ListValue> allowed_connection_types( |
558 RepeatedField<int>::const_iterator entry; | 493 new base::ListValue); |
559 for (entry = container.allowed_connection_types().begin(); | 494 for (const auto& entry : container.allowed_connection_types()) { |
560 entry != container.allowed_connection_types().end(); | 495 std::unique_ptr<base::Value> value = DecodeConnectionType(entry); |
561 ++entry) { | |
562 base::Value* value = DecodeConnectionType(*entry); | |
563 if (value) | 496 if (value) |
564 allowed_connection_types->Append(value); | 497 allowed_connection_types->Append(std::move(value)); |
565 } | 498 } |
566 policies->Set(key::kDeviceUpdateAllowedConnectionTypes, | 499 policies->Set(key::kDeviceUpdateAllowedConnectionTypes, |
567 POLICY_LEVEL_MANDATORY, | 500 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
568 POLICY_SCOPE_MACHINE, | 501 POLICY_SOURCE_CLOUD, std::move(allowed_connection_types), |
569 POLICY_SOURCE_CLOUD, | 502 nullptr); |
570 allowed_connection_types, | |
571 NULL); | |
572 } | 503 } |
573 | 504 |
574 if (container.has_http_downloads_enabled()) { | 505 if (container.has_http_downloads_enabled()) { |
575 policies->Set( | 506 policies->Set( |
576 key::kDeviceUpdateHttpDownloadsEnabled, | 507 key::kDeviceUpdateHttpDownloadsEnabled, POLICY_LEVEL_MANDATORY, |
577 POLICY_LEVEL_MANDATORY, | 508 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
578 POLICY_SCOPE_MACHINE, | 509 base::WrapUnique( |
579 POLICY_SOURCE_CLOUD, | 510 new base::FundamentalValue(container.http_downloads_enabled())), |
580 new base::FundamentalValue(container.http_downloads_enabled()), | 511 nullptr); |
581 NULL); | |
582 } | 512 } |
583 | 513 |
584 if (container.has_reboot_after_update()) { | 514 if (container.has_reboot_after_update()) { |
585 policies->Set(key::kRebootAfterUpdate, | 515 policies->Set(key::kRebootAfterUpdate, POLICY_LEVEL_MANDATORY, |
586 POLICY_LEVEL_MANDATORY, | 516 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
587 POLICY_SCOPE_MACHINE, | 517 base::WrapUnique(new base::FundamentalValue( |
588 POLICY_SOURCE_CLOUD, | 518 container.reboot_after_update())), |
589 new base::FundamentalValue( | 519 nullptr); |
590 container.reboot_after_update()), | |
591 NULL); | |
592 } | 520 } |
593 | 521 |
594 if (container.has_p2p_enabled()) { | 522 if (container.has_p2p_enabled()) { |
595 policies->Set(key::kDeviceAutoUpdateP2PEnabled, | 523 policies->Set( |
596 POLICY_LEVEL_MANDATORY, | 524 key::kDeviceAutoUpdateP2PEnabled, POLICY_LEVEL_MANDATORY, |
597 POLICY_SCOPE_MACHINE, | 525 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
598 POLICY_SOURCE_CLOUD, | 526 base::WrapUnique(new base::FundamentalValue(container.p2p_enabled())), |
599 new base::FundamentalValue(container.p2p_enabled()), | 527 nullptr); |
600 NULL); | |
601 } | 528 } |
602 } | 529 } |
603 | 530 |
604 if (policy.has_allow_kiosk_app_control_chrome_version()) { | 531 if (policy.has_allow_kiosk_app_control_chrome_version()) { |
605 const em::AllowKioskAppControlChromeVersionProto& container( | 532 const em::AllowKioskAppControlChromeVersionProto& container( |
606 policy.allow_kiosk_app_control_chrome_version()); | 533 policy.allow_kiosk_app_control_chrome_version()); |
607 if (container.has_allow_kiosk_app_control_chrome_version()) { | 534 if (container.has_allow_kiosk_app_control_chrome_version()) { |
608 policies->Set(key::kAllowKioskAppControlChromeVersion, | 535 policies->Set(key::kAllowKioskAppControlChromeVersion, |
609 POLICY_LEVEL_MANDATORY, | 536 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
610 POLICY_SCOPE_MACHINE, | |
611 POLICY_SOURCE_CLOUD, | 537 POLICY_SOURCE_CLOUD, |
612 new base::FundamentalValue( | 538 base::WrapUnique(new base::FundamentalValue( |
613 container.allow_kiosk_app_control_chrome_version()), | 539 container.allow_kiosk_app_control_chrome_version())), |
614 NULL); | 540 nullptr); |
615 } | 541 } |
616 } | 542 } |
617 } | 543 } |
618 | 544 |
619 void DecodeAccessibilityPolicies(const em::ChromeDeviceSettingsProto& policy, | 545 void DecodeAccessibilityPolicies(const em::ChromeDeviceSettingsProto& policy, |
620 PolicyMap* policies) { | 546 PolicyMap* policies) { |
621 if (policy.has_accessibility_settings()) { | 547 if (policy.has_accessibility_settings()) { |
622 const em::AccessibilitySettingsProto& | 548 const em::AccessibilitySettingsProto& |
623 container(policy.accessibility_settings()); | 549 container(policy.accessibility_settings()); |
624 | 550 |
625 if (container.has_login_screen_default_large_cursor_enabled()) { | 551 if (container.has_login_screen_default_large_cursor_enabled()) { |
626 policies->Set( | 552 policies->Set(key::kDeviceLoginScreenDefaultLargeCursorEnabled, |
627 key::kDeviceLoginScreenDefaultLargeCursorEnabled, | 553 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
628 POLICY_LEVEL_MANDATORY, | 554 POLICY_SOURCE_CLOUD, |
629 POLICY_SCOPE_MACHINE, | 555 base::WrapUnique(new base::FundamentalValue( |
630 POLICY_SOURCE_CLOUD, | 556 container.login_screen_default_large_cursor_enabled())), |
631 new base::FundamentalValue( | 557 nullptr); |
632 container.login_screen_default_large_cursor_enabled()), | |
633 NULL); | |
634 } | 558 } |
635 | 559 |
636 if (container.has_login_screen_default_spoken_feedback_enabled()) { | 560 if (container.has_login_screen_default_spoken_feedback_enabled()) { |
637 policies->Set( | 561 policies->Set( |
638 key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled, | 562 key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled, |
639 POLICY_LEVEL_MANDATORY, | 563 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
640 POLICY_SCOPE_MACHINE, | 564 base::WrapUnique(new base::FundamentalValue( |
641 POLICY_SOURCE_CLOUD, | 565 container.login_screen_default_spoken_feedback_enabled())), |
642 new base::FundamentalValue( | 566 nullptr); |
643 container.login_screen_default_spoken_feedback_enabled()), | |
644 NULL); | |
645 } | 567 } |
646 | 568 |
647 if (container.has_login_screen_default_high_contrast_enabled()) { | 569 if (container.has_login_screen_default_high_contrast_enabled()) { |
648 policies->Set( | 570 policies->Set( |
649 key::kDeviceLoginScreenDefaultHighContrastEnabled, | 571 key::kDeviceLoginScreenDefaultHighContrastEnabled, |
650 POLICY_LEVEL_MANDATORY, | 572 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
651 POLICY_SCOPE_MACHINE, | 573 base::WrapUnique(new base::FundamentalValue( |
652 POLICY_SOURCE_CLOUD, | 574 container.login_screen_default_high_contrast_enabled())), |
653 new base::FundamentalValue( | 575 nullptr); |
654 container.login_screen_default_high_contrast_enabled()), | |
655 NULL); | |
656 } | 576 } |
657 | 577 |
658 if (container.has_login_screen_default_screen_magnifier_type()) { | 578 if (container.has_login_screen_default_screen_magnifier_type()) { |
659 policies->Set( | 579 policies->Set(key::kDeviceLoginScreenDefaultScreenMagnifierType, |
660 key::kDeviceLoginScreenDefaultScreenMagnifierType, | 580 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
661 POLICY_LEVEL_MANDATORY, | 581 POLICY_SOURCE_CLOUD, |
662 POLICY_SCOPE_MACHINE, | 582 DecodeIntegerValue( |
663 POLICY_SOURCE_CLOUD, | 583 container.login_screen_default_screen_magnifier_type()), |
664 DecodeIntegerValue( | 584 nullptr); |
665 container.login_screen_default_screen_magnifier_type()).release(), | |
666 NULL); | |
667 } | 585 } |
668 | 586 |
669 if (container.has_login_screen_default_virtual_keyboard_enabled()) { | 587 if (container.has_login_screen_default_virtual_keyboard_enabled()) { |
670 policies->Set( | 588 policies->Set( |
671 key::kDeviceLoginScreenDefaultVirtualKeyboardEnabled, | 589 key::kDeviceLoginScreenDefaultVirtualKeyboardEnabled, |
672 POLICY_LEVEL_MANDATORY, | 590 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
673 POLICY_SCOPE_MACHINE, | 591 base::WrapUnique(new base::FundamentalValue( |
674 POLICY_SOURCE_CLOUD, | 592 container.login_screen_default_virtual_keyboard_enabled())), |
675 new base::FundamentalValue( | 593 nullptr); |
676 container.login_screen_default_virtual_keyboard_enabled()), | |
677 NULL); | |
678 } | 594 } |
679 } | 595 } |
680 } | 596 } |
681 | 597 |
682 void DecodeGenericPolicies(const em::ChromeDeviceSettingsProto& policy, | 598 void DecodeGenericPolicies(const em::ChromeDeviceSettingsProto& policy, |
683 PolicyMap* policies) { | 599 PolicyMap* policies) { |
684 if (policy.has_device_policy_refresh_rate()) { | 600 if (policy.has_device_policy_refresh_rate()) { |
685 const em::DevicePolicyRefreshRateProto& container( | 601 const em::DevicePolicyRefreshRateProto& container( |
686 policy.device_policy_refresh_rate()); | 602 policy.device_policy_refresh_rate()); |
687 if (container.has_device_policy_refresh_rate()) { | 603 if (container.has_device_policy_refresh_rate()) { |
688 policies->Set( | 604 policies->Set(key::kDevicePolicyRefreshRate, POLICY_LEVEL_MANDATORY, |
689 key::kDevicePolicyRefreshRate, | 605 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
690 POLICY_LEVEL_MANDATORY, | 606 DecodeIntegerValue(container.device_policy_refresh_rate()), |
691 POLICY_SCOPE_MACHINE, | 607 nullptr); |
692 POLICY_SOURCE_CLOUD, | |
693 DecodeIntegerValue(container.device_policy_refresh_rate()).release(), | |
694 NULL); | |
695 } | 608 } |
696 } | 609 } |
697 | 610 |
698 if (policy.has_metrics_enabled()) { | 611 if (policy.has_metrics_enabled()) { |
699 const em::MetricsEnabledProto& container(policy.metrics_enabled()); | 612 const em::MetricsEnabledProto& container(policy.metrics_enabled()); |
700 if (container.has_metrics_enabled()) { | 613 if (container.has_metrics_enabled()) { |
701 policies->Set(key::kDeviceMetricsReportingEnabled, | 614 policies->Set(key::kDeviceMetricsReportingEnabled, POLICY_LEVEL_MANDATORY, |
702 POLICY_LEVEL_MANDATORY, | 615 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
703 POLICY_SCOPE_MACHINE, | 616 base::WrapUnique(new base::FundamentalValue( |
704 POLICY_SOURCE_CLOUD, | 617 container.metrics_enabled())), |
705 new base::FundamentalValue( | 618 nullptr); |
706 container.metrics_enabled()), | |
707 NULL); | |
708 } | 619 } |
709 } | 620 } |
710 | 621 |
711 if (policy.has_system_timezone()) { | 622 if (policy.has_system_timezone()) { |
712 if (policy.system_timezone().has_timezone()) { | 623 if (policy.system_timezone().has_timezone()) { |
713 policies->Set(key::kSystemTimezone, | 624 policies->Set(key::kSystemTimezone, POLICY_LEVEL_MANDATORY, |
714 POLICY_LEVEL_MANDATORY, | 625 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
715 POLICY_SCOPE_MACHINE, | 626 base::WrapUnique(new base::StringValue( |
716 POLICY_SOURCE_CLOUD, | 627 policy.system_timezone().timezone())), |
717 new base::StringValue( | 628 nullptr); |
718 policy.system_timezone().timezone()), | |
719 NULL); | |
720 } | 629 } |
721 | 630 |
722 if (policy.system_timezone().has_timezone_detection_type()) { | 631 if (policy.system_timezone().has_timezone_detection_type()) { |
723 std::unique_ptr<base::Value> value(DecodeIntegerValue( | 632 std::unique_ptr<base::Value> value(DecodeIntegerValue( |
724 policy.system_timezone().timezone_detection_type())); | 633 policy.system_timezone().timezone_detection_type())); |
725 if (value) { | 634 if (value) { |
726 policies->Set(key::kSystemTimezoneAutomaticDetection, | 635 policies->Set(key::kSystemTimezoneAutomaticDetection, |
727 POLICY_LEVEL_MANDATORY, | 636 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
728 POLICY_SCOPE_MACHINE, | 637 POLICY_SOURCE_CLOUD, std::move(value), nullptr); |
729 POLICY_SOURCE_CLOUD, | |
730 value.release(), | |
731 nullptr); | |
732 } | 638 } |
733 } | 639 } |
734 } | 640 } |
735 | 641 |
736 if (policy.has_use_24hour_clock()) { | 642 if (policy.has_use_24hour_clock()) { |
737 if (policy.use_24hour_clock().has_use_24hour_clock()) { | 643 if (policy.use_24hour_clock().has_use_24hour_clock()) { |
738 policies->Set(key::kSystemUse24HourClock, | 644 policies->Set(key::kSystemUse24HourClock, POLICY_LEVEL_MANDATORY, |
739 POLICY_LEVEL_MANDATORY, | 645 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
740 POLICY_SCOPE_MACHINE, | 646 base::WrapUnique(new base::FundamentalValue( |
741 POLICY_SOURCE_CLOUD, | 647 policy.use_24hour_clock().use_24hour_clock())), |
742 new base::FundamentalValue( | 648 nullptr); |
743 policy.use_24hour_clock().use_24hour_clock()), | |
744 NULL); | |
745 } | 649 } |
746 } | 650 } |
747 | 651 |
748 if (policy.has_allow_redeem_offers()) { | 652 if (policy.has_allow_redeem_offers()) { |
749 const em::AllowRedeemChromeOsRegistrationOffersProto& container( | 653 const em::AllowRedeemChromeOsRegistrationOffersProto& container( |
750 policy.allow_redeem_offers()); | 654 policy.allow_redeem_offers()); |
751 if (container.has_allow_redeem_offers()) { | 655 if (container.has_allow_redeem_offers()) { |
752 policies->Set(key::kDeviceAllowRedeemChromeOsRegistrationOffers, | 656 policies->Set( |
753 POLICY_LEVEL_MANDATORY, | 657 key::kDeviceAllowRedeemChromeOsRegistrationOffers, |
754 POLICY_SCOPE_MACHINE, | 658 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
755 POLICY_SOURCE_CLOUD, | 659 base::WrapUnique( |
756 new base::FundamentalValue( | 660 new base::FundamentalValue(container.allow_redeem_offers())), |
757 container.allow_redeem_offers()), | 661 nullptr); |
758 NULL); | |
759 } | 662 } |
760 } | 663 } |
761 | 664 |
762 if (policy.has_uptime_limit()) { | 665 if (policy.has_uptime_limit()) { |
763 const em::UptimeLimitProto& container(policy.uptime_limit()); | 666 const em::UptimeLimitProto& container(policy.uptime_limit()); |
764 if (container.has_uptime_limit()) { | 667 if (container.has_uptime_limit()) { |
765 policies->Set(key::kUptimeLimit, | 668 policies->Set(key::kUptimeLimit, POLICY_LEVEL_MANDATORY, |
766 POLICY_LEVEL_MANDATORY, | 669 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
767 POLICY_SCOPE_MACHINE, | 670 DecodeIntegerValue(container.uptime_limit()), nullptr); |
768 POLICY_SOURCE_CLOUD, | |
769 DecodeIntegerValue(container.uptime_limit()).release(), | |
770 NULL); | |
771 } | 671 } |
772 } | 672 } |
773 | 673 |
774 if (policy.has_start_up_flags()) { | 674 if (policy.has_start_up_flags()) { |
775 const em::StartUpFlagsProto& container(policy.start_up_flags()); | 675 const em::StartUpFlagsProto& container(policy.start_up_flags()); |
776 base::ListValue* flags = new base::ListValue(); | 676 std::unique_ptr<base::ListValue> flags(new base::ListValue()); |
777 RepeatedPtrField<std::string>::const_iterator entry; | 677 for (const auto& entry : container.flags()) |
778 for (entry = container.flags().begin(); | 678 flags->Append(base::WrapUnique(new base::StringValue(entry))); |
779 entry != container.flags().end(); | 679 policies->Set(key::kDeviceStartUpFlags, POLICY_LEVEL_MANDATORY, |
780 ++entry) { | 680 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(flags), |
781 flags->Append(new base::StringValue(*entry)); | 681 nullptr); |
782 } | |
783 policies->Set(key::kDeviceStartUpFlags, | |
784 POLICY_LEVEL_MANDATORY, | |
785 POLICY_SCOPE_MACHINE, | |
786 POLICY_SOURCE_CLOUD, | |
787 flags, | |
788 NULL); | |
789 } | 682 } |
790 | 683 |
791 if (policy.has_variations_parameter()) { | 684 if (policy.has_variations_parameter()) { |
792 if (policy.variations_parameter().has_parameter()) { | 685 if (policy.variations_parameter().has_parameter()) { |
793 policies->Set(key::kDeviceVariationsRestrictParameter, | 686 policies->Set( |
794 POLICY_LEVEL_MANDATORY, | 687 key::kDeviceVariationsRestrictParameter, POLICY_LEVEL_MANDATORY, |
795 POLICY_SCOPE_MACHINE, | 688 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
796 POLICY_SOURCE_CLOUD, | 689 base::WrapUnique( |
797 new base::StringValue( | 690 new base::StringValue(policy.variations_parameter().parameter())), |
798 policy.variations_parameter().parameter()), | 691 nullptr); |
799 NULL); | |
800 } | 692 } |
801 } | 693 } |
802 | 694 |
803 if (policy.has_attestation_settings()) { | 695 if (policy.has_attestation_settings()) { |
804 if (policy.attestation_settings().has_attestation_enabled()) { | 696 if (policy.attestation_settings().has_attestation_enabled()) { |
805 policies->Set(key::kAttestationEnabledForDevice, | 697 policies->Set(key::kAttestationEnabledForDevice, POLICY_LEVEL_MANDATORY, |
806 POLICY_LEVEL_MANDATORY, | 698 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
807 POLICY_SCOPE_MACHINE, | 699 base::WrapUnique(new base::FundamentalValue( |
808 POLICY_SOURCE_CLOUD, | 700 policy.attestation_settings().attestation_enabled())), |
809 new base::FundamentalValue( | 701 nullptr); |
810 policy.attestation_settings().attestation_enabled()), | |
811 NULL); | |
812 } | 702 } |
813 if (policy.attestation_settings().has_content_protection_enabled()) { | 703 if (policy.attestation_settings().has_content_protection_enabled()) { |
814 policies->Set( | 704 policies->Set( |
815 key::kAttestationForContentProtectionEnabled, | 705 key::kAttestationForContentProtectionEnabled, POLICY_LEVEL_MANDATORY, |
816 POLICY_LEVEL_MANDATORY, | 706 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
817 POLICY_SCOPE_MACHINE, | 707 base::WrapUnique(new base::FundamentalValue( |
818 POLICY_SOURCE_CLOUD, | 708 policy.attestation_settings().content_protection_enabled())), |
819 new base::FundamentalValue( | 709 nullptr); |
820 policy.attestation_settings().content_protection_enabled()), | |
821 NULL); | |
822 } | 710 } |
823 } | 711 } |
824 | 712 |
825 if (policy.has_login_screen_power_management()) { | 713 if (policy.has_login_screen_power_management()) { |
826 const em::LoginScreenPowerManagementProto& container( | 714 const em::LoginScreenPowerManagementProto& container( |
827 policy.login_screen_power_management()); | 715 policy.login_screen_power_management()); |
828 if (container.has_login_screen_power_management()) { | 716 if (container.has_login_screen_power_management()) { |
829 std::unique_ptr<base::Value> decoded_json; | 717 std::unique_ptr<base::Value> decoded_json; |
830 decoded_json = DecodeJsonStringAndDropUnknownBySchema( | 718 decoded_json = DecodeJsonStringAndDropUnknownBySchema( |
831 container.login_screen_power_management(), | 719 container.login_screen_power_management(), |
832 key::kDeviceLoginScreenPowerManagement); | 720 key::kDeviceLoginScreenPowerManagement); |
833 if (decoded_json) { | 721 if (decoded_json) { |
834 policies->Set(key::kDeviceLoginScreenPowerManagement, | 722 policies->Set(key::kDeviceLoginScreenPowerManagement, |
835 POLICY_LEVEL_MANDATORY, | 723 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
836 POLICY_SCOPE_MACHINE, | 724 POLICY_SOURCE_CLOUD, std::move(decoded_json), nullptr); |
837 POLICY_SOURCE_CLOUD, | |
838 decoded_json.release(), | |
839 NULL); | |
840 } | 725 } |
841 } | 726 } |
842 } | 727 } |
843 | 728 |
844 if (policy.has_system_settings()) { | 729 if (policy.has_system_settings()) { |
845 const em::SystemSettingsProto& container(policy.system_settings()); | 730 const em::SystemSettingsProto& container(policy.system_settings()); |
846 if (container.has_block_devmode()) { | 731 if (container.has_block_devmode()) { |
847 policies->Set( | 732 policies->Set(key::kDeviceBlockDevmode, POLICY_LEVEL_MANDATORY, |
848 key::kDeviceBlockDevmode, | 733 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
849 POLICY_LEVEL_MANDATORY, | 734 base::WrapUnique( |
850 POLICY_SCOPE_MACHINE, | 735 new base::FundamentalValue(container.block_devmode())), |
851 POLICY_SOURCE_CLOUD, | 736 nullptr); |
852 new base::FundamentalValue(container.block_devmode()), | |
853 NULL); | |
854 } | 737 } |
855 } | 738 } |
856 | 739 |
857 if (policy.has_extension_cache_size()) { | 740 if (policy.has_extension_cache_size()) { |
858 const em::ExtensionCacheSizeProto& container(policy.extension_cache_size()); | 741 const em::ExtensionCacheSizeProto& container(policy.extension_cache_size()); |
859 if (container.has_extension_cache_size()) { | 742 if (container.has_extension_cache_size()) { |
860 policies->Set( | 743 policies->Set(key::kExtensionCacheSize, POLICY_LEVEL_MANDATORY, |
861 key::kExtensionCacheSize, | 744 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
862 POLICY_LEVEL_MANDATORY, | 745 DecodeIntegerValue(container.extension_cache_size()), |
863 POLICY_SCOPE_MACHINE, | 746 nullptr); |
864 POLICY_SOURCE_CLOUD, | |
865 DecodeIntegerValue(container.extension_cache_size()).release(), | |
866 nullptr); | |
867 } | 747 } |
868 } | 748 } |
869 | 749 |
870 if (policy.has_login_screen_domain_auto_complete()) { | 750 if (policy.has_login_screen_domain_auto_complete()) { |
871 const em::LoginScreenDomainAutoCompleteProto& container( | 751 const em::LoginScreenDomainAutoCompleteProto& container( |
872 policy.login_screen_domain_auto_complete()); | 752 policy.login_screen_domain_auto_complete()); |
873 policies->Set( | 753 policies->Set(key::kDeviceLoginScreenDomainAutoComplete, |
874 key::kDeviceLoginScreenDomainAutoComplete, | 754 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
875 POLICY_LEVEL_MANDATORY, | 755 POLICY_SOURCE_CLOUD, |
876 POLICY_SCOPE_MACHINE, | 756 base::WrapUnique(new base::StringValue( |
877 POLICY_SOURCE_CLOUD, | 757 container.login_screen_domain_auto_complete())), |
878 new base::StringValue(container.login_screen_domain_auto_complete()), | 758 nullptr); |
879 nullptr); | |
880 } | 759 } |
881 | 760 |
882 if (policy.has_display_rotation_default()) { | 761 if (policy.has_display_rotation_default()) { |
883 const em::DisplayRotationDefaultProto& container( | 762 const em::DisplayRotationDefaultProto& container( |
884 policy.display_rotation_default()); | 763 policy.display_rotation_default()); |
885 policies->Set( | 764 policies->Set(key::kDisplayRotationDefault, POLICY_LEVEL_MANDATORY, |
886 key::kDisplayRotationDefault, | 765 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
887 POLICY_LEVEL_MANDATORY, | 766 DecodeIntegerValue(container.display_rotation_default()), |
888 POLICY_SCOPE_MACHINE, | 767 nullptr); |
889 POLICY_SOURCE_CLOUD, | |
890 DecodeIntegerValue(container.display_rotation_default()).release(), | |
891 nullptr); | |
892 } | 768 } |
893 | 769 |
894 if (policy.has_usb_detachable_whitelist()) { | 770 if (policy.has_usb_detachable_whitelist()) { |
895 const em::UsbDetachableWhitelistProto& container( | 771 const em::UsbDetachableWhitelistProto& container( |
896 policy.usb_detachable_whitelist()); | 772 policy.usb_detachable_whitelist()); |
897 base::ListValue* whitelist = new base::ListValue(); | 773 std::unique_ptr<base::ListValue> whitelist(new base::ListValue); |
898 RepeatedPtrField<em::UsbDeviceIdProto>::const_iterator entry; | 774 for (const auto& entry : container.id()) { |
899 for (entry = container.id().begin(); entry != container.id().end(); | 775 std::unique_ptr<base::DictionaryValue> ids(new base::DictionaryValue()); |
900 ++entry) { | 776 if (entry.has_vendor_id()) { |
901 base::DictionaryValue* ids = new base::DictionaryValue(); | 777 ids->SetString("vid", base::StringPrintf("%04X", entry.vendor_id())); |
902 if (entry->has_vendor_id()) { | |
903 ids->SetString("vid", base::StringPrintf("%04X", entry->vendor_id())); | |
904 } | 778 } |
905 if (entry->has_product_id()) { | 779 if (entry.has_product_id()) { |
906 ids->SetString("pid", base::StringPrintf("%04X", entry->product_id())); | 780 ids->SetString("pid", base::StringPrintf("%04X", entry.product_id())); |
907 } | 781 } |
908 whitelist->Append(ids); | 782 whitelist->Append(std::move(ids)); |
909 } | 783 } |
910 policies->Set(key::kUsbDetachableWhitelist, POLICY_LEVEL_MANDATORY, | 784 policies->Set(key::kUsbDetachableWhitelist, POLICY_LEVEL_MANDATORY, |
911 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, whitelist, | 785 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
912 nullptr); | 786 std::move(whitelist), nullptr); |
913 } | 787 } |
914 | 788 |
915 if (policy.has_quirks_download_enabled()) { | 789 if (policy.has_quirks_download_enabled()) { |
916 const em::DeviceQuirksDownloadEnabledProto& container( | 790 const em::DeviceQuirksDownloadEnabledProto& container( |
917 policy.quirks_download_enabled()); | 791 policy.quirks_download_enabled()); |
918 if (container.has_quirks_download_enabled()) { | 792 if (container.has_quirks_download_enabled()) { |
919 policies->Set( | 793 policies->Set(key::kDeviceQuirksDownloadEnabled, POLICY_LEVEL_MANDATORY, |
920 key::kDeviceQuirksDownloadEnabled, | 794 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, |
921 POLICY_LEVEL_MANDATORY, | 795 base::WrapUnique(new base::FundamentalValue( |
922 POLICY_SCOPE_MACHINE, | 796 container.quirks_download_enabled())), |
923 POLICY_SOURCE_CLOUD, | 797 nullptr); |
924 new base::FundamentalValue(container.quirks_download_enabled()), | |
925 nullptr); | |
926 } | 798 } |
927 } | 799 } |
928 } | 800 } |
929 | 801 |
930 } // namespace | 802 } // namespace |
931 | 803 |
932 void DecodeDevicePolicy(const em::ChromeDeviceSettingsProto& policy, | 804 void DecodeDevicePolicy(const em::ChromeDeviceSettingsProto& policy, |
933 PolicyMap* policies) { | 805 PolicyMap* policies) { |
934 // Decode the various groups of policies. | 806 // Decode the various groups of policies. |
935 DecodeLoginPolicies(policy, policies); | 807 DecodeLoginPolicies(policy, policies); |
936 DecodeNetworkPolicies(policy, policies); | 808 DecodeNetworkPolicies(policy, policies); |
937 DecodeReportingPolicies(policy, policies); | 809 DecodeReportingPolicies(policy, policies); |
938 DecodeAutoUpdatePolicies(policy, policies); | 810 DecodeAutoUpdatePolicies(policy, policies); |
939 DecodeAccessibilityPolicies(policy, policies); | 811 DecodeAccessibilityPolicies(policy, policies); |
940 DecodeGenericPolicies(policy, policies); | 812 DecodeGenericPolicies(policy, policies); |
941 } | 813 } |
942 | 814 |
943 } // namespace policy | 815 } // namespace policy |
OLD | NEW |