| Index: chrome/browser/chromeos/settings/device_settings_provider.cc
|
| diff --git a/chrome/browser/chromeos/settings/device_settings_provider.cc b/chrome/browser/chromeos/settings/device_settings_provider.cc
|
| index 44a253483f2d3526fcd75a3ebf92865684ebd655..e150055854177d46198b822819e80f7df07a92b5 100644
|
| --- a/chrome/browser/chromeos/settings/device_settings_provider.cc
|
| +++ b/chrome/browser/chromeos/settings/device_settings_provider.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/command_line.h"
|
| #include "base/file_util.h"
|
| #include "base/logging.h"
|
| +#include "base/metrics/histogram.h"
|
| #include "base/prefs/pref_service.h"
|
| #include "base/string_util.h"
|
| #include "base/threading/thread_restrictions.h"
|
| @@ -26,6 +27,7 @@
|
| #include "chrome/browser/policy/proto/device_management_backend.pb.h"
|
| #include "chrome/browser/ui/options/options_util.h"
|
| #include "chrome/common/chrome_switches.h"
|
| +#include "chrome/common/pref_names.h"
|
| #include "chrome/installer/util/google_update_settings.h"
|
|
|
| using google::protobuf::RepeatedPtrField;
|
| @@ -63,6 +65,7 @@ const char* kKnownSettings[] = {
|
| kStartUpUrls,
|
| kStatsReportingPref,
|
| kSystemTimezonePolicy,
|
| + kStartUpFlags,
|
| };
|
|
|
| // Legacy policy file location. Used to detect migration from pre v12 ChromeOS.
|
| @@ -274,12 +277,14 @@ void DeviceSettingsProvider::SetInPolicy() {
|
| em::UserWhitelistProto* whitelist_proto =
|
| device_settings_.mutable_user_whitelist();
|
| whitelist_proto->clear_user_whitelist();
|
| - base::ListValue& users = static_cast<base::ListValue&>(*value);
|
| - for (base::ListValue::const_iterator i = users.begin();
|
| - i != users.end(); ++i) {
|
| - std::string email;
|
| - if ((*i)->GetAsString(&email))
|
| - whitelist_proto->add_user_whitelist(email.c_str());
|
| + const base::ListValue* users;
|
| + if (value->GetAsList(&users)) {
|
| + for (base::ListValue::const_iterator i = users->begin();
|
| + i != users->end(); ++i) {
|
| + std::string email;
|
| + if ((*i)->GetAsString(&email))
|
| + whitelist_proto->add_user_whitelist(email);
|
| + }
|
| }
|
| } else if (prop == kAccountsPrefEphemeralUsersEnabled) {
|
| em::EphemeralUsersEnabledProto* ephemeral_users_enabled =
|
| @@ -301,6 +306,19 @@ void DeviceSettingsProvider::SetInPolicy() {
|
| } else {
|
| NOTREACHED();
|
| }
|
| + } else if (prop == kStartUpFlags) {
|
| + em::StartUpFlagsProto* flags_proto =
|
| + device_settings_.mutable_start_up_flags();
|
| + flags_proto->Clear();
|
| + const base::ListValue* flags;
|
| + if (value->GetAsList(&flags)) {
|
| + for (base::ListValue::const_iterator i = flags->begin();
|
| + i != flags->end(); ++i) {
|
| + std::string flag;
|
| + if ((*i)->GetAsString(&flag))
|
| + flags_proto->add_flags(flag);
|
| + }
|
| + }
|
| } else {
|
| // The remaining settings don't support Set(), since they are not
|
| // intended to be customizable by the user:
|
| @@ -406,6 +424,17 @@ void DeviceSettingsProvider::DecodeLoginPolicies(
|
| }
|
| }
|
| new_values_cache->SetValue(kAccountsPrefDeviceLocalAccounts, account_list);
|
| +
|
| + if (policy.has_start_up_flags()) {
|
| + base::ListValue* list = new base::ListValue();
|
| + const em::StartUpFlagsProto& flags_proto = policy.start_up_flags();
|
| + const RepeatedPtrField<std::string>& flags = flags_proto.flags();
|
| + for (RepeatedPtrField<std::string>::const_iterator it = flags.begin();
|
| + it != flags.end(); ++it) {
|
| + list->Append(new base::StringValue(*it));
|
| + }
|
| + new_values_cache->SetValue(kStartUpFlags, list);
|
| + }
|
| }
|
|
|
| void DeviceSettingsProvider::DecodeKioskPolicies(
|
| @@ -604,6 +633,7 @@ void DeviceSettingsProvider::ApplyMetricsSetting(bool use_file,
|
| // TODO(pastarmovj): Remove this once migration is not needed anymore.
|
| // If the value is not set we should try to migrate legacy consent file.
|
| if (use_file) {
|
| + UMA_HISTOGRAM_COUNTS("DeviceSettings.MetricsMigrated", 1);
|
| new_value = HasOldMetricsFile();
|
| // Make sure the values will get eventually written to the policy file.
|
| migration_values_.SetValue(kStatsReportingPref,
|
| @@ -643,6 +673,24 @@ void DeviceSettingsProvider::ApplySideEffects(
|
| else
|
| ApplyMetricsSetting(true, false);
|
|
|
| + // TODO(pastarmovj): Remove this after we don't need it anymore.
|
| + // See: http://crosbug.com/39553
|
| + // Migrate flags to device settings.
|
| + PrefService* local_state = g_browser_process->local_state();
|
| + if (local_state->HasPrefPath(prefs::kEnabledLabsExperiments)) {
|
| + if (!settings.has_start_up_flags()) {
|
| + const base::ListValue* flags =
|
| + local_state->GetList(prefs::kEnabledLabsExperiments);
|
| + migration_values_.SetValue(kStartUpFlags, flags->DeepCopy());
|
| + AttemptMigration();
|
| + } else {
|
| + // Either it has been properly migrated or the user already specified new
|
| + // flags in the device policy.
|
| + UMA_HISTOGRAM_COUNTS("DeviceSettings.FlagsMigrated", 1);
|
| + local_state->ClearPref(prefs::kEnabledLabsExperiments);
|
| + }
|
| + }
|
| +
|
| // Next set the roaming setting as needed.
|
| ApplyRoamingSetting(
|
| settings.has_data_roaming_enabled() ?
|
|
|