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

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: Rebase 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
« no previous file with comments | « chromeos/network/network_state_handler.h ('k') | chromeos/network/network_state_handler_observer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..b1873a15eb2e44a19d27b9397beffe25e1a43e75 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;
}
@@ -285,24 +283,24 @@ void NetworkStateHandler::UpdateManagedStateProperties(
LOG(ERROR) << "GetPropertiesCallback: " << path << " Not found!";
return;
}
- bool network_property_changed = false;
+ bool network_property_updated = false;
for (base::DictionaryValue::Iterator iter(properties);
iter.HasNext(); iter.Advance()) {
if (type == ManagedState::MANAGED_TYPE_NETWORK) {
if (ParseNetworkServiceProperty(
managed->AsNetworkState(), iter.key(), iter.value())) {
- network_property_changed = true;
+ network_property_updated = true;
}
} else {
managed->PropertyChanged(iter.key(), iter.value());
}
}
// Notify observers.
- if (network_property_changed) {
+ if (network_property_updated) {
NetworkState* network = managed->AsNetworkState();
DCHECK(network);
FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
- NetworkServiceChanged(network));
+ NetworkPropertiesUpdated(network));
}
network_event_log::AddEntry(
kLogModule, "PropertiesReceived",
@@ -316,15 +314,15 @@ 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));
- }
+ if (!ParseNetworkServiceProperty(network, key, value))
+ return;
+ std::string detail = network->name() + "." + key;
+ std::string vstr;
+ if (value.GetAsString(&vstr))
+ detail += " = " + vstr;
+ network_event_log::AddEntry(kLogModule, "NetworkPropertiesUpdated", detail);
+ FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
+ NetworkPropertiesUpdated(network));
}
void NetworkStateHandler::UpdateNetworkServiceIPAddress(
@@ -338,7 +336,7 @@ void NetworkStateHandler::UpdateNetworkServiceIPAddress(
network->set_ip_address(ip_address);
FOR_EACH_OBSERVER(
NetworkStateHandlerObserver, observers_,
- NetworkServiceChanged(network));
+ NetworkPropertiesUpdated(network));
}
void NetworkStateHandler::ManagerPropertyChanged() {
@@ -357,19 +355,8 @@ 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));
- }
+ // The list order may have changed, so check if the default network changed.
+ CheckDefaultNetworkChanged();
} else if (type == ManagedState::MANAGED_TYPE_DEVICE) {
network_event_log::AddEntry(
kLogModule, "DeviceListChanged",
@@ -430,14 +417,45 @@ bool NetworkStateHandler::ParseNetworkServiceProperty(
const std::string& key,
const base::Value& value) {
DCHECK(network);
+ std::string prev_connection_state = network->connection_state();
if (!network->PropertyChanged(key, value))
return false;
- if (network->path() == active_network_path_ &&
- key == flimflam::kStateProperty) {
+ if (key == flimflam::kStateProperty &&
+ network->connection_state() != prev_connection_state)
+ OnNetworkConnectionStateChanged(network);
+ return true;
+}
+
+bool NetworkStateHandler::OnNetworkConnectionStateChanged(
+ NetworkState* network) {
+ std::string desc = StringPrintf(
+ "%s: %s", network->path().c_str(), network->connection_state().c_str());
+ network_event_log::AddEntry(
+ kLogModule, "NetworkConnectionStateChanged", desc);
+ FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
+ NetworkConnectionStateChanged(network));
+ bool signaled_observers = CheckDefaultNetworkChanged();
+ if (!signaled_observers && network->path() == default_network_path_) {
gauravsh 2012/12/19 23:48:00 CheckDefaultNetworkChanged() could perhaps use a b
stevenjb 2012/12/20 02:17:50 Split out logging and notification from CheckDefau
+ // This was already the default network; signal observers.
FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
gauravsh 2012/12/19 23:48:00 You don't log DefaultNetworkChanged to the event l
stevenjb 2012/12/20 02:17:50 Yes, thanks. Fixed with splitting CheckDefaultNetw
- ActiveNetworkStateChanged(network));
+ 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
« no previous file with comments | « chromeos/network/network_state_handler.h ('k') | chromeos/network/network_state_handler_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698