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

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

Issue 4169001: Rewritten parts of NetworkLibrary to work around memory corruption that prev... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 1 month 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
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 #include <map> 8 #include <map>
9 9
10 #include "app/l10n_util.h" 10 #include "app/l10n_util.h"
11 #include "base/stl_util-inl.h"
11 #include "base/string_number_conversions.h" 12 #include "base/string_number_conversions.h"
12 #include "base/string_util.h" 13 #include "base/string_util.h"
13 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
14 #include "chrome/browser/browser_thread.h" 15 #include "chrome/browser/browser_thread.h"
15 #include "chrome/browser/chromeos/cros/cros_library.h" 16 #include "chrome/browser/chromeos/cros/cros_library.h"
16 #include "grit/generated_resources.h" 17 #include "grit/generated_resources.h"
17 18
18 namespace chromeos { 19 namespace chromeos {
19 20
20 // Helper function to wrap Html with <th> tag. 21 // Helper function to wrap Html with <th> tag.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 LOG(ERROR) << "chromeos_library calls made from non UI thread!"; 77 LOG(ERROR) << "chromeos_library calls made from non UI thread!";
77 NOTREACHED(); 78 NOTREACHED();
78 } 79 }
79 return true; 80 return true;
80 } 81 }
81 } 82 }
82 83
83 //////////////////////////////////////////////////////////////////////////////// 84 ////////////////////////////////////////////////////////////////////////////////
84 // Network 85 // Network
85 86
87 Network::Network(const Network& network) {
88 service_path_ = network.service_path();
89 device_path_ = network.device_path();
90 ip_address_ = network.ip_address();
91 type_ = network.type();
92 state_ = network.state();
93 error_ = network.error();
94 }
95
86 void Network::Clear() { 96 void Network::Clear() {
87 state_ = STATE_UNKNOWN; 97 state_ = STATE_UNKNOWN;
88 error_ = ERROR_UNKNOWN; 98 error_ = ERROR_UNKNOWN;
89 service_path_.clear(); 99 service_path_.clear();
90 device_path_.clear(); 100 device_path_.clear();
91 ip_address_.clear(); 101 ip_address_.clear();
92 } 102 }
93 103
94 void Network::ConfigureFromService(const ServiceInfo& service) { 104 Network::Network(const ServiceInfo* service) {
95 type_ = service.type; 105 type_ = service->type;
96 state_ = service.state; 106 state_ = service->state;
97 error_ = service.error; 107 error_ = service->error;
98 service_path_ = SafeString(service.service_path); 108 service_path_ = SafeString(service->service_path);
99 device_path_ = SafeString(service.device_path); 109 device_path_ = SafeString(service->device_path);
100 ip_address_.clear(); 110 ip_address_.clear();
101 // If connected, get ip config. 111 // If connected, get ip config.
102 if (EnsureCrosLoaded() && connected() && service.device_path) { 112 if (EnsureCrosLoaded() && connected() && service->device_path) {
103 IPConfigStatus* ipconfig_status = ListIPConfigs(service.device_path); 113 IPConfigStatus* ipconfig_status = ListIPConfigs(service->device_path);
104 if (ipconfig_status) { 114 if (ipconfig_status) {
105 for (int i = 0; i < ipconfig_status->size; i++) { 115 for (int i = 0; i < ipconfig_status->size; i++) {
106 IPConfig ipconfig = ipconfig_status->ips[i]; 116 IPConfig ipconfig = ipconfig_status->ips[i];
107 if (strlen(ipconfig.address) > 0) 117 if (strlen(ipconfig.address) > 0)
108 ip_address_ = ipconfig.address; 118 ip_address_ = ipconfig.address;
109 } 119 }
110 FreeIPConfigStatus(ipconfig_status); 120 FreeIPConfigStatus(ipconfig_status);
111 } 121 }
112 } 122 }
113 } 123 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 return l10n_util::GetStringUTF8(IDS_CHROMEOS_NETWORK_ERROR_AAA_FAILED); 183 return l10n_util::GetStringUTF8(IDS_CHROMEOS_NETWORK_ERROR_AAA_FAILED);
174 default: 184 default:
175 // Usually no default, but changes to libcros may add errors. 185 // Usually no default, but changes to libcros may add errors.
176 break; 186 break;
177 } 187 }
178 return l10n_util::GetStringUTF8(IDS_CHROMEOS_NETWORK_STATE_UNRECOGNIZED); 188 return l10n_util::GetStringUTF8(IDS_CHROMEOS_NETWORK_STATE_UNRECOGNIZED);
179 } 189 }
180 190
181 //////////////////////////////////////////////////////////////////////////////// 191 ////////////////////////////////////////////////////////////////////////////////
182 // WirelessNetwork 192 // WirelessNetwork
193 WirelessNetwork::WirelessNetwork(const WirelessNetwork& network)
194 : Network(network) {
195 name_ = network.name();
196 strength_ = network.strength();
197 auto_connect_ = network.auto_connect();
198 favorite_ = network.favorite();
199 }
200
201 WirelessNetwork::WirelessNetwork(const ServiceInfo* service)
202 : Network(service) {
203 name_ = SafeString(service->name);
204 strength_ = service->strength;
205 auto_connect_ = service->auto_connect;
206 favorite_ = service->favorite;
207 }
183 208
184 void WirelessNetwork::Clear() { 209 void WirelessNetwork::Clear() {
185 Network::Clear(); 210 Network::Clear();
186 name_.clear(); 211 name_.clear();
187 strength_ = 0; 212 strength_ = 0;
188 auto_connect_ = false; 213 auto_connect_ = false;
189 favorite_ = false; 214 favorite_ = false;
190 } 215 }
191 216
192 void WirelessNetwork::ConfigureFromService(const ServiceInfo& service) {
193 Network::ConfigureFromService(service);
194 name_ = SafeString(service.name);
195 strength_ = service.strength;
196 auto_connect_ = service.auto_connect;
197 favorite_ = service.favorite;
198 }
199
200 217
201 //////////////////////////////////////////////////////////////////////////////// 218 ////////////////////////////////////////////////////////////////////////////////
202 // CellularNetwork 219 // CellularNetwork
203 220
204 CellularNetwork::CellularNetwork() 221 CellularNetwork::CellularNetwork()
205 : WirelessNetwork(), 222 : WirelessNetwork(),
206 activation_state_(ACTIVATION_STATE_UNKNOWN), 223 activation_state_(ACTIVATION_STATE_UNKNOWN),
207 network_technology_(NETWORK_TECHNOLOGY_UNKNOWN), 224 network_technology_(NETWORK_TECHNOLOGY_UNKNOWN),
208 roaming_state_(ROAMING_STATE_UNKNOWN), 225 roaming_state_(ROAMING_STATE_UNKNOWN),
209 restricted_pool_(false), 226 restricted_pool_(false),
210 prl_version_(0) { 227 prl_version_(0) {
211 type_ = TYPE_CELLULAR; 228 type_ = TYPE_CELLULAR;
212 } 229 }
213 230
231 CellularNetwork::CellularNetwork(const CellularNetwork& network)
232 : WirelessNetwork(network) {
233 activation_state_ = network.activation_state();
234 network_technology_ = network.network_technology();
235 roaming_state_ = network.roaming_state();
236 restricted_pool_ = network.restricted_pool();
237 service_name_ = network.service_name();
238 operator_name_ = network.operator_name();
239 operator_code_ = network.operator_code();
240 payment_url_ = network.payment_url();
241 meid_ = network.meid();
242 imei_ = network.imei();
243 imsi_ = network.imsi();
244 esn_ = network.esn();
245 mdn_ = network.mdn();
246 min_ = network.min();
247 model_id_ = network.model_id();
248 manufacturer_ = network.manufacturer();
249 firmware_revision_ = network.firmware_revision();
250 hardware_revision_ = network.hardware_revision();
251 last_update_ = network.last_update();
252 prl_version_ = network.prl_version();
253 type_ = TYPE_CELLULAR;
254 }
255
256 CellularNetwork::CellularNetwork(const ServiceInfo* service)
257 : WirelessNetwork(service) {
258 service_name_ = SafeString(service->name);
259 activation_state_ = service->activation_state;
260 network_technology_ = service->network_technology;
261 roaming_state_ = service->roaming_state;
262 restricted_pool_ = service->restricted_pool;
263 // Carrier Info
264 if (service->carrier_info) {
265 operator_name_ = SafeString(service->carrier_info->operator_name);
266 operator_code_ = SafeString(service->carrier_info->operator_code);
267 payment_url_ = SafeString(service->carrier_info->payment_url);
268 }
269 // Device Info
270 if (service->device_info) {
271 meid_ = SafeString(service->device_info->MEID);
272 imei_ = SafeString(service->device_info->IMEI);
273 imsi_ = SafeString(service->device_info->IMSI);
274 esn_ = SafeString(service->device_info->ESN);
275 mdn_ = SafeString(service->device_info->MDN);
276 min_ = SafeString(service->device_info->MIN);
277 model_id_ = SafeString(service->device_info->model_id);
278 manufacturer_ = SafeString(service->device_info->manufacturer);
279 firmware_revision_ = SafeString(service->device_info->firmware_revision);
280 hardware_revision_ = SafeString(service->device_info->hardware_revision);
281 last_update_ = SafeString(service->device_info->last_update);
282 prl_version_ = service->device_info->PRL_version;
283 }
284 type_ = TYPE_CELLULAR;
285 }
286
214 bool CellularNetwork::StartActivation() const { 287 bool CellularNetwork::StartActivation() const {
215 if (!EnsureCrosLoaded()) 288 if (!EnsureCrosLoaded())
216 return false; 289 return false;
217 return ActivateCellularModem(service_path_.c_str(), NULL); 290 return ActivateCellularModem(service_path_.c_str(), NULL);
218 } 291 }
219 292
220 void CellularNetwork::Clear() { 293 void CellularNetwork::Clear() {
221 WirelessNetwork::Clear(); 294 WirelessNetwork::Clear();
222 activation_state_ = ACTIVATION_STATE_UNKNOWN; 295 activation_state_ = ACTIVATION_STATE_UNKNOWN;
223 roaming_state_ = ROAMING_STATE_UNKNOWN; 296 roaming_state_ = ROAMING_STATE_UNKNOWN;
(...skipping 10 matching lines...) Expand all
234 mdn_.clear(); 307 mdn_.clear();
235 min_.clear(); 308 min_.clear();
236 model_id_.clear(); 309 model_id_.clear();
237 manufacturer_.clear(); 310 manufacturer_.clear();
238 firmware_revision_.clear(); 311 firmware_revision_.clear();
239 hardware_revision_.clear(); 312 hardware_revision_.clear();
240 last_update_.clear(); 313 last_update_.clear();
241 prl_version_ = 0; 314 prl_version_ = 0;
242 } 315 }
243 316
244 void CellularNetwork::ConfigureFromService(const ServiceInfo& service) {
245 WirelessNetwork::ConfigureFromService(service);
246 service_name_ = SafeString(service.name);
247 activation_state_ = service.activation_state;
248 network_technology_ = service.network_technology;
249 roaming_state_ = service.roaming_state;
250 restricted_pool_ = service.restricted_pool;
251 // Carrier Info
252 if (service.carrier_info) {
253 operator_name_ = SafeString(service.carrier_info->operator_name);
254 operator_code_ = SafeString(service.carrier_info->operator_code);
255 payment_url_ = SafeString(service.carrier_info->payment_url);
256 }
257 // Device Info
258 if (service.device_info) {
259 meid_ = SafeString(service.device_info->MEID);
260 imei_ = SafeString(service.device_info->IMEI);
261 imsi_ = SafeString(service.device_info->IMSI);
262 esn_ = SafeString(service.device_info->ESN);
263 mdn_ = SafeString(service.device_info->MDN);
264 min_ = SafeString(service.device_info->MIN);
265 model_id_ = SafeString(service.device_info->model_id);
266 manufacturer_ = SafeString(service.device_info->manufacturer);
267 firmware_revision_ = SafeString(service.device_info->firmware_revision);
268 hardware_revision_ = SafeString(service.device_info->hardware_revision);
269 last_update_ = SafeString(service.device_info->last_update);
270 prl_version_ = service.device_info->PRL_version;
271 }
272 }
273
274 bool CellularNetwork::is_gsm() const { 317 bool CellularNetwork::is_gsm() const {
275 return network_technology_ != NETWORK_TECHNOLOGY_EVDO && 318 return network_technology_ != NETWORK_TECHNOLOGY_EVDO &&
276 network_technology_ != NETWORK_TECHNOLOGY_1XRTT && 319 network_technology_ != NETWORK_TECHNOLOGY_1XRTT &&
277 network_technology_ != NETWORK_TECHNOLOGY_UNKNOWN; 320 network_technology_ != NETWORK_TECHNOLOGY_UNKNOWN;
278 } 321 }
279 322
280 CellularNetwork::DataLeft CellularNetwork::data_left() const { 323 CellularNetwork::DataLeft CellularNetwork::data_left() const {
281 if (data_plans_.empty()) 324 if (data_plans_.empty())
282 return DATA_NORMAL; 325 return DATA_NORMAL;
283 CellularDataPlan plan = data_plans_[0]; 326 CellularDataPlan plan = data_plans_[0];
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 436
394 //////////////////////////////////////////////////////////////////////////////// 437 ////////////////////////////////////////////////////////////////////////////////
395 // WifiNetwork 438 // WifiNetwork
396 439
397 WifiNetwork::WifiNetwork() 440 WifiNetwork::WifiNetwork()
398 : WirelessNetwork(), 441 : WirelessNetwork(),
399 encryption_(SECURITY_NONE) { 442 encryption_(SECURITY_NONE) {
400 type_ = TYPE_WIFI; 443 type_ = TYPE_WIFI;
401 } 444 }
402 445
403 WifiNetwork::WifiNetwork(const ServiceInfo& service) : WirelessNetwork() { 446 WifiNetwork::WifiNetwork(const WifiNetwork& network)
404 ConfigureFromService(service); 447 : WirelessNetwork(network) {
448 encryption_ = network.encryption();
449 passphrase_ = network.passphrase();
450 identity_ = network.identity();
451 cert_path_ = network.cert_path();
452 }
453
454 WifiNetwork::WifiNetwork(const ServiceInfo* service)
455 : WirelessNetwork(service) {
456 encryption_ = service->security;
457 passphrase_ = SafeString(service->passphrase);
458 identity_ = SafeString(service->identity);
459 cert_path_ = SafeString(service->cert_path);
405 type_ = TYPE_WIFI; 460 type_ = TYPE_WIFI;
406 } 461 }
407 462
408 void WifiNetwork::Clear() { 463 void WifiNetwork::Clear() {
409 WirelessNetwork::Clear(); 464 WirelessNetwork::Clear();
410 encryption_ = SECURITY_NONE; 465 encryption_ = SECURITY_NONE;
411 passphrase_.clear(); 466 passphrase_.clear();
412 identity_.clear(); 467 identity_.clear();
413 cert_path_.clear(); 468 cert_path_.clear();
414 } 469 }
415 470
416 void WifiNetwork::ConfigureFromService(const ServiceInfo& service) {
417 WirelessNetwork::ConfigureFromService(service);
418 encryption_ = service.security;
419 passphrase_ = SafeString(service.passphrase);
420 identity_ = SafeString(service.identity);
421 cert_path_ = SafeString(service.cert_path);
422 }
423
424 std::string WifiNetwork::GetEncryptionString() { 471 std::string WifiNetwork::GetEncryptionString() {
425 switch (encryption_) { 472 switch (encryption_) {
426 case SECURITY_UNKNOWN: 473 case SECURITY_UNKNOWN:
427 break; 474 break;
428 case SECURITY_NONE: 475 case SECURITY_NONE:
429 return ""; 476 return "";
430 case SECURITY_WEP: 477 case SECURITY_WEP:
431 return "WEP"; 478 return "WEP";
432 case SECURITY_WPA: 479 case SECURITY_WPA:
433 return "WPA"; 480 return "WPA";
(...skipping 24 matching lines...) Expand all
458 } 505 }
459 506
460 //////////////////////////////////////////////////////////////////////////////// 507 ////////////////////////////////////////////////////////////////////////////////
461 // NetworkLibrary 508 // NetworkLibrary
462 509
463 class NetworkLibraryImpl : public NetworkLibrary { 510 class NetworkLibraryImpl : public NetworkLibrary {
464 public: 511 public:
465 NetworkLibraryImpl() 512 NetworkLibraryImpl()
466 : network_status_connection_(NULL), 513 : network_status_connection_(NULL),
467 data_plan_monitor_(NULL), 514 data_plan_monitor_(NULL),
515 ethernet_(NULL),
516 wifi_(NULL),
517 cellular_(NULL),
468 available_devices_(0), 518 available_devices_(0),
469 enabled_devices_(0), 519 enabled_devices_(0),
470 connected_devices_(0), 520 connected_devices_(0),
471 offline_mode_(false) { 521 offline_mode_(false) {
472 if (EnsureCrosLoaded()) { 522 if (EnsureCrosLoaded()) {
473 Init(); 523 Init();
474 } else { 524 } else {
475 InitTestData(); 525 InitTestData();
476 } 526 }
477 } 527 }
478 528
479 ~NetworkLibraryImpl() { 529 ~NetworkLibraryImpl() {
480 if (network_status_connection_) { 530 if (network_status_connection_) {
481 DisconnectMonitorNetwork(network_status_connection_); 531 DisconnectMonitorNetwork(network_status_connection_);
482 } 532 }
483 if (data_plan_monitor_) { 533 if (data_plan_monitor_) {
484 DisconnectDataPlanUpdateMonitor(data_plan_monitor_); 534 DisconnectDataPlanUpdateMonitor(data_plan_monitor_);
485 } 535 }
486 // DCHECK(!observers_.size()); 536 // DCHECK(!observers_.size());
487 DCHECK(!property_observers_.size()); 537 DCHECK(!property_observers_.size());
488 for (PropertyChangeObserverMap::iterator iter = property_observers_.begin(); 538 STLDeleteValues(&property_observers_);
489 iter != property_observers_.end(); 539 ClearNetworks();
490 ++iter) {
491 delete iter->second;
492 }
493 } 540 }
494 541
495 void AddObserver(Observer* observer) { 542 void AddObserver(Observer* observer) {
496 observers_.AddObserver(observer); 543 observers_.AddObserver(observer);
497 } 544 }
498 545
499 void RemoveObserver(Observer* observer) { 546 void RemoveObserver(Observer* observer) {
500 observers_.RemoveObserver(observer); 547 observers_.RemoveObserver(observer);
501 } 548 }
502 549
503 virtual void AddProperyObserver(const char* service_path, 550 virtual void AddProperyObserver(const char* service_path,
504 PropertyObserver* observer) { 551 PropertyObserver* observer) {
505 DCHECK(service_path); 552 DCHECK(service_path);
506 DCHECK(observer); 553 DCHECK(observer);
554 if (!EnsureCrosLoaded())
555 return;
507 // First, add the observer to the callback map. 556 // First, add the observer to the callback map.
508 PropertyChangeObserverMap::iterator iter = property_observers_.find( 557 PropertyChangeObserverMap::iterator iter = property_observers_.find(
509 std::string(service_path)); 558 std::string(service_path));
510 if (iter != property_observers_.end()) { 559 if (iter != property_observers_.end()) {
511 iter->second->AddObserver(observer); 560 iter->second->AddObserver(observer);
512 } else { 561 } else {
513 std::pair<PropertyChangeObserverMap::iterator, bool> inserted = 562 std::pair<PropertyChangeObserverMap::iterator, bool> inserted =
514 property_observers_.insert( 563 property_observers_.insert(
515 std::pair<std::string, PropertyObserverList*>( 564 std::pair<std::string, PropertyObserverList*>(
516 std::string(service_path), 565 std::string(service_path),
(...skipping 10 matching lines...) Expand all
527 map_iter->second->RemoveObserver(observer); 576 map_iter->second->RemoveObserver(observer);
528 if (!map_iter->second->size()) { 577 if (!map_iter->second->size()) {
529 delete map_iter->second; 578 delete map_iter->second;
530 property_observers_.erase(map_iter++); 579 property_observers_.erase(map_iter++);
531 } else { 580 } else {
532 ++map_iter; 581 ++map_iter;
533 } 582 }
534 } 583 }
535 } 584 }
536 585
537 virtual const EthernetNetwork& ethernet_network() const { return ethernet_; } 586 virtual EthernetNetwork* ethernet_network() { return ethernet_; }
538 virtual bool ethernet_connecting() const { return ethernet_.connecting(); } 587 virtual bool ethernet_connecting() const {
539 virtual bool ethernet_connected() const { return ethernet_.connected(); } 588 return ethernet_ ? ethernet_->connecting() : false;
589 }
590 virtual bool ethernet_connected() const {
591 return ethernet_ ? ethernet_->connected() : false;
592 }
540 593
541 virtual const WifiNetwork& wifi_network() const { return wifi_; } 594 virtual WifiNetwork* wifi_network() { return wifi_; }
542 virtual bool wifi_connecting() const { return wifi_.connecting(); } 595 virtual bool wifi_connecting() const {
543 virtual bool wifi_connected() const { return wifi_.connected(); } 596 return wifi_ ? wifi_->connecting() : false;
597 }
598 virtual bool wifi_connected() const {
599 return wifi_ ? wifi_->connected() : false;
600 }
544 601
545 virtual const CellularNetwork& cellular_network() const { return cellular_; } 602 virtual CellularNetwork* cellular_network() { return cellular_; }
546 virtual bool cellular_connecting() const { return cellular_.connecting(); } 603 virtual bool cellular_connecting() const {
547 virtual bool cellular_connected() const { return cellular_.connected(); } 604 return cellular_ ? cellular_->connecting() : false;
605 }
606 virtual bool cellular_connected() const {
607 return cellular_ ? cellular_->connected() : false;
608 }
548 609
549 bool Connected() const { 610 bool Connected() const {
550 return ethernet_connected() || wifi_connected() || cellular_connected(); 611 return ethernet_connected() || wifi_connected() || cellular_connected();
551 } 612 }
552 613
553 bool Connecting() const { 614 bool Connecting() const {
554 return ethernet_connecting() || wifi_connecting() || cellular_connecting(); 615 return ethernet_connecting() || wifi_connecting() || cellular_connecting();
555 } 616 }
556 617
557 const std::string& IPAddress() const { 618 const std::string& IPAddress() const {
558 // Returns highest priority IP address. 619 // Returns highest priority IP address.
559 if (ethernet_connected()) 620 if (ethernet_connected())
560 return ethernet_.ip_address(); 621 return ethernet_->ip_address();
561 if (wifi_connected()) 622 if (wifi_connected())
562 return wifi_.ip_address(); 623 return wifi_->ip_address();
563 if (cellular_connected()) 624 if (cellular_connected())
564 return cellular_.ip_address(); 625 return cellular_->ip_address();
565 return ethernet_.ip_address(); 626 return ethernet_->ip_address();
566 } 627 }
567 628
568 virtual const WifiNetworkVector& wifi_networks() const { 629 virtual const WifiNetworkVector& wifi_networks() const {
569 return wifi_networks_; 630 return wifi_networks_;
570 } 631 }
571 632
572 virtual const WifiNetworkVector& remembered_wifi_networks() const { 633 virtual const WifiNetworkVector& remembered_wifi_networks() const {
573 return remembered_wifi_networks_; 634 return remembered_wifi_networks_;
574 } 635 }
575 636
576 virtual const CellularNetworkVector& cellular_networks() const { 637 virtual const CellularNetworkVector& cellular_networks() const {
577 return cellular_networks_; 638 return cellular_networks_;
578 } 639 }
579 640
580 virtual const CellularNetworkVector& remembered_cellular_networks() const {
581 return remembered_cellular_networks_;
582 }
583
584 ///////////////////////////////////////////////////////////////////////////// 641 /////////////////////////////////////////////////////////////////////////////
585 642
586 virtual bool FindWifiNetworkByPath( 643 virtual WifiNetwork* FindWifiNetworkByPath(
587 const std::string& path, WifiNetwork* result) const { 644 const std::string& path) {
588 const WifiNetwork* wifi = 645 return GetWirelessNetworkByPath(wifi_networks_, path);
589 GetWirelessNetworkByPath(wifi_networks_, path);
590 if (wifi) {
591 if (result)
592 *result = *wifi;
593 return true;
594 }
595 return false;
596 } 646 }
597 647
598 virtual bool FindCellularNetworkByPath( 648 virtual CellularNetwork* FindCellularNetworkByPath(
599 const std::string& path, CellularNetwork* result) const { 649 const std::string& path) {
600 const CellularNetwork* cellular = 650 return GetWirelessNetworkByPath(cellular_networks_, path);
601 GetWirelessNetworkByPath(cellular_networks_, path);
602 if (cellular) {
603 if (result)
604 *result = *cellular;
605 return true;
606 }
607 return false;
608 } 651 }
609 652
610 virtual void RequestWifiScan() { 653 virtual void RequestWifiScan() {
611 if (EnsureCrosLoaded()) { 654 if (EnsureCrosLoaded()) {
612 RequestScan(TYPE_WIFI); 655 RequestScan(TYPE_WIFI);
613 } 656 }
614 } 657 }
615 658
616 virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) { 659 virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) {
617 if (!EnsureCrosLoaded()) 660 if (!EnsureCrosLoaded())
(...skipping 13 matching lines...) Expand all
631 ap.timestamp = now - 674 ap.timestamp = now -
632 base::TimeDelta::FromSeconds(network_list->networks[i].age_seconds); 675 base::TimeDelta::FromSeconds(network_list->networks[i].age_seconds);
633 ap.signal_strength = network_list->networks[i].strength; 676 ap.signal_strength = network_list->networks[i].strength;
634 ap.channel = network_list->networks[i].channel; 677 ap.channel = network_list->networks[i].channel;
635 result->push_back(ap); 678 result->push_back(ap);
636 } 679 }
637 FreeDeviceNetworkList(network_list); 680 FreeDeviceNetworkList(network_list);
638 return true; 681 return true;
639 } 682 }
640 683
641 virtual void ConnectToWifiNetwork(WifiNetwork network, 684 virtual void ConnectToWifiNetwork(const WifiNetwork* network,
642 const std::string& password, 685 const std::string& password,
643 const std::string& identity, 686 const std::string& identity,
644 const std::string& certpath) { 687 const std::string& certpath) {
645 if (EnsureCrosLoaded()) { 688 DCHECK(network);
646 if (ConnectToNetworkWithCertInfo(network.service_path().c_str(), 689 if (!EnsureCrosLoaded())
647 password.empty() ? NULL : password.c_str(), 690 return;
648 identity.empty() ? NULL : identity.c_str(), 691 if (ConnectToNetworkWithCertInfo(network->service_path().c_str(),
649 certpath.empty() ? NULL : certpath.c_str())) { 692 password.empty() ? NULL : password.c_str(),
650 // Update local cache and notify listeners. 693 identity.empty() ? NULL : identity.c_str(),
651 WifiNetwork* wifi = GetWirelessNetworkByPath( 694 certpath.empty() ? NULL : certpath.c_str())) {
652 wifi_networks_, network.service_path()); 695 // Update local cache and notify listeners.
653 if (wifi) { 696 WifiNetwork* wifi = GetWirelessNetworkByPath(
654 wifi->set_passphrase(password); 697 wifi_networks_, network->service_path());
655 wifi->set_identity(identity); 698 if (wifi) {
656 wifi->set_cert_path(certpath); 699 wifi->set_passphrase(password);
657 wifi->set_connecting(true); 700 wifi->set_identity(identity);
658 wifi_ = *wifi; 701 wifi->set_cert_path(certpath);
659 } 702 wifi->set_connecting(true);
660 NotifyNetworkChanged(); 703 wifi_ = wifi;
661 } 704 }
705 NotifyNetworkChanged();
662 } 706 }
663 } 707 }
664 708
665 virtual void ConnectToWifiNetwork(const std::string& ssid, 709 virtual void ConnectToWifiNetwork(const std::string& ssid,
666 const std::string& password, 710 const std::string& password,
667 const std::string& identity, 711 const std::string& identity,
668 const std::string& certpath, 712 const std::string& certpath,
669 bool auto_connect) { 713 bool auto_connect) {
670 if (EnsureCrosLoaded()) { 714 if (!EnsureCrosLoaded())
671 // First create a service from hidden network. 715 return;
672 ServiceInfo* service = GetWifiService(ssid.c_str(),
673 SECURITY_UNKNOWN);
674 if (service) {
675 // Set auto-connect.
676 SetAutoConnect(service->service_path, auto_connect);
677 // Now connect to that service.
678 ConnectToNetworkWithCertInfo(service->service_path,
679 password.empty() ? NULL : password.c_str(),
680 identity.empty() ? NULL : identity.c_str(),
681 certpath.empty() ? NULL : certpath.c_str());
682 716
683 // Clean up ServiceInfo object. 717 // First create a service from hidden network.
684 FreeServiceInfo(service); 718 ServiceInfo* service = GetWifiService(ssid.c_str(),
685 } else { 719 SECURITY_UNKNOWN);
686 LOG(WARNING) << "Cannot find hidden network: " << ssid; 720 if (service) {
687 // TODO(chocobo): Show error message. 721 // Set auto-connect.
688 } 722 SetAutoConnect(service->service_path, auto_connect);
723 // Now connect to that service.
724 ConnectToNetworkWithCertInfo(service->service_path,
725 password.empty() ? NULL : password.c_str(),
726 identity.empty() ? NULL : identity.c_str(),
727 certpath.empty() ? NULL : certpath.c_str());
728
729 // Clean up ServiceInfo object.
730 FreeServiceInfo(service);
731 } else {
732 LOG(WARNING) << "Cannot find hidden network: " << ssid;
733 // TODO(chocobo): Show error message.
689 } 734 }
690 } 735 }
691 736
692 virtual void ConnectToCellularNetwork(CellularNetwork network) { 737 virtual void ConnectToCellularNetwork(const CellularNetwork* network) {
693 if (EnsureCrosLoaded()) { 738 DCHECK(network);
694 if (ConnectToNetwork(network.service_path().c_str(), NULL)) { 739 if (!EnsureCrosLoaded())
695 // Update local cache and notify listeners. 740 return;
696 CellularNetwork* cellular = GetWirelessNetworkByPath( 741 if (network && ConnectToNetwork(network->service_path().c_str(), NULL)) {
697 cellular_networks_, network.service_path()); 742 // Update local cache and notify listeners.
698 if (cellular) { 743 CellularNetwork* cellular = GetWirelessNetworkByPath(
699 cellular->set_connecting(true); 744 cellular_networks_, network->service_path());
700 cellular_ = *cellular; 745 if (cellular) {
701 } 746 cellular->set_connecting(true);
702 NotifyNetworkChanged(); 747 cellular_ = cellular;
703 } 748 }
749 NotifyNetworkChanged();
704 } 750 }
705 } 751 }
706 752
707 virtual void RefreshCellularDataPlans(const CellularNetwork& network) { 753 virtual void RefreshCellularDataPlans(const CellularNetwork* network) {
708 if (!EnsureCrosLoaded()) 754 DCHECK(network);
755 if (!EnsureCrosLoaded() || !network)
709 return; 756 return;
710 RequestCellularDataPlanUpdate(network.service_path().c_str()); 757 RequestCellularDataPlanUpdate(network->service_path().c_str());
711 } 758 }
712 759
713 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork& network) { 760 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) {
714 if (EnsureCrosLoaded()) { 761 DCHECK(network);
715 if (DisconnectFromNetwork(network.service_path().c_str())) { 762 if (!EnsureCrosLoaded() || !network)
716 // Update local cache and notify listeners. 763 return;
717 if (network.type() == TYPE_WIFI) { 764 if (DisconnectFromNetwork(network->service_path().c_str())) {
718 WifiNetwork* wifi = GetWirelessNetworkByPath( 765 // Update local cache and notify listeners.
719 wifi_networks_, network.service_path()); 766 if (network->type() == TYPE_WIFI) {
720 if (wifi) { 767 WifiNetwork* wifi = GetWirelessNetworkByPath(
721 wifi->set_connected(false); 768 wifi_networks_, network->service_path());
722 wifi_ = WifiNetwork(); 769 if (wifi) {
723 } 770 wifi->set_connected(false);
724 } else if (network.type() == TYPE_CELLULAR) { 771 wifi_ = NULL;
725 CellularNetwork* cellular = GetWirelessNetworkByPath(
726 cellular_networks_, network.service_path());
727 if (cellular) {
728 cellular->set_connected(false);
729 cellular_ = CellularNetwork();
730 }
731 } 772 }
732 NotifyNetworkChanged(); 773 } else if (network->type() == TYPE_CELLULAR) {
774 CellularNetwork* cellular = GetWirelessNetworkByPath(
775 cellular_networks_, network->service_path());
776 if (cellular) {
777 cellular->set_connected(false);
778 cellular_ = NULL;
779 }
733 } 780 }
781 NotifyNetworkChanged();
734 } 782 }
735 } 783 }
736 784
737 virtual void SaveCellularNetwork(const CellularNetwork& network) { 785 virtual void SaveCellularNetwork(const CellularNetwork* network) {
738 // Update the wifi network in the local cache. 786 DCHECK(network);
739 CellularNetwork* cellular = GetWirelessNetworkByPath( 787 // Update the cellular network with libcros.
740 cellular_networks_, network.service_path()); 788 if (!EnsureCrosLoaded() || !network)
741 if (cellular) 789 return;
742 *cellular = network;
743 790
744 // Update the cellular network with libcros. 791 SetAutoConnect(network->service_path().c_str(), network->auto_connect());
745 if (EnsureCrosLoaded()) { 792 }
746 SetAutoConnect(network.service_path().c_str(), network.auto_connect()); 793
794 virtual void SaveWifiNetwork(const WifiNetwork* network) {
795 DCHECK(network);
796 // Update the wifi network with libcros.
797 if (!EnsureCrosLoaded() || !network)
798 return;
799 SetPassphrase(
800 network->service_path().c_str(), network->passphrase().c_str());
801 SetIdentity(network->service_path().c_str(),
802 network->identity().c_str());
803 SetCertPath(network->service_path().c_str(),
804 network->cert_path().c_str());
805 SetAutoConnect(network->service_path().c_str(), network->auto_connect());
806 }
807
808 virtual void ForgetWifiNetwork(const std::string& service_path) {
809 if (!EnsureCrosLoaded())
810 return;
811 if (DeleteRememberedService(service_path.c_str())) {
812 // Update local cache and notify listeners.
813 for (WifiNetworkVector::iterator iter =
814 remembered_wifi_networks_.begin();
815 iter != remembered_wifi_networks_.end();
816 ++iter) {
817 if ((*iter)->service_path() == service_path) {
818 delete (*iter);
819 remembered_wifi_networks_.erase(iter);
820 break;
821 }
822 }
823 NotifyNetworkChanged();
747 } 824 }
748 } 825 }
749 826
750 virtual void SaveWifiNetwork(const WifiNetwork& network) {
751 // Update the wifi network in the local cache.
752 WifiNetwork* wifi = GetWirelessNetworkByPath(
753 wifi_networks_, network.service_path());
754 if (wifi)
755 *wifi = network;
756
757 // Update the wifi network with libcros.
758 if (EnsureCrosLoaded()) {
759 SetPassphrase(
760 network.service_path().c_str(), network.passphrase().c_str());
761 SetIdentity(network.service_path().c_str(), network.identity().c_str());
762 SetCertPath(network.service_path().c_str(), network.cert_path().c_str());
763 SetAutoConnect(network.service_path().c_str(), network.auto_connect());
764 }
765 }
766
767 virtual void ForgetWirelessNetwork(const std::string& service_path) {
768 if (EnsureCrosLoaded()) {
769 if (DeleteRememberedService(service_path.c_str())) {
770 // Update local cache and notify listeners.
771 remembered_wifi_networks_.erase(
772 std::remove_if(remembered_wifi_networks_.begin(),
773 remembered_wifi_networks_.end(),
774 WirelessNetwork::ServicePathEq(service_path)),
775 remembered_wifi_networks_.end());
776 remembered_cellular_networks_.erase(
777 std::remove_if(remembered_cellular_networks_.begin(),
778 remembered_cellular_networks_.end(),
779 WirelessNetwork::ServicePathEq(service_path)),
780 remembered_cellular_networks_.end());
781 NotifyNetworkChanged();
782 }
783 }
784 }
785
786 virtual bool ethernet_available() const { 827 virtual bool ethernet_available() const {
787 return available_devices_ & (1 << TYPE_ETHERNET); 828 return available_devices_ & (1 << TYPE_ETHERNET);
788 } 829 }
789 virtual bool wifi_available() const { 830 virtual bool wifi_available() const {
790 return available_devices_ & (1 << TYPE_WIFI); 831 return available_devices_ & (1 << TYPE_WIFI);
791 } 832 }
792 virtual bool cellular_available() const { 833 virtual bool cellular_available() const {
793 return available_devices_ & (1 << TYPE_CELLULAR); 834 return available_devices_ & (1 << TYPE_CELLULAR);
794 } 835 }
795 836
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 base::IntToString(refresh) + "\"/>"); 908 base::IntToString(refresh) + "\"/>");
868 output.append("</head><body>"); 909 output.append("</head><body>");
869 if (refresh > 0) { 910 if (refresh > 0) {
870 output.append("(Auto-refreshing page every " + 911 output.append("(Auto-refreshing page every " +
871 base::IntToString(refresh) + "s)"); 912 base::IntToString(refresh) + "s)");
872 } else { 913 } else {
873 output.append("(To auto-refresh this page: about:network/&lt;secs&gt;)"); 914 output.append("(To auto-refresh this page: about:network/&lt;secs&gt;)");
874 } 915 }
875 916
876 output.append("<h3>Ethernet:</h3><table border=1>"); 917 output.append("<h3>Ethernet:</h3><table border=1>");
877 if (ethernet_enabled()) { 918 if (ethernet_ && ethernet_enabled()) {
878 output.append("<tr>" + ToHtmlTableHeader(&ethernet_) + "</tr>"); 919 output.append("<tr>" + ToHtmlTableHeader(ethernet_) + "</tr>");
879 output.append("<tr>" + ToHtmlTableRow(&ethernet_) + "</tr>"); 920 output.append("<tr>" + ToHtmlTableRow(ethernet_) + "</tr>");
880 } 921 }
881 922
882 output.append("</table><h3>Wifi:</h3><table border=1>"); 923 output.append("</table><h3>Wifi:</h3><table border=1>");
883 for (size_t i = 0; i < wifi_networks_.size(); ++i) { 924 for (size_t i = 0; i < wifi_networks_.size(); ++i) {
884 if (i == 0) 925 if (i == 0)
885 output.append("<tr>" + ToHtmlTableHeader(&wifi_networks_[i]) + "</tr>"); 926 output.append("<tr>" + ToHtmlTableHeader(wifi_networks_[i]) + "</tr>");
886 output.append("<tr>" + ToHtmlTableRow(&wifi_networks_[i]) + "</tr>"); 927 output.append("<tr>" + ToHtmlTableRow(wifi_networks_[i]) + "</tr>");
887 } 928 }
888 929
889 output.append("</table><h3>Cellular:</h3><table border=1>"); 930 output.append("</table><h3>Cellular:</h3><table border=1>");
890 for (size_t i = 0; i < cellular_networks_.size(); ++i) { 931 for (size_t i = 0; i < cellular_networks_.size(); ++i) {
891 if (i == 0) 932 if (i == 0)
892 output.append("<tr>" + ToHtmlTableHeader(&cellular_networks_[i]) + 933 output.append("<tr>" + ToHtmlTableHeader(cellular_networks_[i]) +
893 "</tr>"); 934 "</tr>");
894 output.append("<tr>" + ToHtmlTableRow(&cellular_networks_[i]) + "</tr>"); 935 output.append("<tr>" + ToHtmlTableRow(cellular_networks_[i]) + "</tr>");
895 } 936 }
896 937
897 output.append("</table><h3>Remembered Wifi:</h3><table border=1>"); 938 output.append("</table><h3>Remembered Wifi:</h3><table border=1>");
898 for (size_t i = 0; i < remembered_wifi_networks_.size(); ++i) { 939 for (size_t i = 0; i < remembered_wifi_networks_.size(); ++i) {
899 if (i == 0) 940 if (i == 0)
900 output.append( 941 output.append(
901 "<tr>" + ToHtmlTableHeader(&remembered_wifi_networks_[i]) + 942 "<tr>" + ToHtmlTableHeader(remembered_wifi_networks_[i]) +
902 "</tr>"); 943 "</tr>");
903 output.append("<tr>" + ToHtmlTableRow(&remembered_wifi_networks_[i]) + 944 output.append("<tr>" + ToHtmlTableRow(remembered_wifi_networks_[i]) +
904 "</tr>");
905 }
906
907 output.append("</table><h3>Remembered Cellular:</h3><table border=1>");
908 for (size_t i = 0; i < remembered_cellular_networks_.size(); ++i) {
909 if (i == 0)
910 output.append("<tr>" +
911 ToHtmlTableHeader(&remembered_cellular_networks_[i]) + "</tr>");
912 output.append("<tr>" + ToHtmlTableRow(&remembered_cellular_networks_[i]) +
913 "</tr>"); 945 "</tr>");
914 } 946 }
915 947
916 output.append("</table></body></html>"); 948 output.append("</table></body></html>");
917 return output; 949 return output;
918 } 950 }
919 951
920 private: 952 private:
921 953
922 class PropertyObserverList : public ObserverList<PropertyObserver> { 954 class PropertyObserverList : public ObserverList<PropertyObserver> {
(...skipping 29 matching lines...) Expand all
952 static void NetworkStatusChangedHandler(void* object) { 984 static void NetworkStatusChangedHandler(void* object) {
953 NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object); 985 NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object);
954 DCHECK(network); 986 DCHECK(network);
955 network->UpdateNetworkStatus(); 987 network->UpdateNetworkStatus();
956 } 988 }
957 989
958 static void DataPlanUpdateHandler(void* object, 990 static void DataPlanUpdateHandler(void* object,
959 const char* modem_service_path, 991 const char* modem_service_path,
960 const CellularDataPlanList* dataplan) { 992 const CellularDataPlanList* dataplan) {
961 NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object); 993 NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object);
962 DCHECK(network); 994 DCHECK(network && network->cellular_network());
963 // Store data plan for currently connected cellular network. 995 // Store data plan for currently connected cellular network.
964 if (network->cellular_network().service_path() 996 if (network->cellular_network()->service_path()
965 .compare(modem_service_path) == 0) { 997 .compare(modem_service_path) == 0) {
966 if (dataplan != NULL) { 998 if (dataplan != NULL) {
967 network->UpdateCellularDataPlan(*dataplan); 999 network->UpdateCellularDataPlan(*dataplan);
968 } 1000 }
969 } 1001 }
970 } 1002 }
971 1003
972 static void ParseSystem(SystemInfo* system, 1004 static void ParseSystem(SystemInfo* system,
973 EthernetNetwork* ethernet, 1005 EthernetNetwork** ethernet,
974 WifiNetworkVector* wifi_networks, 1006 WifiNetworkVector* wifi_networks,
975 CellularNetworkVector* cellular_networks, 1007 CellularNetworkVector* cellular_networks,
976 WifiNetworkVector* remembered_wifi_networks, 1008 WifiNetworkVector* remembered_wifi_networks) {
977 CellularNetworkVector* remembered_cellular_networks) {
978 DVLOG(1) << "ParseSystem:"; 1009 DVLOG(1) << "ParseSystem:";
979 ethernet->Clear(); 1010 DCHECK(!(*ethernet));
980 for (int i = 0; i < system->service_size; i++) { 1011 for (int i = 0; i < system->service_size; i++) {
981 const ServiceInfo service = *system->GetServiceInfo(i); 1012 const ServiceInfo* service = system->GetServiceInfo(i);
982 DVLOG(1) << " (" << service.type << ") " << service.name 1013 DVLOG(1) << " (" << service->type << ") " << service->name
983 << " mode=" << service.mode 1014 << " mode=" << service->mode
984 << " state=" << service.state 1015 << " state=" << service->state
985 << " sec=" << service.security 1016 << " sec=" << service->security
986 << " req=" << service.passphrase_required 1017 << " req=" << service->passphrase_required
987 << " pass=" << service.passphrase 1018 << " pass=" << service->passphrase
988 << " id=" << service.identity 1019 << " id=" << service->identity
989 << " certpath=" << service.cert_path 1020 << " certpath=" << service->cert_path
990 << " str=" << service.strength 1021 << " str=" << service->strength
991 << " fav=" << service.favorite 1022 << " fav=" << service->favorite
992 << " auto=" << service.auto_connect 1023 << " auto=" << service->auto_connect
993 << " error=" << service.error; 1024 << " error=" << service->error;
994 // Once a connected ethernet service is found, disregard other ethernet 1025 // Once a connected ethernet service is found, disregard other ethernet
995 // services that are also found 1026 // services that are also found
996 if (service.type == TYPE_ETHERNET && !(ethernet->connected())) 1027 if (service->type == TYPE_ETHERNET)
997 ethernet->ConfigureFromService(service); 1028 (*ethernet) = new EthernetNetwork(service);
998 else if (service.type == TYPE_WIFI) 1029 else if (service->type == TYPE_WIFI) {
999 wifi_networks->push_back(WifiNetwork(service)); 1030 wifi_networks->push_back(new WifiNetwork(service));
1000 else if (service.type == TYPE_CELLULAR) 1031 } else if (service->type == TYPE_CELLULAR) {
1001 cellular_networks->push_back(CellularNetwork(service)); 1032 cellular_networks->push_back(new CellularNetwork(service));
1033 }
1002 } 1034 }
1035
1036 // Create placeholder network for ethernet even if the service is not
1037 // detected at this moment.
1038 if (!(*ethernet))
1039 (*ethernet) = new EthernetNetwork();
1040
1003 DVLOG(1) << "Remembered networks:"; 1041 DVLOG(1) << "Remembered networks:";
1004 for (int i = 0; i < system->remembered_service_size; i++) { 1042 for (int i = 0; i < system->remembered_service_size; i++) {
1005 const ServiceInfo& service = *system->GetRememberedServiceInfo(i); 1043 const ServiceInfo* service = system->GetRememberedServiceInfo(i);
1006 // Only services marked as auto_connect are considered remembered 1044 // Only services marked as auto_connect are considered remembered
1007 // networks. 1045 // networks.
1008 // TODO(chocobo): Don't add to remembered service if currently available. 1046 // TODO(chocobo): Don't add to remembered service if currently available.
1009 if (service.auto_connect) { 1047 if (service->auto_connect) {
1010 DVLOG(1) << " (" << service.type << ") " << service.name 1048 DVLOG(1) << " (" << service->type << ") " << service->name
1011 << " mode=" << service.mode 1049 << " mode=" << service->mode
1012 << " sec=" << service.security 1050 << " sec=" << service->security
1013 << " pass=" << service.passphrase 1051 << " pass=" << service->passphrase
1014 << " id=" << service.identity 1052 << " id=" << service->identity
1015 << " certpath=" << service.cert_path 1053 << " certpath=" << service->cert_path
1016 << " auto=" << service.auto_connect; 1054 << " auto=" << service->auto_connect;
1017 if (service.type == TYPE_WIFI) 1055 if (service->type == TYPE_WIFI) {
1018 remembered_wifi_networks->push_back(WifiNetwork(service)); 1056 remembered_wifi_networks->push_back(new WifiNetwork(service));
1019 else if (service.type == TYPE_CELLULAR) 1057 }
1020 remembered_cellular_networks->push_back(CellularNetwork(service));
1021 } 1058 }
1022 } 1059 }
1023 } 1060 }
1024 1061
1025 void Init() { 1062 void Init() {
1026 // First, get the currently available networks. This data is cached 1063 // First, get the currently available networks. This data is cached
1027 // on the connman side, so the call should be quick. 1064 // on the connman side, so the call should be quick.
1028 VLOG(1) << "Getting initial CrOS network info."; 1065 VLOG(1) << "Getting initial CrOS network info.";
1029 UpdateSystemInfo(); 1066 UpdateSystemInfo();
1030 1067
1031 VLOG(1) << "Registering for network status updates."; 1068 VLOG(1) << "Registering for network status updates.";
1032 // Now, register to receive updates on network status. 1069 // Now, register to receive updates on network status.
1033 network_status_connection_ = MonitorNetwork(&NetworkStatusChangedHandler, 1070 network_status_connection_ = MonitorNetwork(&NetworkStatusChangedHandler,
1034 this); 1071 this);
1035 VLOG(1) << "Registering for cellular data plan updates."; 1072 VLOG(1) << "Registering for cellular data plan updates.";
1036 data_plan_monitor_ = MonitorCellularDataPlan(&DataPlanUpdateHandler, this); 1073 data_plan_monitor_ = MonitorCellularDataPlan(&DataPlanUpdateHandler, this);
1037 } 1074 }
1038 1075
1039 void InitTestData() { 1076 void InitTestData() {
1040 ethernet_.Clear(); 1077 ethernet_ = new EthernetNetwork();
1041 ethernet_.set_connected(true); 1078 ethernet_->set_connected(true);
1042 ethernet_.set_service_path("eth1"); 1079 ethernet_->set_service_path("eth1");
1043 1080
1081 STLDeleteElements(&wifi_networks_);
1044 wifi_networks_.clear(); 1082 wifi_networks_.clear();
1045 WifiNetwork wifi1 = WifiNetwork(); 1083 WifiNetwork* wifi1 = new WifiNetwork();
1046 wifi1.set_service_path("fw1"); 1084 wifi1->set_service_path("fw1");
1047 wifi1.set_name("Fake Wifi 1"); 1085 wifi1->set_name("Fake Wifi 1");
1048 wifi1.set_strength(90); 1086 wifi1->set_strength(90);
1049 wifi1.set_connected(false); 1087 wifi1->set_connected(false);
1050 wifi1.set_encryption(SECURITY_NONE); 1088 wifi1->set_encryption(SECURITY_NONE);
1051 wifi_networks_.push_back(wifi1); 1089 wifi_networks_.push_back(wifi1);
1052 1090
1053 WifiNetwork wifi2 = WifiNetwork(); 1091 WifiNetwork* wifi2 = new WifiNetwork();
1054 wifi2.set_service_path("fw2"); 1092 wifi2->set_service_path("fw2");
1055 wifi2.set_name("Fake Wifi 2"); 1093 wifi2->set_name("Fake Wifi 2");
1056 wifi2.set_strength(70); 1094 wifi2->set_strength(70);
1057 wifi2.set_connected(true); 1095 wifi2->set_connected(true);
1058 wifi2.set_encryption(SECURITY_WEP); 1096 wifi2->set_encryption(SECURITY_WEP);
1059 wifi_networks_.push_back(wifi2); 1097 wifi_networks_.push_back(wifi2);
1060 1098
1061 WifiNetwork wifi3 = WifiNetwork(); 1099 WifiNetwork* wifi3 = new WifiNetwork();
1062 wifi3.set_service_path("fw3"); 1100 wifi3->set_service_path("fw3");
1063 wifi3.set_name("Fake Wifi 3"); 1101 wifi3->set_name("Fake Wifi 3");
1064 wifi3.set_strength(50); 1102 wifi3->set_strength(50);
1065 wifi3.set_connected(false); 1103 wifi3->set_connected(false);
1066 wifi3.set_encryption(SECURITY_WEP); 1104 wifi3->set_encryption(SECURITY_WEP);
1067 wifi_networks_.push_back(wifi3); 1105 wifi_networks_.push_back(wifi3);
1068 1106
1069 wifi_ = wifi2; 1107 wifi_ = wifi2;
1070 1108
1109 STLDeleteElements(&cellular_networks_);
1071 cellular_networks_.clear(); 1110 cellular_networks_.clear();
1072 1111
1073 CellularNetwork cellular1 = CellularNetwork(); 1112 CellularNetwork* cellular1 = new CellularNetwork();
1074 cellular1.set_service_path("fc1"); 1113 cellular1->set_service_path("fc1");
1075 cellular1.set_name("Fake Cellular 1"); 1114 cellular1->set_name("Fake Cellular 1");
1076 cellular1.set_strength(70); 1115 cellular1->set_strength(70);
1077 cellular1.set_connected(true); 1116 cellular1->set_connected(true);
1078 cellular1.set_activation_state(ACTIVATION_STATE_PARTIALLY_ACTIVATED); 1117 cellular1->set_activation_state(ACTIVATION_STATE_PARTIALLY_ACTIVATED);
1079 cellular1.set_payment_url(std::string("http://www.google.com")); 1118 cellular1->set_payment_url(std::string("http://www.google.com"));
1080 cellular_networks_.push_back(cellular1); 1119 cellular_networks_.push_back(cellular1);
1081 cellular_ = cellular1; 1120 cellular_ = cellular1;
1082 1121
1083 remembered_wifi_networks_.clear(); 1122 remembered_wifi_networks_.clear();
1084 remembered_wifi_networks_.push_back(wifi2); 1123 remembered_wifi_networks_.push_back(new WifiNetwork(*wifi2));
1085
1086 remembered_cellular_networks_.clear();
1087 remembered_cellular_networks_.push_back(cellular1);
1088 1124
1089 int devices = (1 << TYPE_ETHERNET) | (1 << TYPE_WIFI) | 1125 int devices = (1 << TYPE_ETHERNET) | (1 << TYPE_WIFI) |
1090 (1 << TYPE_CELLULAR); 1126 (1 << TYPE_CELLULAR);
1091 available_devices_ = devices; 1127 available_devices_ = devices;
1092 enabled_devices_ = devices; 1128 enabled_devices_ = devices;
1093 connected_devices_ = devices; 1129 connected_devices_ = devices;
1094 offline_mode_ = false; 1130 offline_mode_ = false;
1095 1131
1096 chromeos::CellularDataPlan test_plan; 1132 chromeos::CellularDataPlan test_plan;
1097 test_plan.plan_name = "Fake plan"; 1133 test_plan.plan_name = "Fake plan";
1098 test_plan.data_bytes_used = 5LL * 1024LL * 1024LL * 1024LL; 1134 test_plan.data_bytes_used = 5LL * 1024LL * 1024LL * 1024LL;
1099 test_plan.plan_start_time = 1135 test_plan.plan_start_time =
1100 (base::Time::Now() - base::TimeDelta::FromDays(15)).ToInternalValue() / 1136 (base::Time::Now() - base::TimeDelta::FromDays(15)).ToInternalValue() /
1101 base::Time::kMicrosecondsPerSecond; 1137 base::Time::kMicrosecondsPerSecond;
1102 test_plan.plan_end_time = 1138 test_plan.plan_end_time =
1103 (base::Time::Now() + base::TimeDelta::FromDays(12)).ToInternalValue() / 1139 (base::Time::Now() + base::TimeDelta::FromDays(12)).ToInternalValue() /
1104 base::Time::kMicrosecondsPerSecond; 1140 base::Time::kMicrosecondsPerSecond;
1105 test_plan.plan_data_bytes = 20LL * 1024LL * 1024LL * 1024LL; 1141 test_plan.plan_data_bytes = 20LL * 1024LL * 1024LL * 1024LL;
1106 test_plan.plan_type = CELLULAR_DATA_PLAN_METERED_PAID; 1142 test_plan.plan_type = CELLULAR_DATA_PLAN_METERED_PAID;
1107 test_plan.update_time = base::Time::Now().ToInternalValue() / 1143 test_plan.update_time = base::Time::Now().ToInternalValue() /
1108 base::Time::kMicrosecondsPerSecond; 1144 base::Time::kMicrosecondsPerSecond;
1109 chromeos::CellularDataPlanList test_plans; 1145 chromeos::CellularDataPlanList test_plans;
1110 test_plans.push_back(test_plan); 1146 test_plans.push_back(test_plan);
1111 cellular_.SetDataPlans(test_plans); 1147 cellular_->SetDataPlans(test_plans);
1112 } 1148 }
1113 1149
1114 void UpdateSystemInfo() { 1150 void UpdateSystemInfo() {
1115 if (EnsureCrosLoaded()) { 1151 if (EnsureCrosLoaded()) {
1116 UpdateNetworkStatus(); 1152 UpdateNetworkStatus();
1117 } 1153 }
1118 } 1154 }
1119 1155
1120 WifiNetwork* GetWifiNetworkByName(const std::string& name) { 1156 WifiNetwork* GetWifiNetworkByName(const std::string& name) {
1121 for (size_t i = 0; i < wifi_networks_.size(); ++i) { 1157 for (size_t i = 0; i < wifi_networks_.size(); ++i) {
1122 if (wifi_networks_[i].name().compare(name) == 0) { 1158 if (wifi_networks_[i]->name().compare(name) == 0) {
1123 return &wifi_networks_[i]; 1159 return wifi_networks_[i];
1124 } 1160 }
1125 } 1161 }
1126 return NULL; 1162 return NULL;
1127 } 1163 }
1128 1164
1129 template<typename T> T* GetWirelessNetworkByPath( 1165 template<typename T> T GetWirelessNetworkByPath(
1130 std::vector<T>& networks, const std::string& path) { 1166 std::vector<T>& networks, const std::string& path) {
1131 typedef typename std::vector<T>::iterator iter_t; 1167 typedef typename std::vector<T>::iterator iter_t;
1132 iter_t iter = std::find_if(networks.begin(), networks.end(), 1168 iter_t iter = std::find_if(networks.begin(), networks.end(),
1133 WirelessNetwork::ServicePathEq(path)); 1169 WirelessNetwork::ServicePathEq(path));
1134 return (iter != networks.end()) ? &(*iter) : NULL; 1170 return (iter != networks.end()) ? *iter : NULL;
1135 } 1171 }
1136 1172
1137 // const version 1173 // const version
1138 template<typename T> const T* GetWirelessNetworkByPath( 1174 template<typename T> const T GetWirelessNetworkByPath(
1139 const std::vector<T>& networks, const std::string& path) const { 1175 const std::vector<T>& networks, const std::string& path) const {
1140 typedef typename std::vector<T>::const_iterator iter_t; 1176 typedef typename std::vector<T>::const_iterator iter_t;
1141 iter_t iter = std::find_if(networks.begin(), networks.end(), 1177 iter_t iter = std::find_if(networks.begin(), networks.end(),
1142 WirelessNetwork::ServicePathEq(path)); 1178 WirelessNetwork::ServicePathEq(path));
1143 return (iter != networks.end()) ? &(*iter) : NULL; 1179 return (iter != networks.end()) ? *iter : NULL;
1144 } 1180 }
1145 1181
1146 void EnableNetworkDeviceType(ConnectionType device, bool enable) { 1182 void EnableNetworkDeviceType(ConnectionType device, bool enable) {
1147 if (!EnsureCrosLoaded()) 1183 if (!EnsureCrosLoaded())
1148 return; 1184 return;
1149 1185
1150 // If network device is already enabled/disabled, then don't do anything. 1186 // If network device is already enabled/disabled, then don't do anything.
1151 if (enable && (enabled_devices_ & (1 << device))) { 1187 if (enable && (enabled_devices_ & (1 << device))) {
1152 LOG(WARNING) << "Trying to enable a device that's already enabled: " 1188 LOG(WARNING) << "Trying to enable a device that's already enabled: "
1153 << device; 1189 << device;
(...skipping 27 matching lines...) Expand all
1181 if (iter != property_observers_.end()) { 1217 if (iter != property_observers_.end()) {
1182 FOR_EACH_OBSERVER(PropertyObserver, *(iter->second), 1218 FOR_EACH_OBSERVER(PropertyObserver, *(iter->second),
1183 PropertyChanged(service_path, key, value)); 1219 PropertyChanged(service_path, key, value));
1184 } else { 1220 } else {
1185 NOTREACHED() << 1221 NOTREACHED() <<
1186 "There weren't supposed to be any property change observers of " << 1222 "There weren't supposed to be any property change observers of " <<
1187 service_path; 1223 service_path;
1188 } 1224 }
1189 } 1225 }
1190 1226
1227 void ClearNetworks() {
1228 if (ethernet_)
1229 delete ethernet_;
1230 ethernet_ = NULL;
1231 wifi_ = NULL;
1232 cellular_ = NULL;
1233 STLDeleteElements(&wifi_networks_);
1234 wifi_networks_.clear();
1235 STLDeleteElements(&cellular_networks_);
1236 cellular_networks_.clear();
1237 STLDeleteElements(&remembered_wifi_networks_);
1238 remembered_wifi_networks_.clear();
1239 }
1240
1191 void UpdateNetworkStatus() { 1241 void UpdateNetworkStatus() {
1192 // Make sure we run on UI thread. 1242 // Make sure we run on UI thread.
1193 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 1243 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
1194 BrowserThread::PostTask( 1244 BrowserThread::PostTask(
1195 BrowserThread::UI, FROM_HERE, 1245 BrowserThread::UI, FROM_HERE,
1196 NewRunnableMethod(this, 1246 NewRunnableMethod(this,
1197 &NetworkLibraryImpl::UpdateNetworkStatus)); 1247 &NetworkLibraryImpl::UpdateNetworkStatus));
1198 return; 1248 return;
1199 } 1249 }
1200 1250
1201 SystemInfo* system = GetSystemInfo(); 1251 SystemInfo* system = GetSystemInfo();
1202 if (!system) 1252 if (!system)
1203 return; 1253 return;
1204 1254
1205 wifi_networks_.clear(); 1255
1206 cellular_networks_.clear(); 1256 std::string prev_cellular_service_path = cellular_ ?
1207 remembered_wifi_networks_.clear(); 1257 cellular_->service_path() : std::string();
1208 remembered_cellular_networks_.clear(); 1258
1259 ClearNetworks();
1260
1209 ParseSystem(system, &ethernet_, &wifi_networks_, &cellular_networks_, 1261 ParseSystem(system, &ethernet_, &wifi_networks_, &cellular_networks_,
1210 &remembered_wifi_networks_, &remembered_cellular_networks_); 1262 &remembered_wifi_networks_);
1211 1263
1212 wifi_ = WifiNetwork(); 1264 wifi_ = NULL;
1213 for (size_t i = 0; i < wifi_networks_.size(); i++) { 1265 for (size_t i = 0; i < wifi_networks_.size(); i++) {
1214 if (wifi_networks_[i].connecting_or_connected()) { 1266 if (wifi_networks_[i]->connecting_or_connected()) {
1215 wifi_ = wifi_networks_[i]; 1267 wifi_ = wifi_networks_[i];
1216 break; // There is only one connected or connecting wifi network. 1268 break; // There is only one connected or connecting wifi network.
1217 } 1269 }
1218 } 1270 }
1219 std::string prev_service_path = cellular_.service_path(); 1271 cellular_ = NULL;
1220 cellular_ = CellularNetwork();
1221 for (size_t i = 0; i < cellular_networks_.size(); i++) { 1272 for (size_t i = 0; i < cellular_networks_.size(); i++) {
1222 if (cellular_networks_[i].connecting_or_connected()) { 1273 if (cellular_networks_[i]->connecting_or_connected()) {
1274 cellular_ = cellular_networks_[i];
1223 // If new cellular, then update data plan list. 1275 // If new cellular, then update data plan list.
1224 if (cellular_networks_[i].service_path() != prev_service_path) { 1276 if (cellular_networks_[i]->service_path() !=
1277 prev_cellular_service_path) {
1225 CellularDataPlanList list; 1278 CellularDataPlanList list;
1226 RetrieveCellularDataPlans(cellular_.service_path().c_str(), &list); 1279 RetrieveCellularDataPlans(cellular_->service_path().c_str(), &list);
1227 UpdateCellularDataPlan(list); 1280 UpdateCellularDataPlan(list);
1228 } 1281 }
1229 cellular_ = cellular_networks_[i];
1230 break; // There is only one connected or connecting cellular network. 1282 break; // There is only one connected or connecting cellular network.
1231 } 1283 }
1232 } 1284 }
1233 1285
1234 available_devices_ = system->available_technologies; 1286 available_devices_ = system->available_technologies;
1235 enabled_devices_ = system->enabled_technologies; 1287 enabled_devices_ = system->enabled_technologies;
1236 connected_devices_ = system->connected_technologies; 1288 connected_devices_ = system->connected_technologies;
1237 offline_mode_ = system->offline_mode; 1289 offline_mode_ = system->offline_mode;
1238 1290
1239 NotifyNetworkChanged(); 1291 NotifyNetworkChanged();
1240 FreeSystemInfo(system); 1292 FreeSystemInfo(system);
1241 } 1293 }
1242 1294
1243 void UpdateCellularDataPlan(const CellularDataPlanList& data_plans) { 1295 void UpdateCellularDataPlan(const CellularDataPlanList& data_plans) {
1244 cellular_.SetDataPlans(data_plans); 1296 DCHECK(cellular_);
1297 cellular_->SetDataPlans(data_plans);
1245 NotifyCellularDataPlanChanged(); 1298 NotifyCellularDataPlanChanged();
1246 } 1299 }
1247 1300
1248 ObserverList<Observer> observers_; 1301 ObserverList<Observer> observers_;
1249 1302
1250 // Property change observer map 1303 // Property change observer map
1251 PropertyChangeObserverMap property_observers_; 1304 PropertyChangeObserverMap property_observers_;
1252 1305
1253 // The network status connection for monitoring network status changes. 1306 // The network status connection for monitoring network status changes.
1254 MonitorNetworkConnection network_status_connection_; 1307 MonitorNetworkConnection network_status_connection_;
1255 1308
1256 // For monitoring data plan changes to the connected cellular network. 1309 // For monitoring data plan changes to the connected cellular network.
1257 DataPlanUpdateMonitor data_plan_monitor_; 1310 DataPlanUpdateMonitor data_plan_monitor_;
1258 1311
1259 // The property change connection for monitoring service property changes. 1312 // The property change connection for monitoring service property changes.
1260 std::map<std::string, PropertyChangeMonitor> property_change_monitors_; 1313 std::map<std::string, PropertyChangeMonitor> property_change_monitors_;
1261 1314
1262 // The ethernet network. 1315 // The ethernet network.
1263 EthernetNetwork ethernet_; 1316 EthernetNetwork* ethernet_;
1264 1317
1265 // The list of available wifi networks. 1318 // The list of available wifi networks.
1266 WifiNetworkVector wifi_networks_; 1319 WifiNetworkVector wifi_networks_;
1267 1320
1268 // The current connected (or connecting) wifi network. 1321 // The current connected (or connecting) wifi network.
1269 WifiNetwork wifi_; 1322 WifiNetwork* wifi_;
1270 1323
1271 // The remembered wifi networks. 1324 // The remembered wifi networks.
1272 WifiNetworkVector remembered_wifi_networks_; 1325 WifiNetworkVector remembered_wifi_networks_;
1273 1326
1274 // The list of available cellular networks. 1327 // The list of available cellular networks.
1275 CellularNetworkVector cellular_networks_; 1328 CellularNetworkVector cellular_networks_;
1276 1329
1277 // The current connected (or connecting) cellular network. 1330 // The current connected (or connecting) cellular network.
1278 CellularNetwork cellular_; 1331 CellularNetwork* cellular_;
1279
1280 // The remembered cellular networks.
1281 CellularNetworkVector remembered_cellular_networks_;
1282 1332
1283 // The current available network devices. Bitwise flag of ConnectionTypes. 1333 // The current available network devices. Bitwise flag of ConnectionTypes.
1284 int available_devices_; 1334 int available_devices_;
1285 1335
1286 // The current enabled network devices. Bitwise flag of ConnectionTypes. 1336 // The current enabled network devices. Bitwise flag of ConnectionTypes.
1287 int enabled_devices_; 1337 int enabled_devices_;
1288 1338
1289 // The current connected network devices. Bitwise flag of ConnectionTypes. 1339 // The current connected network devices. Bitwise flag of ConnectionTypes.
1290 int connected_devices_; 1340 int connected_devices_;
1291 1341
1292 bool offline_mode_; 1342 bool offline_mode_;
1293 1343
1294 DISALLOW_COPY_AND_ASSIGN(NetworkLibraryImpl); 1344 DISALLOW_COPY_AND_ASSIGN(NetworkLibraryImpl);
1295 }; 1345 };
1296 1346
1297 class NetworkLibraryStubImpl : public NetworkLibrary { 1347 class NetworkLibraryStubImpl : public NetworkLibrary {
1298 public: 1348 public:
1299 NetworkLibraryStubImpl() : ip_address_("1.1.1.1") {} 1349 NetworkLibraryStubImpl()
1300 ~NetworkLibraryStubImpl() {} 1350 : ip_address_("1.1.1.1"),
1351 ethernet_(new EthernetNetwork()),
1352 wifi_(NULL),
1353 cellular_(NULL) {
1354 }
1355 ~NetworkLibraryStubImpl() { if (ethernet_) delete ethernet_; }
1301 virtual void AddObserver(Observer* observer) {} 1356 virtual void AddObserver(Observer* observer) {}
1302 virtual void RemoveObserver(Observer* observer) {} 1357 virtual void RemoveObserver(Observer* observer) {}
1303 virtual void AddProperyObserver(const char* service_path, 1358 virtual void AddProperyObserver(const char* service_path,
1304 PropertyObserver* observer) {} 1359 PropertyObserver* observer) {}
1305 virtual void RemoveProperyObserver(PropertyObserver* observer) {} 1360 virtual void RemoveProperyObserver(PropertyObserver* observer) {}
1306 virtual const EthernetNetwork& ethernet_network() const { 1361 virtual EthernetNetwork* ethernet_network() {
1307 return ethernet_; 1362 return ethernet_;
1308 } 1363 }
1309 virtual bool ethernet_connecting() const { return false; } 1364 virtual bool ethernet_connecting() const { return false; }
1310 virtual bool ethernet_connected() const { return true; } 1365 virtual bool ethernet_connected() const { return true; }
1311 virtual const WifiNetwork& wifi_network() const { 1366 virtual WifiNetwork* wifi_network() {
1312 return wifi_; 1367 return wifi_;
1313 } 1368 }
1314 virtual bool wifi_connecting() const { return false; } 1369 virtual bool wifi_connecting() const { return false; }
1315 virtual bool wifi_connected() const { return false; } 1370 virtual bool wifi_connected() const { return false; }
1316 virtual const CellularNetwork& cellular_network() const { 1371 virtual CellularNetwork* cellular_network() {
1317 return cellular_; 1372 return cellular_;
1318 } 1373 }
1319 virtual bool cellular_connecting() const { return false; } 1374 virtual bool cellular_connecting() const { return false; }
1320 virtual bool cellular_connected() const { return false; } 1375 virtual bool cellular_connected() const { return false; }
1321 1376
1322 bool Connected() const { return true; } 1377 bool Connected() const { return true; }
1323 bool Connecting() const { return false; } 1378 bool Connecting() const { return false; }
1324 const std::string& IPAddress() const { return ip_address_; } 1379 const std::string& IPAddress() const { return ip_address_; }
1325 virtual const WifiNetworkVector& wifi_networks() const { 1380 virtual const WifiNetworkVector& wifi_networks() const {
1326 return wifi_networks_; 1381 return wifi_networks_;
1327 } 1382 }
1328 virtual const WifiNetworkVector& remembered_wifi_networks() const { 1383 virtual const WifiNetworkVector& remembered_wifi_networks() const {
1329 return wifi_networks_; 1384 return wifi_networks_;
1330 } 1385 }
1331 virtual const CellularNetworkVector& cellular_networks() const { 1386 virtual const CellularNetworkVector& cellular_networks() const {
1332 return cellular_networks_; 1387 return cellular_networks_;
1333 } 1388 }
1334 virtual const CellularNetworkVector& remembered_cellular_networks() const { 1389 virtual bool has_cellular_networks() const {
1335 return cellular_networks_; 1390 return cellular_networks_.begin() != cellular_networks_.end();
1336 } 1391 }
1337
1338 ///////////////////////////////////////////////////////////////////////////// 1392 /////////////////////////////////////////////////////////////////////////////
1339 1393
1340 virtual bool FindWifiNetworkByPath( 1394 virtual WifiNetwork* FindWifiNetworkByPath(
1341 const std::string& path, WifiNetwork* result) const { return false; } 1395 const std::string& path) { return NULL; }
1342 virtual bool FindCellularNetworkByPath( 1396 virtual CellularNetwork* FindCellularNetworkByPath(
1343 const std::string& path, CellularNetwork* result) const { return false; } 1397 const std::string& path) { return NULL; }
1344 virtual void RequestWifiScan() {} 1398 virtual void RequestWifiScan() {}
1345 virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) { 1399 virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) {
1346 return false; 1400 return false;
1347 } 1401 }
1348 1402
1349 virtual void ConnectToWifiNetwork(WifiNetwork network, 1403 virtual void ConnectToWifiNetwork(const WifiNetwork* network,
1350 const std::string& password, 1404 const std::string& password,
1351 const std::string& identity, 1405 const std::string& identity,
1352 const std::string& certpath) {} 1406 const std::string& certpath) {}
1353 virtual void ConnectToWifiNetwork(const std::string& ssid, 1407 virtual void ConnectToWifiNetwork(const std::string& ssid,
1354 const std::string& password, 1408 const std::string& password,
1355 const std::string& identity, 1409 const std::string& identity,
1356 const std::string& certpath, 1410 const std::string& certpath,
1357 bool auto_connect) {} 1411 bool auto_connect) {}
1358 virtual void ConnectToCellularNetwork(CellularNetwork network) {} 1412 virtual void ConnectToCellularNetwork(const CellularNetwork* network) {}
1359 virtual void RefreshCellularDataPlans(const CellularNetwork& network) {} 1413 virtual void RefreshCellularDataPlans(const CellularNetwork* network) {}
1360 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork& network) {} 1414 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) {}
1361 virtual void SaveCellularNetwork(const CellularNetwork& network) {} 1415 virtual void SaveCellularNetwork(const CellularNetwork* network) {}
1362 virtual void SaveWifiNetwork(const WifiNetwork& network) {} 1416 virtual void SaveWifiNetwork(const WifiNetwork* network) {}
1363 virtual void ForgetWirelessNetwork(const std::string& service_path) {} 1417 virtual void ForgetWifiNetwork(const std::string& service_path) {}
1364 virtual bool ethernet_available() const { return true; } 1418 virtual bool ethernet_available() const { return true; }
1365 virtual bool wifi_available() const { return false; } 1419 virtual bool wifi_available() const { return false; }
1366 virtual bool cellular_available() const { return false; } 1420 virtual bool cellular_available() const { return false; }
1367 virtual bool ethernet_enabled() const { return true; } 1421 virtual bool ethernet_enabled() const { return true; }
1368 virtual bool wifi_enabled() const { return false; } 1422 virtual bool wifi_enabled() const { return false; }
1369 virtual bool cellular_enabled() const { return false; } 1423 virtual bool cellular_enabled() const { return false; }
1370 virtual bool offline_mode() const { return false; } 1424 virtual bool offline_mode() const { return false; }
1371 virtual void EnableEthernetNetworkDevice(bool enable) {} 1425 virtual void EnableEthernetNetworkDevice(bool enable) {}
1372 virtual void EnableWifiNetworkDevice(bool enable) {} 1426 virtual void EnableWifiNetworkDevice(bool enable) {}
1373 virtual void EnableCellularNetworkDevice(bool enable) {} 1427 virtual void EnableCellularNetworkDevice(bool enable) {}
1374 virtual void EnableOfflineMode(bool enable) {} 1428 virtual void EnableOfflineMode(bool enable) {}
1375 virtual NetworkIPConfigVector GetIPConfigs(const std::string& device_path, 1429 virtual NetworkIPConfigVector GetIPConfigs(const std::string& device_path,
1376 std::string* hardware_address) { 1430 std::string* hardware_address) {
1377 hardware_address->clear(); 1431 hardware_address->clear();
1378 return NetworkIPConfigVector(); 1432 return NetworkIPConfigVector();
1379 } 1433 }
1380 virtual std::string GetHtmlInfo(int refresh) { return std::string(); } 1434 virtual std::string GetHtmlInfo(int refresh) { return std::string(); }
1381 virtual void UpdateSystemInfo() {} 1435 virtual void UpdateSystemInfo() {}
1382 1436
1383 private: 1437 private:
1384 std::string ip_address_; 1438 std::string ip_address_;
1385 EthernetNetwork ethernet_; 1439 EthernetNetwork* ethernet_;
1386 WifiNetwork wifi_; 1440 WifiNetwork* wifi_;
1387 CellularNetwork cellular_; 1441 CellularNetwork* cellular_;
1388 WifiNetworkVector wifi_networks_; 1442 WifiNetworkVector wifi_networks_;
1389 CellularNetworkVector cellular_networks_; 1443 CellularNetworkVector cellular_networks_;
1390 }; 1444 };
1391 1445
1392 // static 1446 // static
1393 NetworkLibrary* NetworkLibrary::GetImpl(bool stub) { 1447 NetworkLibrary* NetworkLibrary::GetImpl(bool stub) {
1394 if (stub) 1448 if (stub)
1395 return new NetworkLibraryStubImpl(); 1449 return new NetworkLibraryStubImpl();
1396 else 1450 else
1397 return new NetworkLibraryImpl(); 1451 return new NetworkLibraryImpl();
1398 } 1452 }
1399 1453
1400 } // namespace chromeos 1454 } // namespace chromeos
1401 1455
1402 // Allows InvokeLater without adding refcounting. This class is a Singleton and 1456 // Allows InvokeLater without adding refcounting. This class is a Singleton and
1403 // won't be deleted until it's last InvokeLater is run. 1457 // won't be deleted until it's last InvokeLater is run.
1404 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImpl); 1458 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImpl);
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/cros/network_library.h ('k') | chrome/browser/chromeos/dom_ui/internet_options_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698