Chromium Code Reviews| 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/device_settings_provider.h" | 5 #include "chrome/browser/chromeos/device_settings_provider.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 38 | 38 |
| 39 // List of settings handled by the DeviceSettingsProvider. | 39 // List of settings handled by the DeviceSettingsProvider. |
| 40 const char* kKnownSettings[] = { | 40 const char* kKnownSettings[] = { |
| 41 kAccountsPrefAllowGuest, | 41 kAccountsPrefAllowGuest, |
| 42 kAccountsPrefAllowNewUser, | 42 kAccountsPrefAllowNewUser, |
| 43 kAccountsPrefEphemeralUsersEnabled, | 43 kAccountsPrefEphemeralUsersEnabled, |
| 44 kAccountsPrefShowUserNamesOnSignIn, | 44 kAccountsPrefShowUserNamesOnSignIn, |
| 45 kAccountsPrefUsers, | 45 kAccountsPrefUsers, |
| 46 kAppPack, | 46 kAppPack, |
| 47 kDeviceOwner, | 47 kDeviceOwner, |
| 48 kIdleLogoutTimeout, | |
| 49 kIdleLogoutWarningDuration, | |
| 48 kReleaseChannel, | 50 kReleaseChannel, |
| 49 kReportDeviceActivityTimes, | 51 kReportDeviceActivityTimes, |
| 50 kReportDeviceBootMode, | 52 kReportDeviceBootMode, |
| 51 kReportDeviceVersionInfo, | 53 kReportDeviceVersionInfo, |
| 54 kScreenSaverExtensionId, | |
| 55 kScreenSaverTimeout, | |
| 52 kSettingProxyEverywhere, | 56 kSettingProxyEverywhere, |
| 53 kSignedDataRoamingEnabled, | 57 kSignedDataRoamingEnabled, |
| 54 kStatsReportingPref, | 58 kStatsReportingPref, |
| 55 }; | 59 }; |
| 56 | 60 |
| 57 // Upper bound for number of retries to fetch a signed setting. | 61 // Upper bound for number of retries to fetch a signed setting. |
| 58 static const int kNumRetriesLimit = 9; | 62 static const int kNumRetriesLimit = 9; |
| 59 | 63 |
| 60 // Legacy policy file location. Used to detect migration from pre v12 ChromeOS. | 64 // Legacy policy file location. Used to detect migration from pre v12 ChromeOS. |
| 61 const char kLegacyPolicyFile[] = "/var/lib/whitelist/preferences"; | 65 const char kLegacyPolicyFile[] = "/var/lib/whitelist/preferences"; |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 268 em::EphemeralUsersEnabledProto* ephemeral_users_enabled = | 272 em::EphemeralUsersEnabledProto* ephemeral_users_enabled = |
| 269 pol.mutable_ephemeral_users_enabled(); | 273 pol.mutable_ephemeral_users_enabled(); |
| 270 bool ephemeral_users_enabled_value = false; | 274 bool ephemeral_users_enabled_value = false; |
| 271 if (value->GetAsBoolean(&ephemeral_users_enabled_value)) | 275 if (value->GetAsBoolean(&ephemeral_users_enabled_value)) |
| 272 ephemeral_users_enabled->set_ephemeral_users_enabled( | 276 ephemeral_users_enabled->set_ephemeral_users_enabled( |
| 273 ephemeral_users_enabled_value); | 277 ephemeral_users_enabled_value); |
| 274 else | 278 else |
| 275 NOTREACHED(); | 279 NOTREACHED(); |
| 276 } else { | 280 } else { |
| 277 // The remaining settings don't support Set(), since they are not | 281 // The remaining settings don't support Set(), since they are not |
| 278 // intended to be customizable by the user: | 282 // intended to be customizable by the user yet: |
|
Mattias Nissler (ping if slow)
2012/03/01 19:58:10
The yet is not accurate. Put it in parens at least
pastarmovj
2012/03/05 17:02:55
Done.
| |
| 279 // kAppPack | 283 // kAppPack |
| 284 // kIdleLogoutTimeout, | |
| 285 // kIdleLogoutWarningDuration, | |
| 280 // kReportDeviceVersionInfo | 286 // kReportDeviceVersionInfo |
| 281 // kReportDeviceActivityTimes | 287 // kReportDeviceActivityTimes |
| 282 // kReportDeviceBootMode | 288 // kReportDeviceBootMode |
| 289 // kScreenSaverExtensionId, | |
| 290 // kScreenSaverTimeout, | |
| 291 | |
| 283 NOTREACHED(); | 292 NOTREACHED(); |
| 284 } | 293 } |
| 285 data.set_policy_value(pol.SerializeAsString()); | 294 data.set_policy_value(pol.SerializeAsString()); |
| 286 // Set the cache to the updated value. | 295 // Set the cache to the updated value. |
| 287 policy_ = data; | 296 policy_ = data; |
| 288 UpdateValuesCache(); | 297 UpdateValuesCache(); |
| 289 | 298 |
| 290 if (!signed_settings_cache::Store(data, g_browser_process->local_state())) | 299 if (!signed_settings_cache::Store(data, g_browser_process->local_state())) |
| 291 LOG(ERROR) << "Couldn't store to the temp storage."; | 300 LOG(ERROR) << "Couldn't store to the temp storage."; |
| 292 | 301 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 325 void DeviceSettingsProvider::UpdateValuesCache() { | 334 void DeviceSettingsProvider::UpdateValuesCache() { |
| 326 const em::PolicyData data = policy(); | 335 const em::PolicyData data = policy(); |
| 327 PrefValueMap new_values_cache; | 336 PrefValueMap new_values_cache; |
| 328 | 337 |
| 329 if (data.has_username() && !data.has_request_token()) | 338 if (data.has_username() && !data.has_request_token()) |
| 330 new_values_cache.SetString(kDeviceOwner, data.username()); | 339 new_values_cache.SetString(kDeviceOwner, data.username()); |
| 331 | 340 |
| 332 em::ChromeDeviceSettingsProto pol; | 341 em::ChromeDeviceSettingsProto pol; |
| 333 pol.ParseFromString(data.policy_value()); | 342 pol.ParseFromString(data.policy_value()); |
| 334 | 343 |
| 344 // -------------------- | |
| 345 // Boolean Policies | |
| 346 // -------------------- | |
|
Mattias Nissler (ping if slow)
2012/03/01 19:58:10
Instead of doing this, how about actually breaking
pastarmovj
2012/03/05 17:02:55
Done.
| |
| 347 | |
| 335 // For all our boolean settings the following is applicable: | 348 // For all our boolean settings the following is applicable: |
| 336 // true is default permissive value and false is safe prohibitive value. | 349 // true is default permissive value and false is safe prohibitive value. |
| 337 // Exceptions: | 350 // Exceptions: |
| 338 // kSignedDataRoamingEnabled has a default value of false. | 351 // kSignedDataRoamingEnabled has a default value of false. |
| 339 // kAccountsPrefEphemeralUsersEnabled has a default value of false. | 352 // kAccountsPrefEphemeralUsersEnabled has a default value of false. |
| 340 if (pol.has_allow_new_users() && | 353 if (pol.has_allow_new_users() && |
| 341 pol.allow_new_users().has_allow_new_users() && | 354 pol.allow_new_users().has_allow_new_users() && |
| 342 pol.allow_new_users().allow_new_users()) { | 355 pol.allow_new_users().allow_new_users()) { |
| 343 // New users allowed, user_whitelist() ignored. | 356 // New users allowed, user_whitelist() ignored. |
| 344 new_values_cache.SetBoolean(kAccountsPrefAllowNewUser, true); | 357 new_values_cache.SetBoolean(kAccountsPrefAllowNewUser, true); |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 371 pol.has_data_roaming_enabled() && | 384 pol.has_data_roaming_enabled() && |
| 372 pol.data_roaming_enabled().has_data_roaming_enabled() && | 385 pol.data_roaming_enabled().has_data_roaming_enabled() && |
| 373 pol.data_roaming_enabled().data_roaming_enabled()); | 386 pol.data_roaming_enabled().data_roaming_enabled()); |
| 374 | 387 |
| 375 new_values_cache.SetBoolean( | 388 new_values_cache.SetBoolean( |
| 376 kAccountsPrefEphemeralUsersEnabled, | 389 kAccountsPrefEphemeralUsersEnabled, |
| 377 pol.has_ephemeral_users_enabled() && | 390 pol.has_ephemeral_users_enabled() && |
| 378 pol.ephemeral_users_enabled().has_ephemeral_users_enabled() && | 391 pol.ephemeral_users_enabled().has_ephemeral_users_enabled() && |
| 379 pol.ephemeral_users_enabled().ephemeral_users_enabled()); | 392 pol.ephemeral_users_enabled().ephemeral_users_enabled()); |
| 380 | 393 |
| 394 if (pol.has_device_reporting()) { | |
| 395 if (pol.device_reporting().has_report_version_info()) { | |
| 396 new_values_cache.SetBoolean(kReportDeviceVersionInfo, | |
| 397 pol.device_reporting().report_version_info()); | |
| 398 } | |
| 399 // TODO(dubroy): Re-add device activity time policy here when the UI | |
| 400 // to notify the user has been implemented (http://crosbug.com/26252). | |
| 401 if (pol.device_reporting().has_report_boot_mode()) { | |
| 402 new_values_cache.SetBoolean(kReportDeviceBootMode, | |
| 403 pol.device_reporting().report_boot_mode()); | |
| 404 } | |
| 405 } | |
| 406 | |
| 407 if (pol.has_metrics_enabled()) { | |
| 408 new_values_cache.SetBoolean(kStatsReportingPref, | |
| 409 pol.metrics_enabled().metrics_enabled()); | |
| 410 } else { | |
| 411 new_values_cache.SetBoolean(kStatsReportingPref, HasOldMetricsFile()); | |
| 412 } | |
| 413 | |
| 414 // -------------------- | |
| 415 // Integer Policies | |
| 416 // -------------------- | |
| 417 | |
| 418 if (pol.has_screen_saver() && | |
| 419 pol.screen_saver().has_screen_saver_timeout()) { | |
| 420 new_values_cache.SetInteger(kScreenSaverTimeout, | |
| 421 pol.screen_saver().screen_saver_timeout()); | |
| 422 } | |
| 423 | |
| 424 if (pol.has_forced_logout_timeouts() && | |
| 425 pol.forced_logout_timeouts().has_idle_logout_timeout()) { | |
| 426 new_values_cache.SetInteger( | |
| 427 kIdleLogoutTimeout, | |
| 428 pol.forced_logout_timeouts().idle_logout_timeout()); | |
| 429 } | |
| 430 | |
| 431 if (pol.has_forced_logout_timeouts() && | |
| 432 pol.forced_logout_timeouts().has_idle_logout_warning_duration()) { | |
| 433 new_values_cache.SetInteger( | |
| 434 kIdleLogoutWarningDuration, | |
| 435 pol.forced_logout_timeouts().idle_logout_warning_duration()); | |
| 436 } | |
| 437 | |
| 438 // -------------------- | |
| 439 // String Policies | |
| 440 // -------------------- | |
| 441 | |
| 381 // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed. | 442 // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed. |
| 382 std::string serialized; | 443 std::string serialized; |
| 383 if (pol.has_device_proxy_settings() && | 444 if (pol.has_device_proxy_settings() && |
| 384 pol.device_proxy_settings().SerializeToString(&serialized)) { | 445 pol.device_proxy_settings().SerializeToString(&serialized)) { |
| 385 new_values_cache.SetString(kSettingProxyEverywhere, serialized); | 446 new_values_cache.SetString(kSettingProxyEverywhere, serialized); |
| 386 } | 447 } |
| 387 | 448 |
| 388 if (!pol.has_release_channel() || | 449 if (!pol.has_release_channel() || |
| 389 !pol.release_channel().has_release_channel()) { | 450 !pol.release_channel().has_release_channel()) { |
| 390 // Default to an invalid channel (will be ignored). | 451 // Default to an invalid channel (will be ignored). |
| 391 new_values_cache.SetString(kReleaseChannel, ""); | 452 new_values_cache.SetString(kReleaseChannel, ""); |
| 392 } else { | 453 } else { |
| 393 new_values_cache.SetString(kReleaseChannel, | 454 new_values_cache.SetString(kReleaseChannel, |
| 394 pol.release_channel().release_channel()); | 455 pol.release_channel().release_channel()); |
| 395 } | 456 } |
| 396 | 457 |
| 397 if (pol.has_metrics_enabled()) { | 458 if (pol.has_screen_saver() && |
| 398 new_values_cache.SetBoolean(kStatsReportingPref, | 459 pol.screen_saver().has_screen_saver_extension_id()) { |
| 399 pol.metrics_enabled().metrics_enabled()); | 460 new_values_cache.SetString(kScreenSaverExtensionId, |
| 400 } else { | 461 pol.screen_saver().screen_saver_extension_id()); |
| 401 new_values_cache.SetBoolean(kStatsReportingPref, HasOldMetricsFile()); | |
| 402 } | 462 } |
| 403 | 463 |
| 464 // -------------------- | |
| 465 // List Policies | |
| 466 // -------------------- | |
| 404 base::ListValue* list = new base::ListValue(); | 467 base::ListValue* list = new base::ListValue(); |
| 405 const em::UserWhitelistProto& whitelist_proto = pol.user_whitelist(); | 468 const em::UserWhitelistProto& whitelist_proto = pol.user_whitelist(); |
| 406 const RepeatedPtrField<std::string>& whitelist = | 469 const RepeatedPtrField<std::string>& whitelist = |
| 407 whitelist_proto.user_whitelist(); | 470 whitelist_proto.user_whitelist(); |
| 408 for (RepeatedPtrField<std::string>::const_iterator it = whitelist.begin(); | 471 for (RepeatedPtrField<std::string>::const_iterator it = whitelist.begin(); |
| 409 it != whitelist.end(); ++it) { | 472 it != whitelist.end(); ++it) { |
| 410 list->Append(base::Value::CreateStringValue(*it)); | 473 list->Append(base::Value::CreateStringValue(*it)); |
| 411 } | 474 } |
| 412 new_values_cache.SetValue(kAccountsPrefUsers, list); | 475 new_values_cache.SetValue(kAccountsPrefUsers, list); |
| 413 | 476 |
| 414 if (pol.has_device_reporting()) { | |
| 415 if (pol.device_reporting().has_report_version_info()) { | |
| 416 new_values_cache.SetBoolean(kReportDeviceVersionInfo, | |
| 417 pol.device_reporting().report_version_info()); | |
| 418 } | |
| 419 // TODO(dubroy): Re-add device activity time policy here when the UI | |
| 420 // to notify the user has been implemented (http://crosbug.com/26252). | |
| 421 if (pol.device_reporting().has_report_boot_mode()) { | |
| 422 new_values_cache.SetBoolean(kReportDeviceBootMode, | |
| 423 pol.device_reporting().report_boot_mode()); | |
| 424 } | |
| 425 } | |
| 426 | |
| 427 if (pol.has_app_pack()) { | 477 if (pol.has_app_pack()) { |
| 428 typedef RepeatedPtrField<em::AppPackEntryProto> proto_type; | 478 typedef RepeatedPtrField<em::AppPackEntryProto> proto_type; |
| 429 base::ListValue* list = new base::ListValue; | 479 base::ListValue* list = new base::ListValue; |
| 430 const proto_type& app_pack = pol.app_pack().app_pack(); | 480 const proto_type& app_pack = pol.app_pack().app_pack(); |
| 431 for (proto_type::const_iterator it = app_pack.begin(); | 481 for (proto_type::const_iterator it = app_pack.begin(); |
| 432 it != app_pack.end(); ++it) { | 482 it != app_pack.end(); ++it) { |
| 433 base::DictionaryValue* entry = new base::DictionaryValue; | 483 base::DictionaryValue* entry = new base::DictionaryValue; |
| 434 if (it->has_extension_id()) { | 484 if (it->has_extension_id()) { |
| 435 entry->SetString(policy::AppPackUpdater::kExtensionId, | 485 entry->SetString(policy::AppPackUpdater::kExtensionId, |
| 436 it->extension_id()); | 486 it->extension_id()); |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 650 Reload(); | 700 Reload(); |
| 651 return; | 701 return; |
| 652 } | 702 } |
| 653 LOG(ERROR) << "No retries left"; | 703 LOG(ERROR) << "No retries left"; |
| 654 break; | 704 break; |
| 655 } | 705 } |
| 656 } | 706 } |
| 657 } | 707 } |
| 658 | 708 |
| 659 } // namespace chromeos | 709 } // namespace chromeos |
| OLD | NEW |