| 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 |