Chromium Code Reviews| Index: chromeos/network/managed_network_configuration_handler.cc |
| diff --git a/chromeos/network/managed_network_configuration_handler.cc b/chromeos/network/managed_network_configuration_handler.cc |
| index e41d011b53023f71fa0fdcc9a0cae2edf2e41b2d..ffc19f98aff5937b34ba7c2cc205beb93515c509 100644 |
| --- a/chromeos/network/managed_network_configuration_handler.cc |
| +++ b/chromeos/network/managed_network_configuration_handler.cc |
| @@ -799,35 +799,10 @@ class ManagedNetworkConfigurationHandler::PolicyApplicator |
| void ManagedNetworkConfigurationHandler::SetPolicy( |
| onc::ONCSource onc_source, |
| - const base::DictionaryValue& toplevel_onc) { |
| + const base::ListValue& network_configs_onc) { |
| VLOG(1) << "Setting policies for ONC source " |
| << onc::GetSourceAsString(onc_source) << "."; |
| - // Validate the ONC dictionary. We are liberal and ignore unknown field |
| - // names and ignore invalid field names in kRecommended arrays. |
| - onc::Validator validator(false, // Ignore unknown fields. |
| - false, // Ignore invalid recommended field names. |
| - true, // Fail on missing fields. |
| - true); // This ONC comes from policy. |
| - validator.SetOncSource(onc_source); |
| - |
| - onc::Validator::Result validation_result; |
| - scoped_ptr<base::DictionaryValue> onc_validated = |
| - validator.ValidateAndRepairObject( |
| - &onc::kToplevelConfigurationSignature, |
| - toplevel_onc, |
| - &validation_result); |
| - |
| - if (validation_result == onc::Validator::VALID_WITH_WARNINGS) { |
| - LOG(WARNING) << "ONC from " << onc::GetSourceAsString(onc_source) |
| - << " produced warnings."; |
| - } else if (validation_result == onc::Validator::INVALID || |
| - onc_validated == NULL) { |
| - LOG(ERROR) << "ONC from " << onc::GetSourceAsString(onc_source) |
| - << " is invalid and couldn't be repaired."; |
| - return; |
| - } |
| - |
| PolicyMap* policies; |
| std::string profile; |
| if (onc_source == chromeos::onc::ONC_SOURCE_USER_POLICY) { |
| @@ -846,36 +821,25 @@ void ManagedNetworkConfigurationHandler::SetPolicy( |
| // This stores all GUIDs of policies that have changed or are new. |
| std::set<std::string> modified_policies; |
| - base::ListValue* network_configurations = NULL; |
| - onc_validated->GetListWithoutPathExpansion( |
| - onc::toplevel_config::kNetworkConfigurations, |
| - &network_configurations); |
| - |
| - if (network_configurations) { |
| - while (!network_configurations->empty()) { |
| - base::Value* network_value = NULL; |
| - // Passes ownership of network_value. |
| - network_configurations->Remove(network_configurations->GetSize() - 1, |
| - &network_value); |
| - const base::DictionaryValue* network = NULL; |
| - network_value->GetAsDictionary(&network); |
| - std::string guid; |
| - network->GetStringWithoutPathExpansion(onc::network_config::kGUID, |
| - &guid); |
| - |
| - const base::DictionaryValue* old_entry = old_policies[guid]; |
| - const base::DictionaryValue*& new_entry = (*policies)[guid]; |
| - if (new_entry) { |
| - LOG(ERROR) << "ONC from " << onc::GetSourceAsString(onc_source) |
| - << " contains several entries for the same GUID " |
| - << guid << "."; |
| - delete new_entry; |
| - } |
| - new_entry = network; |
| + for (base::ListValue::const_iterator it = network_configs_onc.begin(); |
| + it != network_configs_onc.end(); ++it) { |
| + const base::DictionaryValue* network = NULL; |
| + (*it)->GetAsDictionary(&network); |
|
stevenjb
2013/04/22 16:53:41
Need to handle if (!GetAsDictionary()) here.
pneubeck (no reviews)
2013/04/23 18:05:25
The ONC must be validated before calling this func
stevenjb
2013/04/23 20:02:59
nit: add DCHECK(network) to document that.
pneubeck (no reviews)
2013/04/24 11:25:10
Done.
|
| + std::string guid; |
| + network->GetStringWithoutPathExpansion(onc::network_config::kGUID, &guid); |
|
stevenjb
2013/04/22 16:53:41
Not clear that the logic below will handle an empt
pneubeck (no reviews)
2013/04/23 18:05:25
Empty GUIDs are not allowed in ONC. Since this is
|
| + |
| + const base::DictionaryValue* old_entry = old_policies[guid]; |
| + const base::DictionaryValue*& new_entry = (*policies)[guid]; |
| + if (new_entry) { |
|
stevenjb
2013/04/22 16:53:41
This is headache inducing and relies on [] implici
pneubeck (no reviews)
2013/04/23 18:05:25
Done.
|
| + LOG(ERROR) << "ONC from " << onc::GetSourceAsString(onc_source) |
| + << " contains several entries for the same GUID " |
| + << guid << "."; |
| + delete new_entry; |
| + } |
| + new_entry = network->DeepCopy(); |
| - if (!old_entry || !old_entry->Equals(new_entry)) { |
| - modified_policies.insert(guid); |
| - } |
| + if (!old_entry || !old_entry->Equals(new_entry)) { |
| + modified_policies.insert(guid); |
| } |
|
stevenjb
2013/04/22 16:53:41
nit: no {}
pneubeck (no reviews)
2013/04/23 18:05:25
Done.
|
| } |