Chromium Code Reviews| Index: chrome/browser/chromeos/cros/network_library_impl_base.cc |
| diff --git a/chrome/browser/chromeos/cros/network_library_impl_base.cc b/chrome/browser/chromeos/cros/network_library_impl_base.cc |
| index dad65ed86e972cf5787dde59cacae03d9ab6f4f3..f16c47365e84b43d39a0a56b5d6f7f281dab751a 100644 |
| --- a/chrome/browser/chromeos/cros/network_library_impl_base.cc |
| +++ b/chrome/browser/chromeos/cros/network_library_impl_base.cc |
| @@ -10,6 +10,7 @@ |
| #include "base/metrics/histogram.h" |
| #include "base/stl_util.h" |
| #include "chrome/browser/chromeos/cros/native_network_parser.h" |
| +#include "chrome/browser/chromeos/cros/network_constants.h" |
| #include "chrome/browser/chromeos/cros/onc_network_parser.h" |
| #include "chrome/browser/chromeos/network_login_observer.h" |
| #include "chromeos/network/onc/onc_certificate_importer.h" |
| @@ -1126,13 +1127,10 @@ bool NetworkLibraryImplBase::LoadOncNetworks(const std::string& onc_blob, |
| VLOG(2) << "ONC file has " << network_configs->GetSize() << " networks"; |
| OncNetworkParser parser(*network_configs, source); |
| - // Parse all networks. Bail out if that fails. |
| - NetworkOncMap added_onc_map; |
| - ScopedVector<Network> networks; |
| for (int i = 0; i < parser.GetNetworkConfigsSize(); i++) { |
| // Parse Open Network Configuration blob into a temporary Network object. |
| bool marked_for_removal = false; |
| - Network* network = parser.ParseNetwork(i, &marked_for_removal); |
| + scoped_ptr<Network> network(parser.ParseNetwork(i, &marked_for_removal)); |
| if (!network) { |
| LOG(ERROR) << "Error during ONC parsing network at index " << i |
| << " from " << onc::GetSourceAsString(source); |
| @@ -1147,45 +1145,31 @@ bool NetworkLibraryImplBase::LoadOncNetworks(const std::string& onc_blob, |
| network->type() != TYPE_ETHERNET) { |
| LOG(WARNING) << "Ignoring device-level policy-pushed network of type " |
| << network->type(); |
| - delete network; |
| continue; |
| } |
| - networks.push_back(network); |
| - if (!(source == onc::ONC_SOURCE_USER_IMPORT && |
| - marked_for_removal)) { |
| - added_onc_map[network->unique_id()] = parser.GetNetworkConfig(i); |
| - } |
| - |
| - if (marked_for_removal) |
| + if (source == onc::ONC_SOURCE_USER_IMPORT && marked_for_removal) { |
| + // User import supports the removal of networks by ID. |
| removal_ids.insert(network->unique_id()); |
| - } |
| - |
| - // Update the ONC map. |
| - for (NetworkOncMap::iterator iter(added_onc_map.begin()); |
| - iter != added_onc_map.end(); ++iter) { |
| - const base::DictionaryValue*& entry = network_onc_map_[iter->first]; |
| - delete entry; |
| - entry = iter->second->DeepCopy(); |
| - } |
| + continue; |
| + } |
| - // Configure the networks. While doing so, collect unique identifiers of the |
| - // networks that are defined in the ONC blob in |network_ids|. They're later |
| - // used to clean out any previously-existing networks that had been |
| - // configured through policy but are no longer specified in the updated ONC |
| - // blob. |
| - for (std::vector<Network*>::iterator iter(networks.begin()); |
| - iter != networks.end(); ++iter) { |
| - Network* network = *iter; |
| - |
| - // Don't configure a network that is supposed to be removed. For |
| - // policy-managed networks, the "remove" functionality of ONC is ignored. |
| - if (source == onc::ONC_SOURCE_USER_IMPORT && |
| - removal_ids.find(network->unique_id()) != removal_ids.end()) { |
| + if (marked_for_removal) { |
| + // Don't configure a network that is supposed to be removed. For |
|
Greg Spencer (Chromium)
2012/12/21 17:52:45
nit: You could put the comment above the "if" and
pneubeck (no reviews)
2013/01/08 13:40:23
Done.
|
| + // policy-managed networks, the "remove" functionality of ONC is |
| + // irrelevant. Instead in general, all previously configured networks |
|
Greg Spencer (Chromium)
2012/12/21 17:52:45
nit: add a comma: "Instead, in general,"
pneubeck (no reviews)
2013/01/08 13:40:23
Done.
|
| + // that are no longer configured are removed. |
| continue; |
| } |
| - DictionaryValue dict; |
| + // Update the ONC map. |
| + const base::DictionaryValue*& entry = |
| + network_onc_map_[network->unique_id()]; |
| + delete entry; |
| + entry = parser.GetNetworkConfig(i)->DeepCopy(); |
| + |
| + // Configure the network. |
| + base::DictionaryValue dict; |
| for (Network::PropertyMap::const_iterator props = |
| network->property_map_.begin(); |
| props != network->property_map_.end(); ++props) { |
| @@ -1214,6 +1198,10 @@ bool NetworkLibraryImplBase::LoadOncNetworks(const std::string& onc_blob, |
| CallConfigureService(network->unique_id(), &dict); |
| } |
| + // Store the unique identifier of the network that is defined in the ONC |
| + // blob in |network_ids|. The identifiers are later used to clean out any |
| + // previously-existing networks that had been configured through policy |
| + // but are no longer specified in the updated ONC blob. |
| network_ids.insert(network->unique_id()); |
| } |
| } |