Chromium Code Reviews| Index: chrome/browser/chromeos/device_settings_provider.cc |
| diff --git a/chrome/browser/chromeos/device_settings_provider.cc b/chrome/browser/chromeos/device_settings_provider.cc |
| index e65ba0373dca2ec9ecf35a2804b6067b477781f6..1b22ac491b01ba4f524655ae192b1d04c555d857 100644 |
| --- a/chrome/browser/chromeos/device_settings_provider.cc |
| +++ b/chrome/browser/chromeos/device_settings_provider.cc |
| @@ -22,7 +22,6 @@ |
| #include "chrome/browser/chromeos/login/signed_settings_helper.h" |
| #include "chrome/browser/chromeos/login/user_manager.h" |
| #include "chrome/browser/policy/app_pack_updater.h" |
| -#include "chrome/browser/policy/proto/chrome_device_policy.pb.h" |
| #include "chrome/browser/ui/options/options_util.h" |
| #include "chrome/common/chrome_notification_types.h" |
| #include "chrome/installer/util/google_update_settings.h" |
| @@ -45,10 +44,14 @@ const char* kKnownSettings[] = { |
| kAccountsPrefUsers, |
| kAppPack, |
| kDeviceOwner, |
| + kIdleLogoutTimeout, |
| + kIdleLogoutWarningDuration, |
| kReleaseChannel, |
| kReportDeviceActivityTimes, |
| kReportDeviceBootMode, |
| kReportDeviceVersionInfo, |
| + kScreenSaverExtensionId, |
| + kScreenSaverTimeout, |
| kSettingProxyEverywhere, |
| kSignedDataRoamingEnabled, |
| kStatsReportingPref, |
| @@ -277,9 +280,14 @@ void DeviceSettingsProvider::SetInPolicy() { |
| // The remaining settings don't support Set(), since they are not |
| // intended to be customizable by the user: |
| // kAppPack |
| + // kIdleLogoutTimeout, |
| + // kIdleLogoutWarningDuration, |
| // kReportDeviceVersionInfo |
| // kReportDeviceActivityTimes |
| // kReportDeviceBootMode |
| + // kScreenSaverExtensionId, |
| + // kScreenSaverTimeout, |
| + |
| NOTREACHED(); |
| } |
| data.set_policy_value(pol.SerializeAsString()); |
| @@ -322,112 +330,94 @@ void DeviceSettingsProvider::FinishSetInPolicy( |
| SetInPolicy(); |
| } |
| -void DeviceSettingsProvider::UpdateValuesCache() { |
| - const em::PolicyData data = policy(); |
| - PrefValueMap new_values_cache; |
| - |
| - if (data.has_username() && !data.has_request_token()) |
| - new_values_cache.SetString(kDeviceOwner, data.username()); |
| - |
| - em::ChromeDeviceSettingsProto pol; |
| - pol.ParseFromString(data.policy_value()); |
| - |
| +void DeviceSettingsProvider::DecodeLoginPolicies( |
| + const em::ChromeDeviceSettingsProto& policy, |
| + PrefValueMap* new_values_cache) const { |
| // For all our boolean settings the following is applicable: |
| // true is default permissive value and false is safe prohibitive value. |
| // Exceptions: |
| // kSignedDataRoamingEnabled has a default value of false. |
| // kAccountsPrefEphemeralUsersEnabled has a default value of false. |
| - if (pol.has_allow_new_users() && |
| - pol.allow_new_users().has_allow_new_users() && |
| - pol.allow_new_users().allow_new_users()) { |
| + if (policy.has_allow_new_users() && |
| + policy.allow_new_users().has_allow_new_users() && |
| + policy.allow_new_users().allow_new_users()) { |
| // New users allowed, user_whitelist() ignored. |
| - new_values_cache.SetBoolean(kAccountsPrefAllowNewUser, true); |
| - } else if (!pol.has_user_whitelist()) { |
| + new_values_cache->SetBoolean(kAccountsPrefAllowNewUser, true); |
| + } else if (!policy.has_user_whitelist()) { |
| // If we have the allow_new_users bool, and it is true, we honor that above. |
| // In all other cases (don't have it, have it and it is set to false, etc), |
| // We will honor the user_whitelist() if it is there and populated. |
| // Otherwise we default to allowing new users. |
| - new_values_cache.SetBoolean(kAccountsPrefAllowNewUser, true); |
| + new_values_cache->SetBoolean(kAccountsPrefAllowNewUser, true); |
| } else { |
| - new_values_cache.SetBoolean( |
| + new_values_cache->SetBoolean( |
| kAccountsPrefAllowNewUser, |
| - pol.user_whitelist().user_whitelist_size() == 0); |
| + policy.user_whitelist().user_whitelist_size() == 0); |
| } |
| - new_values_cache.SetBoolean( |
| + new_values_cache->SetBoolean( |
| kAccountsPrefAllowGuest, |
| - !pol.has_guest_mode_enabled() || |
| - !pol.guest_mode_enabled().has_guest_mode_enabled() || |
| - pol.guest_mode_enabled().guest_mode_enabled()); |
| + !policy.has_guest_mode_enabled() || |
| + !policy.guest_mode_enabled().has_guest_mode_enabled() || |
| + policy.guest_mode_enabled().guest_mode_enabled()); |
| - new_values_cache.SetBoolean( |
| + new_values_cache->SetBoolean( |
| kAccountsPrefShowUserNamesOnSignIn, |
| - !pol.has_show_user_names() || |
| - !pol.show_user_names().has_show_user_names() || |
| - pol.show_user_names().show_user_names()); |
| + !policy.has_show_user_names() || |
| + !policy.show_user_names().has_show_user_names() || |
| + policy.show_user_names().show_user_names()); |
| - new_values_cache.SetBoolean( |
| - kSignedDataRoamingEnabled, |
| - pol.has_data_roaming_enabled() && |
| - pol.data_roaming_enabled().has_data_roaming_enabled() && |
| - pol.data_roaming_enabled().data_roaming_enabled()); |
| - |
| - new_values_cache.SetBoolean( |
| + new_values_cache->SetBoolean( |
| kAccountsPrefEphemeralUsersEnabled, |
| - pol.has_ephemeral_users_enabled() && |
| - pol.ephemeral_users_enabled().has_ephemeral_users_enabled() && |
| - pol.ephemeral_users_enabled().ephemeral_users_enabled()); |
| - |
| - // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed. |
| - std::string serialized; |
| - if (pol.has_device_proxy_settings() && |
| - pol.device_proxy_settings().SerializeToString(&serialized)) { |
| - new_values_cache.SetString(kSettingProxyEverywhere, serialized); |
| - } |
| - |
| - if (!pol.has_release_channel() || |
| - !pol.release_channel().has_release_channel()) { |
| - // Default to an invalid channel (will be ignored). |
| - new_values_cache.SetString(kReleaseChannel, ""); |
| - } else { |
| - new_values_cache.SetString(kReleaseChannel, |
| - pol.release_channel().release_channel()); |
| - } |
| - |
| - if (pol.has_metrics_enabled()) { |
| - new_values_cache.SetBoolean(kStatsReportingPref, |
| - pol.metrics_enabled().metrics_enabled()); |
| - } else { |
| - new_values_cache.SetBoolean(kStatsReportingPref, HasOldMetricsFile()); |
| - } |
| + policy.has_ephemeral_users_enabled() && |
| + policy.ephemeral_users_enabled().has_ephemeral_users_enabled() && |
| + policy.ephemeral_users_enabled().ephemeral_users_enabled()); |
| base::ListValue* list = new base::ListValue(); |
| - const em::UserWhitelistProto& whitelist_proto = pol.user_whitelist(); |
| + const em::UserWhitelistProto& whitelist_proto = policy.user_whitelist(); |
| const RepeatedPtrField<std::string>& whitelist = |
| whitelist_proto.user_whitelist(); |
| for (RepeatedPtrField<std::string>::const_iterator it = whitelist.begin(); |
| it != whitelist.end(); ++it) { |
| list->Append(base::Value::CreateStringValue(*it)); |
| } |
| - new_values_cache.SetValue(kAccountsPrefUsers, list); |
| + new_values_cache->SetValue(kAccountsPrefUsers, list); |
| +} |
| - if (pol.has_device_reporting()) { |
| - if (pol.device_reporting().has_report_version_info()) { |
| - new_values_cache.SetBoolean(kReportDeviceVersionInfo, |
| - pol.device_reporting().report_version_info()); |
| - } |
| - // TODO(dubroy): Re-add device activity time policy here when the UI |
| - // to notify the user has been implemented (http://crosbug.com/26252). |
| - if (pol.device_reporting().has_report_boot_mode()) { |
| - new_values_cache.SetBoolean(kReportDeviceBootMode, |
| - pol.device_reporting().report_boot_mode()); |
| - } |
| +void DeviceSettingsProvider::DecodeKioskPolicies( |
| + const em::ChromeDeviceSettingsProto& policy, |
| + PrefValueMap* new_values_cache) const { |
| + if (policy.has_screen_saver() && |
| + policy.screen_saver().has_screen_saver_timeout()) { |
| + new_values_cache->SetInteger(kScreenSaverTimeout, |
| + policy.screen_saver().screen_saver_timeout()); |
|
Joao da Silva
2012/03/05 17:40:24
Nit: indent
pastarmovj
2012/03/06 11:59:35
Done.
|
| + } |
| + |
| + if (policy.has_forced_logout_timeouts() && |
| + policy.forced_logout_timeouts().has_idle_logout_timeout()) { |
| + new_values_cache->SetInteger( |
| + kIdleLogoutTimeout, |
| + policy.forced_logout_timeouts().idle_logout_timeout()); |
| + } |
| + |
| + if (policy.has_forced_logout_timeouts() && |
| + policy.forced_logout_timeouts().has_idle_logout_warning_duration()) { |
| + new_values_cache->SetInteger( |
| + kIdleLogoutWarningDuration, |
| + policy.forced_logout_timeouts().idle_logout_warning_duration()); |
| + } |
| + |
| + if (policy.has_screen_saver() && |
|
Joao da Silva
2012/03/05 17:40:24
Nit: put both screen_saver policies together
pastarmovj
2012/03/06 11:59:35
Done.
|
| + policy.screen_saver().has_screen_saver_extension_id()) { |
| + new_values_cache->SetString( |
| + kScreenSaverExtensionId, |
| + policy.screen_saver().screen_saver_extension_id()); |
| } |
| - if (pol.has_app_pack()) { |
| + if (policy.has_app_pack()) { |
| typedef RepeatedPtrField<em::AppPackEntryProto> proto_type; |
| base::ListValue* list = new base::ListValue; |
| - const proto_type& app_pack = pol.app_pack().app_pack(); |
| + const proto_type& app_pack = policy.app_pack().app_pack(); |
| for (proto_type::const_iterator it = app_pack.begin(); |
| it != app_pack.end(); ++it) { |
| base::DictionaryValue* entry = new base::DictionaryValue; |
| @@ -443,8 +433,79 @@ void DeviceSettingsProvider::UpdateValuesCache() { |
| } |
| list->Append(entry); |
| } |
| - new_values_cache.SetValue(kAppPack, list); |
| + new_values_cache->SetValue(kAppPack, list); |
| } |
| +} |
| + |
| +void DeviceSettingsProvider::DecodeNetworkPolicies( |
| + const em::ChromeDeviceSettingsProto& policy, |
| + PrefValueMap* new_values_cache) const { |
| + new_values_cache->SetBoolean( |
| + kSignedDataRoamingEnabled, |
| + policy.has_data_roaming_enabled() && |
| + policy.data_roaming_enabled().has_data_roaming_enabled() && |
| + policy.data_roaming_enabled().data_roaming_enabled()); |
| + |
| + // TODO(cmasone): NOTIMPLEMENTED() once http://crosbug.com/13052 is fixed. |
| + std::string serialized; |
| + if (policy.has_device_proxy_settings() && |
| + policy.device_proxy_settings().SerializeToString(&serialized)) { |
| + new_values_cache->SetString(kSettingProxyEverywhere, serialized); |
| + } |
| +} |
| + |
| +void DeviceSettingsProvider::DecodeReportingPolicies( |
| + const em::ChromeDeviceSettingsProto& policy, |
| + PrefValueMap* new_values_cache) const { |
| + if (policy.has_device_reporting()) { |
| + if (policy.device_reporting().has_report_version_info()) { |
| + new_values_cache->SetBoolean(kReportDeviceVersionInfo, |
|
Joao da Silva
2012/03/05 17:40:24
Nit: move the first arg to a newline too, like in
pastarmovj
2012/03/06 11:59:35
Done.
|
| + policy.device_reporting().report_version_info()); |
| + } |
| + // TODO(dubroy): Re-add device activity time policy here when the UI |
| + // to notify the user has been implemented (http://crosbug.com/26252). |
| + if (policy.device_reporting().has_report_boot_mode()) { |
| + new_values_cache->SetBoolean(kReportDeviceBootMode, |
|
Joao da Silva
2012/03/05 17:40:24
Nit: same here
pastarmovj
2012/03/06 11:59:35
Done.
|
| + policy.device_reporting().report_boot_mode()); |
| + } |
| + } |
| +} |
| + |
| +void DeviceSettingsProvider::DecodeGenericPolicies( |
| + const em::ChromeDeviceSettingsProto& policy, |
| + PrefValueMap* new_values_cache) const { |
| + if (policy.has_metrics_enabled()) { |
| + new_values_cache->SetBoolean(kStatsReportingPref, |
| + policy.metrics_enabled().metrics_enabled()); |
|
Joao da Silva
2012/03/05 17:40:24
Nit: indent
pastarmovj
2012/03/06 11:59:35
Done.
|
| + } else { |
| + new_values_cache->SetBoolean(kStatsReportingPref, HasOldMetricsFile()); |
| + } |
| + |
| + if (!policy.has_release_channel() || |
| + !policy.release_channel().has_release_channel()) { |
| + // Default to an invalid channel (will be ignored). |
| + new_values_cache->SetString(kReleaseChannel, ""); |
| + } else { |
| + new_values_cache->SetString(kReleaseChannel, |
| + policy.release_channel().release_channel()); |
|
Joao da Silva
2012/03/05 17:40:24
Nit: indent
pastarmovj
2012/03/06 11:59:35
Done.
|
| + } |
| +} |
| + |
| +void DeviceSettingsProvider::UpdateValuesCache() { |
| + const em::PolicyData data = policy(); |
| + PrefValueMap new_values_cache; |
| + |
| + if (data.has_username() && !data.has_request_token()) |
| + new_values_cache.SetString(kDeviceOwner, data.username()); |
| + |
| + em::ChromeDeviceSettingsProto pol; |
| + pol.ParseFromString(data.policy_value()); |
| + |
| + DecodeLoginPolicies(pol, &new_values_cache); |
| + DecodeKioskPolicies(pol, &new_values_cache); |
| + DecodeNetworkPolicies(pol, &new_values_cache); |
| + DecodeReportingPolicies(pol, &new_values_cache); |
| + DecodeGenericPolicies(pol, &new_values_cache); |
| // Collect all notifications but send them only after we have swapped the |
| // cache so that if somebody actually reads the cache will be already valid. |