| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chromeos/network/network_state_handler.h" | 5 #include "chromeos/network/network_state_handler.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/format_macros.h" | 8 #include "base/format_macros.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 | 123 |
| 124 void NetworkStateHandler::AddObserver(NetworkStateHandlerObserver* observer) { | 124 void NetworkStateHandler::AddObserver(NetworkStateHandlerObserver* observer) { |
| 125 observers_.AddObserver(observer); | 125 observers_.AddObserver(observer); |
| 126 } | 126 } |
| 127 | 127 |
| 128 void NetworkStateHandler::RemoveObserver( | 128 void NetworkStateHandler::RemoveObserver( |
| 129 NetworkStateHandlerObserver* observer) { | 129 NetworkStateHandlerObserver* observer) { |
| 130 observers_.RemoveObserver(observer); | 130 observers_.RemoveObserver(observer); |
| 131 } | 131 } |
| 132 | 132 |
| 133 bool NetworkStateHandler::TechnologyAvailable(const std::string& type) const { | 133 NetworkStateHandler::TechnologyState NetworkStateHandler::GetTechnologyState( |
| 134 if (type == kMatchTypeMobile) { | 134 const std::string& type) const { |
| 135 return shill_property_handler_->TechnologyAvailable(flimflam::kTypeWimax) || | 135 std::string technology = TechnologyForType(type); |
| 136 shill_property_handler_->TechnologyAvailable(flimflam::kTypeCellular); | 136 TechnologyState state; |
| 137 } | 137 if (shill_property_handler_->TechnologyEnabled(technology)) |
| 138 return shill_property_handler_->TechnologyAvailable(type); | 138 state = TECHNOLOGY_ENABLED; |
| 139 else if (shill_property_handler_->TechnologyEnabling(technology)) |
| 140 state = TECHNOLOGY_ENABLING; |
| 141 else if (shill_property_handler_->TechnologyUninitialized(technology)) |
| 142 state = TECHNOLOGY_UNINITIALIZED; |
| 143 else if (shill_property_handler_->TechnologyAvailable(technology)) |
| 144 state = TECHNOLOGY_AVAILABLE; |
| 145 else |
| 146 state = TECHNOLOGY_UNINITIALIZED; |
| 147 VLOG(2) << "GetTechnologyState: " << type << " = " << state; |
| 148 return state; |
| 139 } | 149 } |
| 140 | 150 |
| 141 bool NetworkStateHandler::TechnologyEnabled(const std::string& type) const { | |
| 142 if (type == kMatchTypeMobile) { | |
| 143 return shill_property_handler_->TechnologyEnabled(flimflam::kTypeWimax) || | |
| 144 shill_property_handler_->TechnologyEnabled(flimflam::kTypeCellular); | |
| 145 } | |
| 146 return shill_property_handler_->TechnologyEnabled(type); | |
| 147 } | |
| 148 | |
| 149 bool NetworkStateHandler::TechnologyUninitialized( | |
| 150 const std::string& type) const { | |
| 151 if (type == kMatchTypeMobile) { | |
| 152 return | |
| 153 shill_property_handler_->TechnologyUninitialized( | |
| 154 flimflam::kTypeWimax) || | |
| 155 shill_property_handler_->TechnologyUninitialized( | |
| 156 flimflam::kTypeCellular); | |
| 157 } | |
| 158 return shill_property_handler_->TechnologyUninitialized(type); | |
| 159 } | |
| 160 | |
| 161 | |
| 162 void NetworkStateHandler::SetTechnologyEnabled( | 151 void NetworkStateHandler::SetTechnologyEnabled( |
| 163 const std::string& type, | 152 const std::string& type, |
| 164 bool enabled, | 153 bool enabled, |
| 165 const network_handler::ErrorCallback& error_callback) { | 154 const network_handler::ErrorCallback& error_callback) { |
| 166 if (type == kMatchTypeMobile) { | 155 std::string technology = TechnologyForType(type); |
| 167 shill_property_handler_->SetTechnologyEnabled( | 156 network_event_log::AddEntry( |
| 168 flimflam::kTypeCellular, enabled, error_callback); | 157 kLogModule, "SetTechnologyEnabled", |
| 169 shill_property_handler_->SetTechnologyEnabled( | 158 base::StringPrintf("%s:%d", technology.c_str(), enabled)); |
| 170 flimflam::kTypeWimax, enabled, error_callback); | 159 shill_property_handler_->SetTechnologyEnabled( |
| 171 } else { | 160 technology, enabled, error_callback); |
| 172 shill_property_handler_->SetTechnologyEnabled( | 161 ManagerPropertyChanged(); // Technology state changed -> ENABLING |
| 173 type, enabled, error_callback); | |
| 174 } | |
| 175 } | 162 } |
| 176 | 163 |
| 177 const DeviceState* NetworkStateHandler::GetDeviceState( | 164 const DeviceState* NetworkStateHandler::GetDeviceState( |
| 178 const std::string& device_path) const { | 165 const std::string& device_path) const { |
| 179 return GetModifiableDeviceState(device_path); | 166 return GetModifiableDeviceState(device_path); |
| 180 } | 167 } |
| 181 | 168 |
| 182 const DeviceState* NetworkStateHandler::GetDeviceStateByType( | 169 const DeviceState* NetworkStateHandler::GetDeviceStateByType( |
| 183 const std::string& type) const { | 170 const std::string& type) const { |
| 184 for (ManagedStateList::const_iterator iter = device_list_.begin(); | 171 for (ManagedStateList::const_iterator iter = device_list_.begin(); |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 461 network_event_log::AddEntry(kLogModule, "DevicePropertyUpdated", detail); | 448 network_event_log::AddEntry(kLogModule, "DevicePropertyUpdated", detail); |
| 462 | 449 |
| 463 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | 450 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, |
| 464 DeviceListChanged()); | 451 DeviceListChanged()); |
| 465 | 452 |
| 466 if (key == flimflam::kScanningProperty && device->scanning() == false) | 453 if (key == flimflam::kScanningProperty && device->scanning() == false) |
| 467 ScanCompleted(device->type()); | 454 ScanCompleted(device->type()); |
| 468 } | 455 } |
| 469 | 456 |
| 470 void NetworkStateHandler::ManagerPropertyChanged() { | 457 void NetworkStateHandler::ManagerPropertyChanged() { |
| 458 network_event_log::AddEntry(kLogModule, "NetworkManagerChanged", ""); |
| 471 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | 459 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, |
| 472 NetworkManagerChanged()); | 460 NetworkManagerChanged()); |
| 473 } | 461 } |
| 474 | 462 |
| 475 void NetworkStateHandler::ManagedStateListChanged( | 463 void NetworkStateHandler::ManagedStateListChanged( |
| 476 ManagedState::ManagedType type) { | 464 ManagedState::ManagedType type) { |
| 477 if (type == ManagedState::MANAGED_TYPE_NETWORK) { | 465 if (type == ManagedState::MANAGED_TYPE_NETWORK) { |
| 478 // Notify observers that the list of networks has changed. | 466 // Notify observers that the list of networks has changed. |
| 479 network_event_log::AddEntry( | 467 network_event_log::AddEntry( |
| 480 kLogModule, "NetworkListChanged", | 468 kLogModule, "NetworkListChanged", |
| 481 base::StringPrintf("Size: %"PRIuS, network_list_.size())); | 469 base::StringPrintf("Size:%"PRIuS, network_list_.size())); |
| 482 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | 470 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, |
| 483 NetworkListChanged()); | 471 NetworkListChanged()); |
| 484 // The list order may have changed, so check if the default network changed. | 472 // The list order may have changed, so check if the default network changed. |
| 485 if (CheckDefaultNetworkChanged()) | 473 if (CheckDefaultNetworkChanged()) |
| 486 OnDefaultNetworkChanged(); | 474 OnDefaultNetworkChanged(); |
| 487 } else if (type == ManagedState::MANAGED_TYPE_DEVICE) { | 475 } else if (type == ManagedState::MANAGED_TYPE_DEVICE) { |
| 488 network_event_log::AddEntry( | 476 network_event_log::AddEntry( |
| 489 kLogModule, "DeviceListChanged", | 477 kLogModule, "DeviceListChanged", |
| 490 base::StringPrintf("Size: %"PRIuS, device_list_.size())); | 478 base::StringPrintf("Size:%"PRIuS, device_list_.size())); |
| 491 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | 479 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, |
| 492 DeviceListChanged()); | 480 DeviceListChanged()); |
| 493 } else { | 481 } else { |
| 494 NOTREACHED(); | 482 NOTREACHED(); |
| 495 } | 483 } |
| 496 } | 484 } |
| 497 | 485 |
| 498 //------------------------------------------------------------------------------ | 486 //------------------------------------------------------------------------------ |
| 499 // Private methods | 487 // Private methods |
| 500 | 488 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 case ManagedState::MANAGED_TYPE_DEVICE: | 523 case ManagedState::MANAGED_TYPE_DEVICE: |
| 536 return &device_list_; | 524 return &device_list_; |
| 537 } | 525 } |
| 538 NOTREACHED(); | 526 NOTREACHED(); |
| 539 return NULL; | 527 return NULL; |
| 540 } | 528 } |
| 541 | 529 |
| 542 void NetworkStateHandler::OnNetworkConnectionStateChanged( | 530 void NetworkStateHandler::OnNetworkConnectionStateChanged( |
| 543 NetworkState* network) { | 531 NetworkState* network) { |
| 544 DCHECK(network); | 532 DCHECK(network); |
| 545 std::string desc = base::StringPrintf( | |
| 546 "%s: %s", network->path().c_str(), network->connection_state().c_str()); | |
| 547 network_event_log::AddEntry( | 533 network_event_log::AddEntry( |
| 548 kLogModule, "NetworkConnectionStateChanged", desc); | 534 kLogModule, "NetworkConnectionStateChanged", |
| 535 base::StringPrintf("%s:%s", network->path().c_str(), |
| 536 network->connection_state().c_str())); |
| 549 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | 537 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, |
| 550 NetworkConnectionStateChanged(network)); | 538 NetworkConnectionStateChanged(network)); |
| 551 if (CheckDefaultNetworkChanged() || network->path() == default_network_path_) | 539 if (CheckDefaultNetworkChanged() || network->path() == default_network_path_) |
| 552 OnDefaultNetworkChanged(); | 540 OnDefaultNetworkChanged(); |
| 553 } | 541 } |
| 554 | 542 |
| 555 bool NetworkStateHandler::CheckDefaultNetworkChanged() { | 543 bool NetworkStateHandler::CheckDefaultNetworkChanged() { |
| 556 std::string new_default_network_path; | 544 std::string new_default_network_path; |
| 557 const NetworkState* new_default_network = DefaultNetwork(); | 545 const NetworkState* new_default_network = DefaultNetwork(); |
| 558 if (new_default_network) | 546 if (new_default_network) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 577 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | 565 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, |
| 578 NetworkPropertiesUpdated(network)); | 566 NetworkPropertiesUpdated(network)); |
| 579 // If |connecting_network_| transitions to a non-idle, non-connecting state, | 567 // If |connecting_network_| transitions to a non-idle, non-connecting state, |
| 580 // clear it *after* signalling observers. | 568 // clear it *after* signalling observers. |
| 581 if (network->path() == connecting_network_ && | 569 if (network->path() == connecting_network_ && |
| 582 !network->IsConnectingState() && | 570 !network->IsConnectingState() && |
| 583 network->connection_state() != flimflam::kStateIdle) { | 571 network->connection_state() != flimflam::kStateIdle) { |
| 584 connecting_network_.clear(); | 572 connecting_network_.clear(); |
| 585 network_event_log::AddEntry( | 573 network_event_log::AddEntry( |
| 586 kLogModule, "ClearConnectingNetwork", | 574 kLogModule, "ClearConnectingNetwork", |
| 587 base::StringPrintf("%s: %s", network->path().c_str(), | 575 base::StringPrintf("%s:%s", network->path().c_str(), |
| 588 network->connection_state().c_str())); | 576 network->connection_state().c_str())); |
| 589 } | 577 } |
| 590 } | 578 } |
| 591 | 579 |
| 592 void NetworkStateHandler::ScanCompleted(const std::string& type) { | 580 void NetworkStateHandler::ScanCompleted(const std::string& type) { |
| 593 size_t num_callbacks = scan_complete_callbacks_.count(type); | 581 size_t num_callbacks = scan_complete_callbacks_.count(type); |
| 594 network_event_log::AddEntry( | 582 network_event_log::AddEntry( |
| 595 kLogModule, "ScanCompleted", | 583 kLogModule, "ScanCompleted", |
| 596 base::StringPrintf("%s: %"PRIuS, type.c_str(), num_callbacks)); | 584 base::StringPrintf("%s:%"PRIuS, type.c_str(), num_callbacks)); |
| 597 if (num_callbacks == 0) | 585 if (num_callbacks == 0) |
| 598 return; | 586 return; |
| 599 ScanCallbackList& callback_list = scan_complete_callbacks_[type]; | 587 ScanCallbackList& callback_list = scan_complete_callbacks_[type]; |
| 600 for (ScanCallbackList::iterator iter = callback_list.begin(); | 588 for (ScanCallbackList::iterator iter = callback_list.begin(); |
| 601 iter != callback_list.end(); ++iter) { | 589 iter != callback_list.end(); ++iter) { |
| 602 (*iter).Run(); | 590 (*iter).Run(); |
| 603 } | 591 } |
| 604 scan_complete_callbacks_.erase(type); | 592 scan_complete_callbacks_.erase(type); |
| 605 } | 593 } |
| 606 | 594 |
| 595 std::string NetworkStateHandler::TechnologyForType( |
| 596 const std::string& type) const { |
| 597 if (type == kMatchTypeMobile) { |
| 598 if (shill_property_handler_->TechnologyAvailable(flimflam::kTypeWimax)) |
| 599 return flimflam::kTypeWimax; |
| 600 else |
| 601 return flimflam::kTypeCellular; |
| 602 } |
| 603 if (type == kMatchTypeDefault || type == kMatchTypeNonVirtual || |
| 604 type == kMatchTypeWireless) { |
| 605 NOTREACHED(); |
| 606 return flimflam::kTypeWifi; |
| 607 } |
| 608 return type; |
| 609 } |
| 610 |
| 607 } // namespace chromeos | 611 } // namespace chromeos |
| OLD | NEW |