OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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/<secs>)"); | 914 output.append("(To auto-refresh this page: about:network/<secs>)"); |
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(ðernet_) + "</tr>"); | 919 output.append("<tr>" + ToHtmlTableHeader(ethernet_) + "</tr>"); |
879 output.append("<tr>" + ToHtmlTableRow(ðernet_) + "</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 Loading... |
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 Loading... |
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, ðernet_, &wifi_networks_, &cellular_networks_, | 1261 ParseSystem(system, ðernet_, &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); |
OLD | NEW |