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 64b592d06a6491b852d5df71a9bd0689391ee291..22a7c2c98a5c6fe3f1e7980df5f56d2b143b6b2e 100644 |
--- a/chrome/browser/chromeos/settings/device_settings_provider.cc |
+++ b/chrome/browser/chromeos/settings/device_settings_provider.cc |
@@ -18,7 +18,6 @@ |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/chromeos/cros/cros_library.h" |
#include "chrome/browser/chromeos/cros/network_library.h" |
-#include "chrome/browser/chromeos/policy/app_pack_updater.h" |
#include "chrome/browser/chromeos/settings/cros_settings.h" |
#include "chrome/browser/chromeos/settings/cros_settings_names.h" |
#include "chrome/browser/chromeos/settings/device_settings_cache.h" |
@@ -42,6 +41,7 @@ const char* kKnownSettings[] = { |
kAccountsPrefAllowGuest, |
kAccountsPrefAllowNewUser, |
kAccountsPrefDeviceLocalAccounts, |
+ kAccountsPrefDeviceLocalAccountAutoLoginBailoutEnabled, |
kAccountsPrefDeviceLocalAccountAutoLoginDelay, |
kAccountsPrefDeviceLocalAccountAutoLoginId, |
kAccountsPrefEphemeralUsersEnabled, |
@@ -226,15 +226,31 @@ void DeviceSettingsProvider::SetInPolicy() { |
} else if (prop == kAccountsPrefDeviceLocalAccounts) { |
em::DeviceLocalAccountsProto* device_local_accounts = |
device_settings_.mutable_device_local_accounts(); |
- base::ListValue* accounts_list; |
- if (value->GetAsList(&accounts_list)) { |
- for (base::ListValue::const_iterator entry(accounts_list->begin()); |
- entry != accounts_list->end(); ++entry) { |
- std::string id; |
- if ((*entry)->GetAsString(&id)) |
- device_local_accounts->add_account()->set_id(id); |
- else |
+ device_local_accounts->clear_account(); |
+ const base::DictionaryValue* accounts_dict = NULL; |
+ if (value->GetAsDictionary(&accounts_dict)) { |
+ for (base::DictionaryValue::Iterator entry(*accounts_dict); |
+ !entry.IsAtEnd(); entry.Advance()) { |
+ const base::DictionaryValue* entry_dict = NULL; |
+ if (entry.value().GetAsDictionary(&entry_dict)) { |
+ em::DeviceLocalAccountInfoProto* account = |
+ device_local_accounts->add_account(); |
+ account->set_id(entry.key()); |
+ std::string kiosk_app_id; |
+ if (entry_dict->GetStringWithoutPathExpansion( |
+ kAccountsPrefDeviceLocalAccountsKeyKioskAppId, |
+ &kiosk_app_id)) { |
+ account->set_kiosk_app_id(kiosk_app_id); |
+ } |
+ std::string kiosk_app_update_url; |
+ if (entry_dict->GetStringWithoutPathExpansion( |
+ kAccountsPrefDeviceLocalAccountsKeyKioskAppUpdateURL, |
+ &kiosk_app_update_url)) { |
+ account->set_kiosk_app_update_url(kiosk_app_update_url); |
+ } |
+ } else { |
NOTREACHED(); |
+ } |
} |
} else { |
NOTREACHED(); |
@@ -255,6 +271,14 @@ void DeviceSettingsProvider::SetInPolicy() { |
device_local_accounts->set_auto_login_delay(delay); |
else |
NOTREACHED(); |
+ } else if (prop == kAccountsPrefDeviceLocalAccountAutoLoginBailoutEnabled) { |
+ em::DeviceLocalAccountsProto* device_local_accounts = |
+ device_settings_.mutable_device_local_accounts(); |
+ bool enabled; |
+ if (value->GetAsBoolean(&enabled)) |
+ device_local_accounts->set_enable_auto_login_bailout(enabled); |
+ else |
+ NOTREACHED(); |
} else if (prop == kSignedDataRoamingEnabled) { |
em::DataRoamingEnabledProto* roam = |
device_settings_.mutable_data_roaming_enabled(); |
@@ -433,7 +457,7 @@ void DeviceSettingsProvider::DecodeLoginPolicies( |
} |
new_values_cache->SetValue(kAccountsPrefUsers, list); |
- base::ListValue* account_list = new base::ListValue(); |
+ base::DictionaryValue* account_dict = new base::DictionaryValue(); |
CommandLine* command_line = CommandLine::ForCurrentProcess(); |
if (!command_line->HasSwitch(switches::kDisableLocalAccounts)) { |
const em::DeviceLocalAccountsProto device_local_accounts_proto = |
@@ -442,22 +466,24 @@ void DeviceSettingsProvider::DecodeLoginPolicies( |
device_local_accounts_proto.account(); |
RepeatedPtrField<em::DeviceLocalAccountInfoProto>::const_iterator entry; |
for (entry = accounts.begin(); entry != accounts.end(); ++entry) { |
- if (entry->has_id()) |
- account_list->AppendString(entry->id()); |
- } |
- } |
- 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)); |
+ if (entry->id().empty() || account_dict->HasKey(entry->id())) |
bartfab (slow)
2013/04/25 11:17:28
This way, we silently skip duplicates. We should a
Mattias Nissler (ping if slow)
2013/04/26 09:10:05
Obsolete, using a list.
|
+ continue; |
+ |
+ scoped_ptr<base::DictionaryValue> entry_dict(new base::DictionaryValue()); |
bartfab (slow)
2013/04/25 11:17:28
As before: Why use a scoped_ptr if you are passing
Mattias Nissler (ping if slow)
2013/04/26 09:10:05
same as before.
|
+ if (entry->has_kiosk_app_id()) { |
+ entry_dict->SetStringWithoutPathExpansion( |
+ kAccountsPrefDeviceLocalAccountsKeyKioskAppId, |
+ entry->kiosk_app_id()); |
+ } |
+ if (entry->has_kiosk_app_update_url()) { |
+ entry_dict->SetStringWithoutPathExpansion( |
+ kAccountsPrefDeviceLocalAccountsKeyKioskAppUpdateURL, |
+ entry->kiosk_app_update_url()); |
+ } |
+ account_dict->SetWithoutPathExpansion(entry->id(), entry_dict.release()); |
} |
- new_values_cache->SetValue(kStartUpFlags, list); |
} |
+ new_values_cache->SetValue(kAccountsPrefDeviceLocalAccounts, account_dict); |
if (policy.has_device_local_accounts()) { |
if (policy.device_local_accounts().has_auto_login_id()) { |
@@ -471,6 +497,21 @@ void DeviceSettingsProvider::DecodeLoginPolicies( |
policy.device_local_accounts().auto_login_delay()); |
} |
} |
+ |
+ new_values_cache->SetBoolean( |
+ kAccountsPrefDeviceLocalAccountAutoLoginBailoutEnabled, |
+ policy.device_local_accounts().enable_auto_login_bailout()); |
+ |
+ 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( |
@@ -512,11 +553,13 @@ void DeviceSettingsProvider::DecodeKioskPolicies( |
it != app_pack.end(); ++it) { |
base::DictionaryValue* entry = new base::DictionaryValue; |
if (it->has_extension_id()) { |
- entry->SetString(policy::AppPackUpdater::kExtensionId, |
- it->extension_id()); |
+ entry->SetStringWithoutPathExpansion(kAppPackKeyExtensionId, |
+ it->extension_id()); |
+ } |
+ if (it->has_update_url()) { |
+ entry->SetStringWithoutPathExpansion(kAppPackKeyUpdateUrl, |
+ it->update_url()); |
} |
- if (it->has_update_url()) |
- entry->SetString(policy::AppPackUpdater::kUpdateUrl, it->update_url()); |
list->Append(entry); |
} |
new_values_cache->SetValue(kAppPack, list); |