Chromium Code Reviews| 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/location.h" | 9 #include "base/location.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 264 } | 264 } |
| 265 | 265 |
| 266 void NetworkStateHandler::GetNetworkListByType(const NetworkTypePattern& type, | 266 void NetworkStateHandler::GetNetworkListByType(const NetworkTypePattern& type, |
| 267 NetworkStateList* list) const { | 267 NetworkStateList* list) const { |
| 268 DCHECK(list); | 268 DCHECK(list); |
| 269 list->clear(); | 269 list->clear(); |
| 270 for (ManagedStateList::const_iterator iter = network_list_.begin(); | 270 for (ManagedStateList::const_iterator iter = network_list_.begin(); |
| 271 iter != network_list_.end(); ++iter) { | 271 iter != network_list_.end(); ++iter) { |
| 272 const NetworkState* network = (*iter)->AsNetworkState(); | 272 const NetworkState* network = (*iter)->AsNetworkState(); |
| 273 DCHECK(network); | 273 DCHECK(network); |
| 274 if (!network->update_received()) | 274 if (network->update_received() && network->Matches(type)) |
| 275 continue; | |
| 276 if (network->Matches(type)) | |
| 277 list->push_back(network); | 275 list->push_back(network); |
| 278 } | 276 } |
| 279 } | 277 } |
| 280 | 278 |
| 281 void NetworkStateHandler::GetDeviceList(DeviceStateList* list) const { | 279 void NetworkStateHandler::GetDeviceList(DeviceStateList* list) const { |
| 282 DCHECK(list); | 280 DCHECK(list); |
| 283 list->clear(); | 281 list->clear(); |
| 284 for (ManagedStateList::const_iterator iter = device_list_.begin(); | 282 for (ManagedStateList::const_iterator iter = device_list_.begin(); |
| 285 iter != device_list_.end(); ++iter) { | 283 iter != device_list_.end(); ++iter) { |
| 286 const DeviceState* device = (*iter)->AsDeviceState(); | 284 const DeviceState* device = (*iter)->AsDeviceState(); |
| 287 DCHECK(device); | 285 DCHECK(device); |
| 288 if (!device->update_received()) | 286 if (device->update_received()) |
| 289 continue; | 287 list->push_back(device); |
| 290 list->push_back(device); | |
| 291 } | 288 } |
| 292 } | 289 } |
| 293 | 290 |
| 294 void NetworkStateHandler::GetFavoriteList(FavoriteStateList* list) const { | 291 void NetworkStateHandler::GetFavoriteList(FavoriteStateList* list) const { |
| 292 GetFavoriteListByType(NetworkTypePattern::Default(), list); | |
| 293 } | |
| 294 | |
| 295 void NetworkStateHandler::GetFavoriteListByType(const NetworkTypePattern& type, | |
| 296 FavoriteStateList* list) const { | |
| 295 DCHECK(list); | 297 DCHECK(list); |
| 296 FavoriteStateList result; | 298 FavoriteStateList result; |
| 297 list->clear(); | 299 list->clear(); |
| 298 for (ManagedStateList::const_iterator iter = favorite_list_.begin(); | 300 for (ManagedStateList::const_iterator iter = favorite_list_.begin(); |
| 299 iter != favorite_list_.end(); ++iter) { | 301 iter != favorite_list_.end(); ++iter) { |
| 300 const FavoriteState* favorite = (*iter)->AsFavoriteState(); | 302 const FavoriteState* favorite = (*iter)->AsFavoriteState(); |
| 301 DCHECK(favorite); | 303 DCHECK(favorite); |
| 302 if (!favorite->update_received()) | 304 if (favorite->update_received() && favorite->is_favorite() && |
| 303 continue; | 305 favorite->Matches(type)) { |
| 304 if (favorite->is_favorite()) | |
| 305 list->push_back(favorite); | 306 list->push_back(favorite); |
| 307 } | |
| 306 } | 308 } |
| 307 } | 309 } |
| 308 | 310 |
| 309 const FavoriteState* NetworkStateHandler::GetFavoriteState( | 311 const FavoriteState* NetworkStateHandler::GetFavoriteState( |
| 310 const std::string& service_path) const { | 312 const std::string& service_path) const { |
| 311 ManagedState* managed = | 313 ManagedState* managed = |
| 312 GetModifiableManagedState(&favorite_list_, service_path); | 314 GetModifiableManagedState(&favorite_list_, service_path); |
| 313 if (!managed) | 315 if (!managed) |
| 314 return NULL; | 316 return NULL; |
| 315 DCHECK(managed->update_received()); | 317 DCHECK(managed->update_received()); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 355 ManagedState::MANAGED_TYPE_NETWORK, network->path()); | 357 ManagedState::MANAGED_TYPE_NETWORK, network->path()); |
| 356 } | 358 } |
| 357 } | 359 } |
| 358 | 360 |
| 359 void NetworkStateHandler::SetCheckPortalList( | 361 void NetworkStateHandler::SetCheckPortalList( |
| 360 const std::string& check_portal_list) { | 362 const std::string& check_portal_list) { |
| 361 NET_LOG_EVENT("SetCheckPortalList", check_portal_list); | 363 NET_LOG_EVENT("SetCheckPortalList", check_portal_list); |
| 362 shill_property_handler_->SetCheckPortalList(check_portal_list); | 364 shill_property_handler_->SetCheckPortalList(check_portal_list); |
| 363 } | 365 } |
| 364 | 366 |
| 367 const FavoriteState* NetworkStateHandler::GetEAPForEthernet( | |
| 368 const std::string& service_path) const { | |
| 369 const NetworkState* network = GetNetworkState(service_path); | |
| 370 if (!network) { | |
| 371 NET_LOG_ERROR("GetEAPForEthernet", "Unknown service path " + service_path); | |
| 372 return NULL; | |
| 373 } | |
| 374 if (network->type() != flimflam::kTypeEthernet || | |
|
stevenjb
2013/09/28 00:37:45
Shouldn't this trigger an error?
pneubeck (no reviews)
2013/09/30 20:08:31
Done.
| |
| 375 !network->IsConnectedState()) { | |
| 376 return NULL; | |
| 377 } | |
| 378 | |
| 379 // The same EAP service is shared for all ethernet services/devices. | |
| 380 // However EAP is used/enabled per device and only if the connection was | |
| 381 // successfully established. | |
| 382 const DeviceState* device = GetDeviceState(network->device_path()); | |
| 383 if (!device) { | |
| 384 NET_LOG_ERROR( | |
| 385 "GetEAPForEthernet", | |
| 386 base::StringPrintf("Unknown device %s of connected ethernet service %s", | |
| 387 service_path.c_str(), | |
| 388 network->device_path().c_str())); | |
| 389 return NULL; | |
| 390 } | |
| 391 if (!device->eap_authentication_completed()) | |
| 392 return NULL; | |
| 393 | |
| 394 FavoriteStateList list; | |
| 395 GetFavoriteListByType(NetworkTypePattern::Primitive(shill::kTypeEthernetEap), | |
| 396 &list); | |
| 397 if (list.empty()) { | |
| 398 NET_LOG_ERROR("GetEAPForEthernet", | |
| 399 base::StringPrintf( | |
| 400 "Ethernet service %s connected using EAP, but no " | |
| 401 "EAP service found.", | |
| 402 service_path.c_str())); | |
| 403 return NULL; | |
| 404 } | |
| 405 DCHECK(list.size() == 1); | |
| 406 return list.front(); | |
| 407 } | |
| 408 | |
| 365 void NetworkStateHandler::GetNetworkStatePropertiesForTest( | 409 void NetworkStateHandler::GetNetworkStatePropertiesForTest( |
| 366 base::DictionaryValue* dictionary) const { | 410 base::DictionaryValue* dictionary) const { |
| 367 for (ManagedStateList::const_iterator iter = network_list_.begin(); | 411 for (ManagedStateList::const_iterator iter = network_list_.begin(); |
| 368 iter != network_list_.end(); ++iter) { | 412 iter != network_list_.end(); ++iter) { |
| 369 base::DictionaryValue* network_dict = new base::DictionaryValue; | 413 base::DictionaryValue* network_dict = new base::DictionaryValue; |
| 370 (*iter)->AsNetworkState()->GetProperties(network_dict); | 414 (*iter)->AsNetworkState()->GetProperties(network_dict); |
| 371 dictionary->SetWithoutPathExpansion((*iter)->path(), network_dict); | 415 dictionary->SetWithoutPathExpansion((*iter)->path(), network_dict); |
| 372 } | 416 } |
| 373 } | 417 } |
| 374 | 418 |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 553 return; | 597 return; |
| 554 | 598 |
| 555 std::string detail = device->name() + "." + key; | 599 std::string detail = device->name() + "." + key; |
| 556 detail += " = " + network_event_log::ValueAsString(value); | 600 detail += " = " + network_event_log::ValueAsString(value); |
| 557 NET_LOG_EVENT("DevicePropertyUpdated", detail); | 601 NET_LOG_EVENT("DevicePropertyUpdated", detail); |
| 558 | 602 |
| 559 NotifyDeviceListChanged(); | 603 NotifyDeviceListChanged(); |
| 560 | 604 |
| 561 if (key == shill::kScanningProperty && device->scanning() == false) | 605 if (key == shill::kScanningProperty && device->scanning() == false) |
| 562 ScanCompleted(device->type()); | 606 ScanCompleted(device->type()); |
| 607 if (key == shill::kEapAuthenticationCompletedProperty) { | |
| 608 // Notify a change for each Ethernet service using this device. | |
| 609 NetworkStateList ethernet_services; | |
| 610 GetNetworkListByType(NetworkTypePattern::Ethernet(), ðernet_services); | |
| 611 for (NetworkStateList::const_iterator it = ethernet_services.begin(); | |
| 612 it != ethernet_services.end(); ++it) { | |
| 613 const NetworkState* ethernet_service = *it; | |
| 614 if (ethernet_service->update_received() || | |
| 615 ethernet_service->device_path() != device->path()) { | |
| 616 continue; | |
| 617 } | |
| 618 if (ethernet_service->path() == default_network_path_) | |
| 619 OnDefaultNetworkChanged(); | |
| 620 NetworkPropertiesUpdated(ethernet_service); | |
| 621 } | |
| 622 } | |
| 563 } | 623 } |
| 564 | 624 |
| 565 void NetworkStateHandler::CheckPortalListChanged( | 625 void NetworkStateHandler::CheckPortalListChanged( |
| 566 const std::string& check_portal_list) { | 626 const std::string& check_portal_list) { |
| 567 check_portal_list_ = check_portal_list; | 627 check_portal_list_ = check_portal_list; |
| 568 } | 628 } |
| 569 | 629 |
| 570 void NetworkStateHandler::TechnologyListChanged() { | 630 void NetworkStateHandler::TechnologyListChanged() { |
| 571 // Eventually we would like to replace Technology state with Device state. | 631 // Eventually we would like to replace Technology state with Device state. |
| 572 // For now, treat technology state changes as device list changes. | 632 // For now, treat technology state changes as device list changes. |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 735 } | 795 } |
| 736 | 796 |
| 737 if (type.MatchesType(shill::kTypeCellular)) | 797 if (type.MatchesType(shill::kTypeCellular)) |
| 738 return shill::kTypeCellular; | 798 return shill::kTypeCellular; |
| 739 | 799 |
| 740 NOTREACHED(); | 800 NOTREACHED(); |
| 741 return std::string(); | 801 return std::string(); |
| 742 } | 802 } |
| 743 | 803 |
| 744 } // namespace chromeos | 804 } // namespace chromeos |
| OLD | NEW |