diff options
author | chocobo@google.com <chocobo@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-09 21:25:25 +0000 |
---|---|---|
committer | chocobo@google.com <chocobo@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-09 21:25:25 +0000 |
commit | 30583e481cc3798c362be6ac87a6639222225623 (patch) | |
tree | 4051d75db872f7543eeeefc05f78ae2ccd8546dd /chrome/browser/chromeos/network_library.cc | |
parent | 9d660ad65365698dee842371cc28ac461561dec2 (diff) | |
download | chromium_src-30583e481cc3798c362be6ac87a6639222225623.zip chromium_src-30583e481cc3798c362be6ac87a6639222225623.tar.gz chromium_src-30583e481cc3798c362be6ac87a6639222225623.tar.bz2 |
Add UI for turning on/off network devices.
BUG=26636
TEST=run skbitmap_operations_unittest
Review URL: http://codereview.chromium.org/353028
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@31478 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/network_library.cc')
-rw-r--r-- | chrome/browser/chromeos/network_library.cc | 72 |
1 files changed, 53 insertions, 19 deletions
diff --git a/chrome/browser/chromeos/network_library.cc b/chrome/browser/chromeos/network_library.cc index e4599a1..13e216d 100644 --- a/chrome/browser/chromeos/network_library.cc +++ b/chrome/browser/chromeos/network_library.cc @@ -29,7 +29,7 @@ const int NetworkLibrary::kNetworkTrafficeTimerSecs = 1; NetworkLibrary::NetworkLibrary() : traffic_type_(0), - ethernet_connected_(false) { + network_devices_(0) { if (CrosLibrary::loaded()) { Init(); } @@ -112,36 +112,44 @@ void NetworkLibrary::ConnectToWifiNetwork(WifiNetwork network, } } +void NetworkLibrary::EnableEthernetNetworkDevice(bool enable) { + EnableNetworkDevice(chromeos::TYPE_ETHERNET, enable); +} + +void NetworkLibrary::EnableWifiNetworkDevice(bool enable) { + EnableNetworkDevice(chromeos::TYPE_WIFI, enable); +} + // static void NetworkLibrary::NetworkStatusChangedHandler(void* object, const chromeos::ServiceStatus& service_status) { NetworkLibrary* network = static_cast<NetworkLibrary*>(object); WifiNetworkVector networks; - bool ethernet_connected; - ParseNetworks(service_status, &networks, ðernet_connected); - network->UpdateNetworkStatus(networks, ethernet_connected); + EthernetNetwork ethernet; + ParseNetworks(service_status, &networks, ðernet); + network->UpdateNetworkStatus(networks, ethernet); } // static void NetworkLibrary::ParseNetworks( const chromeos::ServiceStatus& service_status, WifiNetworkVector* networks, - bool* ethernet_connected) { - *ethernet_connected = false; + EthernetNetwork* ethernet) { + DLOG(INFO) << "ParseNetworks:"; for (int i = 0; i < service_status.size; i++) { const chromeos::ServiceInfo& service = service_status.services[i]; - DLOG(INFO) << "Parse " << service.ssid << + DLOG(INFO) << " " << service.ssid << " typ=" << service.type << " sta=" << service.state << " pas=" << service.needs_passphrase << " enc=" << service.encryption << " sig=" << service.signal_strength; + bool connecting = service.state == chromeos::STATE_ASSOCIATION || + service.state == chromeos::STATE_CONFIGURATION; + bool connected = service.state == chromeos::STATE_READY; if (service.type == chromeos::TYPE_ETHERNET) { - // Get the ethernet status. - *ethernet_connected = service.state == chromeos::STATE_READY; + ethernet->connecting = connecting; + ethernet->connected = connected; } else if (service.type == chromeos::TYPE_WIFI) { - bool connecting = service.state == chromeos::STATE_ASSOCIATION || - service.state == chromeos::STATE_CONFIGURATION; - bool connected = service.state == chromeos::STATE_READY; networks->push_back(WifiNetwork(service.ssid, service.needs_passphrase, service.encryption, @@ -159,30 +167,56 @@ void NetworkLibrary::Init() { if (service_status) { LOG(INFO) << "Getting initial CrOS network info."; WifiNetworkVector networks; - bool ethernet_connected; - ParseNetworks(*service_status, &networks, ðernet_connected); - UpdateNetworkStatus(networks, ethernet_connected); + EthernetNetwork ethernet; + ParseNetworks(*service_status, &networks, ðernet); + UpdateNetworkStatus(networks, ethernet); chromeos::FreeServiceStatus(service_status); } LOG(INFO) << "Registering for network status updates."; // Now, register to receive updates on network status. network_status_connection_ = chromeos::MonitorNetworkStatus( &NetworkStatusChangedHandler, this); + // Get the enabled network devices. + network_devices_ = chromeos::GetEnabledNetworkDevices(); +} + +void NetworkLibrary::EnableNetworkDevice(chromeos::ConnectionType device, + bool enable) { + if (!CrosLibrary::loaded()) + return; + + // If network device is already enabled/disabled, then don't do anything. + if (enable && (network_devices_ & device)) { + LOG(INFO) << "Trying to enable a network device that's already enabled: " + << device; + return; + } + if (!enable && !(network_devices_ & device)) { + LOG(INFO) << "Trying to disable a network device that's already disabled: " + << device; + return; + } + + if (chromeos::EnableNetworkDevice(device, enable)) { + if (enable) + network_devices_ |= device; + else + network_devices_ &= ~device; + } } void NetworkLibrary::UpdateNetworkStatus( - const WifiNetworkVector& networks, bool ethernet_connected) { + const WifiNetworkVector& networks, const EthernetNetwork& ethernet) { // Make sure we run on UI thread. if (!ChromeThread::CurrentlyOn(ChromeThread::UI)) { ChromeThread::PostTask( ChromeThread::UI, FROM_HERE, NewRunnableMethod(this, - &NetworkLibrary::UpdateNetworkStatus, networks, - ethernet_connected)); + &NetworkLibrary::UpdateNetworkStatus, networks, ethernet)); return; } - ethernet_connected_ = ethernet_connected; + ethernet_ = ethernet; wifi_networks_ = networks; // Sort the list of wifi networks by ssid. std::sort(wifi_networks_.begin(), wifi_networks_.end()); |