summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/network_library.cc
diff options
context:
space:
mode:
authorchocobo@google.com <chocobo@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-09 21:25:25 +0000
committerchocobo@google.com <chocobo@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-09 21:25:25 +0000
commit30583e481cc3798c362be6ac87a6639222225623 (patch)
tree4051d75db872f7543eeeefc05f78ae2ccd8546dd /chrome/browser/chromeos/network_library.cc
parent9d660ad65365698dee842371cc28ac461561dec2 (diff)
downloadchromium_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.cc72
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, &ethernet_connected);
- network->UpdateNetworkStatus(networks, ethernet_connected);
+ EthernetNetwork ethernet;
+ ParseNetworks(service_status, &networks, &ethernet);
+ 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, &ethernet_connected);
- UpdateNetworkStatus(networks, ethernet_connected);
+ EthernetNetwork ethernet;
+ ParseNetworks(*service_status, &networks, &ethernet);
+ 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());