diff options
author | chocobo@google.com <chocobo@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-09 22:45:01 +0000 |
---|---|---|
committer | chocobo@google.com <chocobo@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-09 22:45:01 +0000 |
commit | 1f37cf1e1302c79aa4f1854633c7b38d05432155 (patch) | |
tree | 28b7757852b825ecdfb28ceb0bea881cbc144fb9 | |
parent | 747ca431003f9b1a3f09af01484931888c066164 (diff) | |
download | chromium_src-1f37cf1e1302c79aa4f1854633c7b38d05432155.zip chromium_src-1f37cf1e1302c79aa4f1854633c7b38d05432155.tar.gz chromium_src-1f37cf1e1302c79aa4f1854633c7b38d05432155.tar.bz2 |
A couple fixes for network cros library
- no need to send updates after connecting to wifi. the cros api will handle this.
- clear state before parsing ServiceStatus in case the network no longer exists.
BUG=23923
TEST=none
Review URL: http://codereview.chromium.org/271038
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28617 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/cros_network_library.cc | 91 | ||||
-rw-r--r-- | chrome/browser/chromeos/cros_network_library.h | 8 |
2 files changed, 42 insertions, 57 deletions
diff --git a/chrome/browser/chromeos/cros_network_library.cc b/chrome/browser/chromeos/cros_network_library.cc index fa55fca..4b37aaf 100644 --- a/chrome/browser/chromeos/cros_network_library.cc +++ b/chrome/browser/chromeos/cros_network_library.cc @@ -14,7 +14,9 @@ CrosNetworkLibrary::CrosNetworkLibrary() wifi_connecting_(false), wifi_strength_(0) { if (CrosLibrary::loaded()) { - InitNetworkStatus(); + chromeos::ServiceStatus* service_status = chromeos::GetAvailableNetworks(); + UpdateNetworkServiceStatus(*service_status); + chromeos::FreeServiceStatus(service_status); chromeos::MonitorNetworkStatus(&NetworkStatusChangedHandler, this); } } @@ -75,69 +77,54 @@ static const char* GetEncryptionString(chromeos::EncryptionType encryption) { void CrosNetworkLibrary::ConnectToWifiNetwork(WifiNetwork network, const string16& password) { - bool ok = true; - if (CrosLibrary::loaded()) { - ok = chromeos::ConnectToWifiNetwork(network.ssid.c_str(), + if (CrosLibrary::loaded()) + chromeos::ConnectToWifiNetwork(network.ssid.c_str(), password.empty() ? NULL : UTF16ToUTF8(password).c_str(), GetEncryptionString(network.encryption)); - } - if (ok) { - // Notify all observers that connection has started. - wifi_ssid_ = network.ssid; - wifi_connecting_ = true; - wifi_strength_ = network.strength; - FOR_EACH_OBSERVER(Observer, observers_, NetworkChanged(this)); - } } // static void CrosNetworkLibrary::NetworkStatusChangedHandler(void* object, const chromeos::ServiceStatus& service_status) { CrosNetworkLibrary* network = static_cast<CrosNetworkLibrary*>(object); - for (int i = 0; i < service_status.size; i++) - network->ParseNetworkServiceInfo(service_status.services[i]); + network->UpdateNetworkServiceStatus(service_status); FOR_EACH_OBSERVER(Observer, network->observers_, NetworkChanged(network)); } -void CrosNetworkLibrary::ParseNetworkServiceInfo( - const chromeos::ServiceInfo& service) { - DLOG(INFO) << "Parse " << service.ssid << - " typ=" << service.type << - " sta=" << service.state << - " pas=" << service.needs_passphrase << - " enc=" << service.encryption << - " sig=" << service.signal_strength; - if (service.type == chromeos::TYPE_ETHERNET) { - // Get the ethernet status. - ethernet_connected_ = service.state == chromeos::STATE_READY; - } else if (service.type == chromeos::TYPE_WIFI) { - if (service.state == chromeos::STATE_READY) { - // Record the wifi network that is connected. - wifi_ssid_ = service.ssid; - wifi_connecting_ = false; - wifi_strength_ = service.signal_strength; - } else if (service.state == chromeos::STATE_ASSOCIATION || - service.state == chromeos::STATE_CONFIGURATION) { - // Record the wifi network that is connecting. - wifi_ssid_ = service.ssid; - wifi_connecting_ = true; - wifi_strength_ = service.signal_strength; - } else { - // A wifi network is disconnected. - // If it is the current connected (or connecting) wifi network, then - // we are currently disconnected from any wifi network. - if (service.ssid == wifi_ssid_) { - wifi_ssid_.clear(); - wifi_connecting_ = false; - wifi_strength_ = 0; +void CrosNetworkLibrary::UpdateNetworkServiceStatus( + const chromeos::ServiceStatus& service_status) { + // Loop through the services and figure out what the current state is. + bool found_ethernet = false; + bool found_wifi = false; + for (int i = 0; i < service_status.size; i++) { + const chromeos::ServiceInfo& service = service_status.services[i]; + DLOG(INFO) << "Parse " << service.ssid << + " typ=" << service.type << + " sta=" << service.state << + " pas=" << service.needs_passphrase << + " enc=" << service.encryption << + " sig=" << service.signal_strength; + if (service.type == chromeos::TYPE_ETHERNET) { + found_ethernet = true; + // Get the ethernet status. + ethernet_connected_ = service.state == chromeos::STATE_READY; + } else if (service.type == chromeos::TYPE_WIFI) { + if (service.state == chromeos::STATE_READY || + service.state == chromeos::STATE_ASSOCIATION || + service.state == chromeos::STATE_CONFIGURATION) { + found_wifi = true; + // Record the wifi network that is connected. + wifi_ssid_ = service.ssid; + wifi_connecting_ = service.state != chromeos::STATE_READY; + wifi_strength_ = service.signal_strength; } } } -} - -void CrosNetworkLibrary::InitNetworkStatus() { - chromeos::ServiceStatus* service_status = chromeos::GetAvailableNetworks(); - for (int i = 0; i < service_status->size; i++) - ParseNetworkServiceInfo(service_status->services[i]); - chromeos::FreeServiceStatus(service_status); + if (!found_ethernet) + ethernet_connected_ = false; + if (!found_wifi) { + wifi_ssid_.clear(); + wifi_connecting_ = false; + wifi_strength_ = 0; + } } diff --git a/chrome/browser/chromeos/cros_network_library.h b/chrome/browser/chromeos/cros_network_library.h index 884282b..a400a25 100644 --- a/chrome/browser/chromeos/cros_network_library.h +++ b/chrome/browser/chromeos/cros_network_library.h @@ -75,11 +75,9 @@ class CrosNetworkLibrary { static void NetworkStatusChangedHandler(void* object, const chromeos::ServiceStatus& service_status); - // Parse a ServiceInfo objects and update our status. - void ParseNetworkServiceInfo(const chromeos::ServiceInfo& service); - - // Initialize the network status on startup. - void InitNetworkStatus(); + // Update the network with the ServiceStatus. + void UpdateNetworkServiceStatus( + const chromeos::ServiceStatus& service_status); ObserverList<Observer> observers_; |