Index: chromeos/network/network_state_handler.cc |
diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc |
index 1f061974199c01bbe503089b8bc4d85385524d23..125cefd93d29c47ffb580d08ef54e67d11e31c4e 100644 |
--- a/chromeos/network/network_state_handler.cc |
+++ b/chromeos/network/network_state_handler.cc |
@@ -6,6 +6,7 @@ |
#include "base/bind.h" |
#include "base/format_macros.h" |
+#include "base/guid.h" |
#include "base/location.h" |
#include "base/logging.h" |
#include "base/metrics/histogram.h" |
@@ -309,7 +310,7 @@ void NetworkStateHandler::GetFavoriteListByType(const NetworkTypePattern& type, |
iter != favorite_list_.end(); ++iter) { |
const FavoriteState* favorite = (*iter)->AsFavoriteState(); |
DCHECK(favorite); |
- if (favorite->update_received() && favorite->IsFavorite() && |
+ if (favorite->update_received() && favorite->IsInProfile() && |
favorite->Matches(type)) { |
list->push_back(favorite); |
} |
@@ -324,11 +325,22 @@ const FavoriteState* NetworkStateHandler::GetFavoriteState( |
return NULL; |
const FavoriteState* favorite = managed->AsFavoriteState(); |
DCHECK(favorite); |
- if (!favorite->update_received() || !favorite->IsFavorite()) |
+ if (!favorite->update_received() || !favorite->IsInProfile()) |
return NULL; |
return favorite; |
} |
+const FavoriteState* NetworkStateHandler::GetFavoriteStateFromGuid( |
+ const std::string& guid) const { |
+ for (ManagedStateList::const_iterator iter = favorite_list_.begin(); |
+ iter != favorite_list_.end(); ++iter) { |
+ const FavoriteState* favorite = (*iter)->AsFavoriteState(); |
pneubeck (no reviews)
2014/05/12 13:37:07
skip if update_received()==false (might not be nec
stevenjb
2014/05/13 01:19:00
guid() will be "" until update_received() is true.
|
+ if (favorite->guid() == guid) |
+ return favorite; |
+ } |
+ return NULL; |
+} |
+ |
void NetworkStateHandler::RequestScan() const { |
NET_LOG_USER("RequestScan", ""); |
shill_property_handler_->RequestScan(); |
@@ -489,7 +501,7 @@ void NetworkStateHandler::UpdateManagedStateProperties( |
// A Favorite may not have been created yet if it was added later (e.g. |
// through ConfigureService) since ServiceCompleteList updates are not |
// emitted. Add and update the state here. |
- managed = new FavoriteState(path); |
+ managed = ManagedState::Create(type, path); |
pneubeck (no reviews)
2014/05/12 13:37:07
optional:
since |type| is constant, IMO the more s
stevenjb
2014/05/13 01:19:00
I didn't like that NSH sometimes uses one and not
|
managed_list->push_back(managed); |
} |
managed->set_update_received(); |
@@ -507,6 +519,7 @@ void NetworkStateHandler::UpdateManagedStateProperties( |
} |
managed->InitialPropertiesReceived(properties); |
} |
+ UpdateGuid(managed); |
managed->set_update_requested(false); |
} |
@@ -681,7 +694,7 @@ void NetworkStateHandler::ManagedStateListChanged( |
for (ManagedStateList::iterator iter = favorite_list_.begin(); |
iter != favorite_list_.end(); ++iter) { |
FavoriteState* favorite = (*iter)->AsFavoriteState(); |
- if (!favorite->IsFavorite()) |
+ if (!favorite->IsInProfile()) |
continue; |
if (favorite->IsPrivate()) |
++unshared; |
@@ -728,6 +741,38 @@ void NetworkStateHandler::DefaultNetworkServiceChanged( |
//------------------------------------------------------------------------------ |
// Private methods |
+void NetworkStateHandler::UpdateGuid(ManagedState* managed) { |
+ if (managed->managed_type() == ManagedState::MANAGED_TYPE_FAVORITE) { |
+ // Ensure that a FavoriteState has a valid GUID. |
pneubeck (no reviews)
2014/05/12 13:37:07
nit: a -> the
(or even remove the comment)
stevenjb
2014/05/13 01:19:00
Done.
|
+ FavoriteState* favorite = managed->AsFavoriteState(); |
+ if (!favorite->guid().empty()) |
+ return; |
+ std::string specifier = favorite->GetSpecifier(); |
+ std::string guid; |
+ SpecifierGuidMap::iterator iter = specifier_guid_map_.find(specifier); |
+ if (iter != specifier_guid_map_.end()) { |
+ guid = iter->second; |
+ } else { |
+ guid = base::GenerateGUID(); |
+ specifier_guid_map_[specifier] = guid; |
+ } |
+ favorite->SetGuid(guid); |
+ NetworkState* network = GetModifiableNetworkState(favorite->path()); |
+ if (network) |
+ network->SetGuid(guid); |
+ } else if (managed->managed_type() == ManagedState::MANAGED_TYPE_NETWORK) { |
+ // If the GUID is not set and a corresponding FavoriteState exists, get the |
pneubeck (no reviews)
2014/05/12 13:37:07
hm.
There's a again a timing subtlety here, I thin
stevenjb
2014/05/13 01:19:00
I don't think we can ever entirely guarantee that
|
+ // GUID from the FavoriteState. Otherwise it will get set when the Favorite |
+ // is created. |
+ NetworkState* network = managed->AsNetworkState(); |
+ if (!network->guid().empty()) |
+ return; |
+ FavoriteState* favorite = GetModifiableFavoriteState(network->path()); |
+ if (favorite && !favorite->guid().empty()) |
+ network->SetGuid(favorite->guid()); |
+ } |
+} |
+ |
void NetworkStateHandler::NotifyDeviceListChanged() { |
NET_LOG_DEBUG("NotifyDeviceListChanged", |
base::StringPrintf("Size:%" PRIuS, device_list_.size())); |
@@ -752,6 +797,15 @@ NetworkState* NetworkStateHandler::GetModifiableNetworkState( |
return managed->AsNetworkState(); |
} |
+FavoriteState* NetworkStateHandler::GetModifiableFavoriteState( |
+ const std::string& service_path) const { |
+ ManagedState* managed = |
+ GetModifiableManagedState(&favorite_list_, service_path); |
+ if (!managed) |
+ return NULL; |
+ return managed->AsFavoriteState(); |
+} |
+ |
ManagedState* NetworkStateHandler::GetModifiableManagedState( |
const ManagedStateList* managed_list, |
const std::string& path) const { |