Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Unified Diff: chromeos/network/network_state_handler.cc

Issue 11614035: Improve NetworkStateHandler API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix TrayNetworkStateObserver Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chromeos/network/network_state_handler.cc
diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc
index 7b0e0d9e0e084163753335c92e0a0d68995cf95d..51999333e6e1326408b0494243f242921287c301 100644
--- a/chromeos/network/network_state_handler.cc
+++ b/chromeos/network/network_state_handler.cc
@@ -108,7 +108,7 @@ const NetworkState* NetworkStateHandler::GetNetworkState(
return GetModifiableNetworkState(service_path);
}
-const NetworkState* NetworkStateHandler::ActiveNetwork() const {
+const NetworkState* NetworkStateHandler::DefaultNetwork() const {
if (network_list_.empty())
return NULL;
const NetworkState* network = network_list_.front()->AsNetworkState();
@@ -126,7 +126,7 @@ const NetworkState* NetworkStateHandler::ConnectedNetworkByType(
DCHECK(network);
if (!network->IsConnectedState())
break; // Connected networks are listed first.
- if (network->type() == type)
+ if (network->MatchesType(type))
return network;
}
return NULL;
@@ -142,10 +142,8 @@ const NetworkState* NetworkStateHandler::ConnectingNetworkByType(
continue;
if (!network->IsConnectingState())
break; // Connected and connecting networks are listed first.
- if (network->type() == type ||
- (type.empty() && type != flimflam::kTypeEthernet)) {
+ if (network->MatchesType(type))
return network;
- }
}
return NULL;
}
@@ -302,7 +300,7 @@ void NetworkStateHandler::UpdateManagedStateProperties(
NetworkState* network = managed->AsNetworkState();
DCHECK(network);
FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
- NetworkServiceChanged(network));
+ NetworkPropertyChanged(network));
}
network_event_log::AddEntry(
kLogModule, "PropertiesReceived",
@@ -316,15 +314,18 @@ void NetworkStateHandler::UpdateNetworkServiceProperty(
NetworkState* network = GetModifiableNetworkState(service_path);
if (!network)
return;
- if (ParseNetworkServiceProperty(network, key, value)) {
- std::string detail = network->name() + "." + key;
- std::string vstr;
- if (value.GetAsString(&vstr))
- detail += " = " + vstr;
- network_event_log::AddEntry(kLogModule, "NetworkPropertyChanged", detail);
- FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
- NetworkServiceChanged(network));
- }
+ std::string prev_state = network->state();
+ if (!ParseNetworkServiceProperty(network, key, value))
+ return;
+ if (key == flimflam::kStateProperty && network->state() == prev_state)
pneubeck (no reviews) 2012/12/19 15:22:38 Why is this required? The return value of ParseNet
stevenjb 2012/12/19 18:01:07 This logic is now in ParseNetworkServiceProperty,
pneubeck (no reviews) 2012/12/19 19:40:06 Yeah, I was confused by the line if (!network->P
+ return; // Ignore noop state updates
+ std::string detail = network->name() + "." + key;
+ std::string vstr;
+ if (value.GetAsString(&vstr))
+ detail += " = " + vstr;
+ network_event_log::AddEntry(kLogModule, "NetworkPropertyChanged", detail);
+ FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
+ NetworkPropertyChanged(network));
}
void NetworkStateHandler::UpdateNetworkServiceIPAddress(
@@ -338,7 +339,7 @@ void NetworkStateHandler::UpdateNetworkServiceIPAddress(
network->set_ip_address(ip_address);
FOR_EACH_OBSERVER(
NetworkStateHandlerObserver, observers_,
- NetworkServiceChanged(network));
+ NetworkPropertyChanged(network));
}
void NetworkStateHandler::ManagerPropertyChanged() {
@@ -357,19 +358,7 @@ void NetworkStateHandler::ManagedStateListChanged(
StringPrintf("Size: %"PRIuS, network_list_.size()));
FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
NetworkListChanged(network_list));
- // Update the active network and notify observers if it has changed.
- NetworkState* new_active_network =
- network_list_.empty() ? NULL : network_list_.front()->AsNetworkState();
- std::string new_active_network_path;
- if (new_active_network)
- new_active_network_path = new_active_network->path();
- if (new_active_network_path != active_network_path_) {
- network_event_log::AddEntry(
- kLogModule, "ActiveNetworkChanged", new_active_network_path);
- active_network_path_ = new_active_network_path;
- FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
- ActiveNetworkChanged(new_active_network));
- }
+ CheckDefaultNetworkChanged();
} else if (type == ManagedState::MANAGED_TYPE_DEVICE) {
network_event_log::AddEntry(
kLogModule, "DeviceListChanged",
@@ -432,12 +421,37 @@ bool NetworkStateHandler::ParseNetworkServiceProperty(
DCHECK(network);
if (!network->PropertyChanged(key, value))
return false;
- if (network->path() == active_network_path_ &&
- key == flimflam::kStateProperty) {
+ // Signal observers when the State changes.
+ if (key == flimflam::kStateProperty) {
+ std::string desc = StringPrintf(
+ "%s: %s", network->path().c_str(), network->state().c_str());
+ network_event_log::AddEntry(
+ kLogModule, "NetworkStateChanged", desc);
FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
- ActiveNetworkStateChanged(network));
+ NetworkStateChanged(network));
+ bool signaled_observers = CheckDefaultNetworkChanged();
+ if (!signaled_observers && network->path() == default_network_path_) {
+ // This was already the default network; signal observers.
+ FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
+ DefaultNetworkChanged(network));
+ }
}
return true;
}
+bool NetworkStateHandler::CheckDefaultNetworkChanged() {
+ std::string new_default_network_path;
+ const NetworkState* new_default_network = DefaultNetwork();
+ if (new_default_network)
+ new_default_network_path = new_default_network->path();
+ if (new_default_network_path == default_network_path_)
+ return false;
+ default_network_path_ = new_default_network_path;
+ network_event_log::AddEntry(
+ kLogModule, "DefaultNetworkChanged", new_default_network_path);
+ FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
+ DefaultNetworkChanged(new_default_network));
+ return true;
+}
+
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698