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

Side by Side Diff: chrome/browser/chromeos/cros/network_library.cc

Issue 2853001: Fix bug where auto-connect setting is not immediately saved.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/chromeos/cros/network_library.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/cros/network_library.h" 5 #include "chrome/browser/chromeos/cros/network_library.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
11 #include "chrome/browser/chrome_thread.h" 11 #include "chrome/browser/chrome_thread.h"
12 #include "chrome/browser/chromeos/cros/cros_library.h" 12 #include "chrome/browser/chromeos/cros/cros_library.h"
13 #include "net/url_request/url_request_job.h" 13 #include "net/url_request/url_request_job.h"
14 14
15 // Allows InvokeLater without adding refcounting. This class is a Singleton and 15 // Allows InvokeLater without adding refcounting. This class is a Singleton and
16 // won't be deleted until it's last InvokeLater is run. 16 // won't be deleted until it's last InvokeLater is run.
17 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImpl); 17 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImpl);
18 18
19 namespace chromeos { 19 namespace chromeos {
20 20
21 static const std::string kGoogleWifi = "Google";
21 static const std::string kGoogleAWifi = "Google-A"; 22 static const std::string kGoogleAWifi = "Google-A";
22 23
23 // Helper function to wrap Html with <th> tag. 24 // Helper function to wrap Html with <th> tag.
24 static std::string WrapWithTH(std::string text) { 25 static std::string WrapWithTH(std::string text) {
25 return "<th>" + text + "</th>"; 26 return "<th>" + text + "</th>";
26 } 27 }
27 28
28 // Helper function to wrap Html with <td> tag. 29 // Helper function to wrap Html with <td> tag.
29 static std::string WrapWithTD(std::string text) { 30 static std::string WrapWithTD(std::string text) {
30 return "<td>" + text + "</td>"; 31 return "<td>" + text + "</td>";
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 void NetworkLibraryImpl::RequestWifiScan() { 251 void NetworkLibraryImpl::RequestWifiScan() {
251 if (CrosLibrary::Get()->EnsureLoaded()) { 252 if (CrosLibrary::Get()->EnsureLoaded()) {
252 RequestScan(TYPE_WIFI); 253 RequestScan(TYPE_WIFI);
253 } 254 }
254 } 255 }
255 256
256 bool NetworkLibraryImpl::ConnectToPreferredNetworkIfAvailable() { 257 bool NetworkLibraryImpl::ConnectToPreferredNetworkIfAvailable() {
257 // TODO(chocobo): Add the concept of preferred network to libcros. 258 // TODO(chocobo): Add the concept of preferred network to libcros.
258 // So that we don't have to hard-code Google-A here. 259 // So that we don't have to hard-code Google-A here.
259 if (CrosLibrary::Get()->EnsureLoaded()) { 260 if (CrosLibrary::Get()->EnsureLoaded()) {
260 LOG(INFO) << "Attempting to auto-connect to Google-A wifi."; 261 LOG(INFO) << "Attempting to auto-connect to Google wifi.";
261 // First force a refresh of the system info. 262 // First force a refresh of the system info.
262 UpdateSystemInfo(); 263 UpdateSystemInfo();
263 264
264 // If ethernet is connected, then don't bother. 265 // If ethernet is connected, then don't bother.
265 if (ethernet_connected()) { 266 if (ethernet_connected()) {
266 LOG(INFO) << "Ethernet connected, so don't need Google-A."; 267 LOG(INFO) << "Ethernet connected, so don't need Google wifi.";
267 return false; 268 return false;
268 } 269 }
269 270
270 // Find Google-A network. 271 // First look for Google-A then look for Google.
271 WifiNetwork wifi; 272 // Only care if set to auto-connect.
272 bool found = GetWifiNetworkByName(kGoogleAWifi, &wifi); 273 WifiNetwork* wifi = GetWifiNetworkByName(kGoogleAWifi);
273 if (!found) { 274 // If wifi found and set to not auto-connect, then ignore it.
274 LOG(INFO) << "Google-A wifi not found."; 275 if (wifi && !wifi->auto_connect())
276 wifi = NULL;
277
278 if (!wifi) {
279 wifi = GetWifiNetworkByName(kGoogleWifi);
280 // If wifi found and set to not auto-connect, then ignore it.
281 if (wifi && !wifi->auto_connect())
282 wifi = NULL;
283 }
284
285 if (!wifi) {
286 LOG(INFO) << "Google-A/Google wifi not found or set to not auto-connect.";
275 return false; 287 return false;
276 } 288 }
277 289
278 // Make sure we want to auto-connect. 290 // Save the wifi path, so we know which one we want to auto-connect to.
279 // Since auto-connect is true, we assume the identity and certificate 291 const std::string wifi_path = wifi->service_path();
280 // is setup propertly. If it's not, the connection will fail.
281 if (!wifi.auto_connect()) {
282 LOG(INFO) << "Google-A wifi is set to not auto-connect.";
283 return false;
284 }
285 292
286 // It takes some time for the enterprise daemon to start up and populate the 293 // It takes some time for the enterprise daemon to start up and populate the
287 // certificate and identity. So we wait at most 3 seconds here. And every 294 // certificate and identity. So we wait at most 3 seconds here. And every
288 // 100ms, we refetch the system info and check the cert and identify on the 295 // 100ms, we refetch the system info and check the cert and identify on the
289 // wifi. The enterprise daemon takes between 0.4 to 0.9 seconds to setup. 296 // wifi. The enterprise daemon takes between 0.4 to 0.9 seconds to setup.
290 bool setup = false; 297 bool setup = false;
291 for (int i = 0; i < 30; i++) { 298 for (int i = 0; i < 30; i++) {
292 // Update the system and refetch the network. 299 // Update the system and refetch the network.
293 UpdateSystemInfo(); 300 UpdateSystemInfo();
294 GetWifiNetworkByName(kGoogleAWifi, &wifi); 301 wifi = GetWifiNetworkByPath(wifi_path);
295 // See if identity and certpath are available. 302 // See if identity and certpath are available.
296 if (!wifi.identity().empty() && !wifi.cert_path().empty()) { 303 if (wifi && !wifi->identity().empty() && !wifi->cert_path().empty()) {
297 LOG(INFO) << "Google-A wifi set up after " << (i*0.1) << " seconds."; 304 LOG(INFO) << "Google wifi set up after " << (i*0.1) << " seconds.";
298 setup = true; 305 setup = true;
299 break; 306 break;
300 } 307 }
301 PlatformThread::Sleep(100); 308 PlatformThread::Sleep(100);
302 } 309 }
303 310
304 if (!setup) { 311 if (!setup) {
305 LOG(INFO) << "Google-A wifi not set up after 3 seconds."; 312 LOG(INFO) << "Google wifi not set up after 3 seconds.";
306 return false; 313 return false;
307 } 314 }
308 315
309 // Now that we have a setup Google-A, we can connect to it. 316 // Now that we have a setup Google wifi, we can connect to it.
310 ConnectToNetwork(wifi.service_path().c_str(), NULL); 317 ConnectToNetwork(wifi_path.c_str(), NULL);
311 return true; 318 return true;
312 } 319 }
313 return false; 320 return false;
314 } 321 }
315 322
316 bool NetworkLibraryImpl::PreferredNetworkConnected() { 323 bool NetworkLibraryImpl::PreferredNetworkConnected() {
317 WifiNetwork wifi; 324 WifiNetwork* wifi = GetWifiNetworkByName(kGoogleAWifi);
318 bool found = GetWifiNetworkByName(kGoogleAWifi, &wifi); 325 return wifi && wifi->connected();
319 return found && wifi.connected();
320 } 326 }
321 327
322 bool NetworkLibraryImpl::PreferredNetworkFailed() { 328 bool NetworkLibraryImpl::PreferredNetworkFailed() {
323 WifiNetwork wifi; 329 WifiNetwork* wifi = GetWifiNetworkByName(kGoogleAWifi);
324 bool found = GetWifiNetworkByName(kGoogleAWifi, &wifi); 330 return !wifi || wifi->failed();
325 return !found || wifi.failed();
326 } 331 }
327 332
328 void NetworkLibraryImpl::ConnectToWifiNetwork(WifiNetwork network, 333 void NetworkLibraryImpl::ConnectToWifiNetwork(WifiNetwork network,
329 const string16& password, 334 const string16& password,
330 const string16& identity, 335 const string16& identity,
331 const string16& certpath) { 336 const string16& certpath) {
332 if (CrosLibrary::Get()->EnsureLoaded()) { 337 if (CrosLibrary::Get()->EnsureLoaded()) {
333 ConnectToNetworkWithCertInfo(network.service_path().c_str(), 338 ConnectToNetworkWithCertInfo(network.service_path().c_str(),
334 password.empty() ? NULL : UTF16ToUTF8(password).c_str(), 339 password.empty() ? NULL : UTF16ToUTF8(password).c_str(),
335 identity.empty() ? NULL : UTF16ToUTF8(identity).c_str(), 340 identity.empty() ? NULL : UTF16ToUTF8(identity).c_str(),
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 } 376 }
372 377
373 void NetworkLibraryImpl::DisconnectFromWirelessNetwork( 378 void NetworkLibraryImpl::DisconnectFromWirelessNetwork(
374 const WirelessNetwork& network) { 379 const WirelessNetwork& network) {
375 if (CrosLibrary::Get()->EnsureLoaded()) { 380 if (CrosLibrary::Get()->EnsureLoaded()) {
376 DisconnectFromNetwork(network.service_path().c_str()); 381 DisconnectFromNetwork(network.service_path().c_str());
377 } 382 }
378 } 383 }
379 384
380 void NetworkLibraryImpl::SaveWifiNetwork(const WifiNetwork& network) { 385 void NetworkLibraryImpl::SaveWifiNetwork(const WifiNetwork& network) {
386 // Update the wifi network in the local cache.
387 WifiNetwork* wifi = GetWifiNetworkByPath(network.service_path());
388 if (wifi)
389 *wifi = network;
390
391 // Update the wifi network with libcros.
381 if (CrosLibrary::Get()->EnsureLoaded()) { 392 if (CrosLibrary::Get()->EnsureLoaded()) {
382 SetPassphrase(network.service_path().c_str(), network.passphrase().c_str()); 393 SetPassphrase(network.service_path().c_str(), network.passphrase().c_str());
383 SetIdentity(network.service_path().c_str(), network.identity().c_str()); 394 SetIdentity(network.service_path().c_str(), network.identity().c_str());
384 SetCertPath(network.service_path().c_str(), network.cert_path().c_str()); 395 SetCertPath(network.service_path().c_str(), network.cert_path().c_str());
385 SetAutoConnect(network.service_path().c_str(), network.auto_connect()); 396 SetAutoConnect(network.service_path().c_str(), network.auto_connect());
386 } 397 }
387 } 398 }
388 399
389 void NetworkLibraryImpl::ForgetWirelessNetwork(const WirelessNetwork& network) { 400 void NetworkLibraryImpl::ForgetWirelessNetwork(const WirelessNetwork& network) {
390 if (CrosLibrary::Get()->EnsureLoaded()) { 401 if (CrosLibrary::Get()->EnsureLoaded()) {
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 } 584 }
574 585
575 void NetworkLibraryImpl::UpdateSystemInfo() { 586 void NetworkLibraryImpl::UpdateSystemInfo() {
576 SystemInfo* system = GetSystemInfo(); 587 SystemInfo* system = GetSystemInfo();
577 if (system) { 588 if (system) {
578 UpdateNetworkStatus(system); 589 UpdateNetworkStatus(system);
579 FreeSystemInfo(system); 590 FreeSystemInfo(system);
580 } 591 }
581 } 592 }
582 593
583 bool NetworkLibraryImpl::GetWifiNetworkByName(const std::string& name, 594 WifiNetwork* NetworkLibraryImpl::GetWifiNetworkByName(const std::string& name) {
584 WifiNetwork* wifi) {
585 for (size_t i = 0; i < wifi_networks_.size(); ++i) { 595 for (size_t i = 0; i < wifi_networks_.size(); ++i) {
586 if (wifi_networks_[i].name().compare(name) == 0) { 596 if (wifi_networks_[i].name().compare(name) == 0) {
587 *wifi = wifi_networks_[i]; 597 return &wifi_networks_[i];
588 return true;
589 } 598 }
590 } 599 }
591 return false; 600 return NULL;
601 }
602
603 WifiNetwork* NetworkLibraryImpl::GetWifiNetworkByPath(const std::string& path) {
604 for (size_t i = 0; i < wifi_networks_.size(); ++i) {
605 if (wifi_networks_[i].service_path().compare(path) == 0) {
606 return &wifi_networks_[i];
607 }
608 }
609 return NULL;
592 } 610 }
593 611
594 void NetworkLibraryImpl::EnableNetworkDeviceType(ConnectionType device, 612 void NetworkLibraryImpl::EnableNetworkDeviceType(ConnectionType device,
595 bool enable) { 613 bool enable) {
596 if (!CrosLibrary::Get()->EnsureLoaded()) 614 if (!CrosLibrary::Get()->EnsureLoaded())
597 return; 615 return;
598 616
599 // If network device is already enabled/disabled, then don't do anything. 617 // If network device is already enabled/disabled, then don't do anything.
600 if (enable && (enabled_devices_ & (1 << device))) { 618 if (enable && (enabled_devices_ & (1 << device))) {
601 LOG(WARNING) << "Trying to enable a device that's already enabled: " 619 LOG(WARNING) << "Trying to enable a device that's already enabled: "
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 if (ethernet_connected()) 724 if (ethernet_connected())
707 return ethernet_.ip_address(); 725 return ethernet_.ip_address();
708 if (wifi_connected()) 726 if (wifi_connected())
709 return wifi_.ip_address(); 727 return wifi_.ip_address();
710 if (cellular_connected()) 728 if (cellular_connected())
711 return cellular_.ip_address(); 729 return cellular_.ip_address();
712 return ethernet_.ip_address(); 730 return ethernet_.ip_address();
713 } 731 }
714 732
715 } // namespace chromeos 733 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/cros/network_library.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698