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/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 433 } | 433 } |
| 434 managed = ManagedState::Create(type, path); | 434 managed = ManagedState::Create(type, path); |
| 435 managed_list->push_back(managed); | 435 managed_list->push_back(managed); |
| 436 } else { | 436 } else { |
| 437 managed = found->second; | 437 managed = found->second; |
| 438 managed_list->push_back(managed); | 438 managed_list->push_back(managed); |
| 439 managed_map.erase(found); | 439 managed_map.erase(found); |
| 440 } | 440 } |
| 441 list_entries.insert(path); | 441 list_entries.insert(path); |
| 442 } | 442 } |
| 443 // Delete any remaning entries in managed_map. | 443 // Delete any remaining entries in managed_map. |
| 444 STLDeleteContainerPairSecondPointers(managed_map.begin(), managed_map.end()); | 444 STLDeleteContainerPairSecondPointers(managed_map.begin(), managed_map.end()); |
| 445 } | 445 } |
| 446 | 446 |
| 447 void NetworkStateHandler::ProfileListChanged() { | 447 void NetworkStateHandler::ProfileListChanged() { |
| 448 NET_LOG_EVENT("ProfileListChanged", "Re-Requesting Network Properties"); | 448 NET_LOG_EVENT("ProfileListChanged", "Re-Requesting Network Properties"); |
| 449 for (ManagedStateList::iterator iter = network_list_.begin(); | 449 for (ManagedStateList::iterator iter = network_list_.begin(); |
| 450 iter != network_list_.end(); ++iter) { | 450 iter != network_list_.end(); ++iter) { |
| 451 shill_property_handler_->RequestProperties( | 451 shill_property_handler_->RequestProperties( |
| 452 ManagedState::MANAGED_TYPE_NETWORK, (*iter)->path()); | 452 ManagedState::MANAGED_TYPE_NETWORK, (*iter)->path()); |
| 453 } | 453 } |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 517 ManagedState* favorite = | 517 ManagedState* favorite = |
| 518 GetModifiableManagedState(&favorite_list_, service_path); | 518 GetModifiableManagedState(&favorite_list_, service_path); |
| 519 if (favorite) | 519 if (favorite) |
| 520 favorite->PropertyChanged(key, value); | 520 favorite->PropertyChanged(key, value); |
| 521 | 521 |
| 522 // Update the NetworkState. | 522 // Update the NetworkState. |
| 523 NetworkState* network = GetModifiableNetworkState(service_path); | 523 NetworkState* network = GetModifiableNetworkState(service_path); |
| 524 if (!network) | 524 if (!network) |
| 525 return; | 525 return; |
| 526 std::string prev_connection_state = network->connection_state(); | 526 std::string prev_connection_state = network->connection_state(); |
| 527 std::string prev_profile_path = network->profile_path(); | |
| 527 if (!network->PropertyChanged(key, value)) | 528 if (!network->PropertyChanged(key, value)) |
| 528 return; | 529 return; |
| 529 | 530 |
| 530 if (key == flimflam::kStateProperty) { | 531 if (key == flimflam::kStateProperty) { |
| 531 if (ConnectionStateChanged(network, prev_connection_state)) | 532 if (ConnectionStateChanged(network, prev_connection_state)) { |
| 532 OnNetworkConnectionStateChanged(network); | 533 OnNetworkConnectionStateChanged(network); |
| 534 // If the connection state changes, other properties such as IPConfig | |
| 535 // may have changed, so request a full update. | |
| 536 RequestUpdateForNetwork(service_path); | |
| 537 } | |
| 533 } else { | 538 } else { |
| 534 if (network->path() == default_network_path_ && | 539 bool noisy_property = |
| 535 key != flimflam::kSignalStrengthProperty && | 540 key == flimflam::kSignalStrengthProperty || |
| 536 key != shill::kWifiFrequencyListProperty) { | 541 key == shill::kWifiFrequencyListProperty; |
|
pneubeck (no reviews)
2013/08/08 07:40:56
nit:
I don't say you should, but you could remove
| |
| 537 // WiFi SignalStrength and WifiFrequencyList updates are too noisy, so | 542 if (network->path() == default_network_path_ && !noisy_property) { |
| 543 // Wifi SignalStrength and WifiFrequencyList updates are too noisy, so | |
| 538 // don't trigger default network updates for those changes. | 544 // don't trigger default network updates for those changes. |
| 539 OnDefaultNetworkChanged(); | 545 OnDefaultNetworkChanged(); |
| 540 } | 546 } |
| 541 std::string detail = network->name() + "." + key; | 547 if (prev_profile_path.empty() && !network->profile_path().empty()) { |
| 542 detail += " = " + network_event_log::ValueAsString(value); | 548 // If added to a Profile, request a full update so that a FavoriteState |
| 543 network_event_log::LogLevel log_level = network_event_log::LOG_LEVEL_EVENT; | 549 // gets created. |
| 544 if (key == flimflam::kErrorProperty || key == shill::kErrorDetailsProperty) | 550 RequestUpdateForNetwork(service_path); |
| 545 log_level = network_event_log::LOG_LEVEL_ERROR; | 551 } |
| 546 else if (key == flimflam::kSignalStrengthProperty || | 552 if (!noisy_property) { |
| 547 key == shill::kWifiFrequencyListProperty) | 553 std::string detail = network->name() + "." + key; |
| 548 log_level = network_event_log::LOG_LEVEL_DEBUG; | 554 detail += " = " + network_event_log::ValueAsString(value); |
| 549 NET_LOG_LEVEL(log_level, "NetworkPropertyUpdated", detail); | 555 network_event_log::LogLevel log_level; |
| 556 if (key == flimflam::kErrorProperty || | |
| 557 key == shill::kErrorDetailsProperty) { | |
| 558 log_level = network_event_log::LOG_LEVEL_ERROR; | |
| 559 } else { | |
| 560 log_level = network_event_log::LOG_LEVEL_EVENT; | |
|
pneubeck (no reviews)
2013/08/08 07:40:56
nit: you could initialize log_level with LOG_LEVEL
stevenjb
2013/08/08 16:42:30
I had that first but for some reason it looked les
| |
| 561 } | |
| 562 NET_LOG_LEVEL(log_level, "NetworkPropertyUpdated", detail); | |
| 563 } | |
| 550 } | 564 } |
| 551 NetworkPropertiesUpdated(network); | 565 NetworkPropertiesUpdated(network); |
| 552 } | 566 } |
| 553 | 567 |
| 554 void NetworkStateHandler::UpdateDeviceProperty(const std::string& device_path, | 568 void NetworkStateHandler::UpdateDeviceProperty(const std::string& device_path, |
| 555 const std::string& key, | 569 const std::string& key, |
| 556 const base::Value& value) { | 570 const base::Value& value) { |
| 557 DeviceState* device = GetModifiableDeviceState(device_path); | 571 DeviceState* device = GetModifiableDeviceState(device_path); |
| 558 if (!device) | 572 if (!device) |
| 559 return; | 573 return; |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 589 NET_LOG_EVENT("NetworkListChanged", | 603 NET_LOG_EVENT("NetworkListChanged", |
| 590 base::StringPrintf("Size:%" PRIuS, network_list_.size())); | 604 base::StringPrintf("Size:%" PRIuS, network_list_.size())); |
| 591 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | 605 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, |
| 592 NetworkListChanged()); | 606 NetworkListChanged()); |
| 593 // The list order may have changed, so check if the default network changed. | 607 // The list order may have changed, so check if the default network changed. |
| 594 if (CheckDefaultNetworkChanged()) | 608 if (CheckDefaultNetworkChanged()) |
| 595 OnDefaultNetworkChanged(); | 609 OnDefaultNetworkChanged(); |
| 596 } else if (type == ManagedState::MANAGED_TYPE_FAVORITE) { | 610 } else if (type == ManagedState::MANAGED_TYPE_FAVORITE) { |
| 597 NET_LOG_DEBUG("FavoriteListChanged", | 611 NET_LOG_DEBUG("FavoriteListChanged", |
| 598 base::StringPrintf("Size:%" PRIuS, favorite_list_.size())); | 612 base::StringPrintf("Size:%" PRIuS, favorite_list_.size())); |
| 599 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | 613 // This will always get triggered for TYPE_NETWORK if the favorite list |
|
pneubeck (no reviews)
2013/08/08 07:40:56
I know the reason for this change, but I don't qui
stevenjb
2013/08/08 16:42:30
Clarified.
| |
| 600 NetworkListChanged()); | 614 // changes, so do not call observers again here. |
| 601 } else if (type == ManagedState::MANAGED_TYPE_DEVICE) { | 615 } else if (type == ManagedState::MANAGED_TYPE_DEVICE) { |
| 602 NET_LOG_DEBUG("DeviceListChanged", | 616 NET_LOG_DEBUG("DeviceListChanged", |
| 603 base::StringPrintf("Size:%" PRIuS, device_list_.size())); | 617 base::StringPrintf("Size:%" PRIuS, device_list_.size())); |
| 604 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | 618 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, |
| 605 DeviceListChanged()); | 619 DeviceListChanged()); |
| 606 } else { | 620 } else { |
| 607 NOTREACHED(); | 621 NOTREACHED(); |
| 608 } | 622 } |
| 609 } | 623 } |
| 610 | 624 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 683 GetManagedStateLogName(default_network)); | 697 GetManagedStateLogName(default_network)); |
| 684 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | 698 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, |
| 685 DefaultNetworkChanged(default_network)); | 699 DefaultNetworkChanged(default_network)); |
| 686 } | 700 } |
| 687 | 701 |
| 688 void NetworkStateHandler::NetworkPropertiesUpdated( | 702 void NetworkStateHandler::NetworkPropertiesUpdated( |
| 689 const NetworkState* network) { | 703 const NetworkState* network) { |
| 690 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | 704 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, |
| 691 NetworkPropertiesUpdated(network)); | 705 NetworkPropertiesUpdated(network)); |
| 692 // If |connecting_network_| transitions to a non-idle, non-connecting state, | 706 // If |connecting_network_| transitions to a non-idle, non-connecting state, |
| 693 // clear it *after* signalling observers. | 707 // clear it *after* signaling observers. |
| 694 if (network->path() == connecting_network_ && | 708 if (network->path() == connecting_network_ && |
| 695 !network->IsConnectingState() && | 709 !network->IsConnectingState() && |
| 696 network->connection_state() != flimflam::kStateIdle) { | 710 network->connection_state() != flimflam::kStateIdle) { |
| 697 connecting_network_.clear(); | 711 connecting_network_.clear(); |
| 698 NET_LOG_EVENT("ClearConnectingNetwork", base::StringPrintf( | 712 NET_LOG_EVENT("ClearConnectingNetwork", base::StringPrintf( |
| 699 "%s:%s", GetManagedStateLogName(network).c_str(), | 713 "%s:%s", GetManagedStateLogName(network).c_str(), |
| 700 network->connection_state().c_str())); | 714 network->connection_state().c_str())); |
| 701 } | 715 } |
| 702 } | 716 } |
| 703 | 717 |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 725 } | 739 } |
| 726 if (type == kMatchTypeDefault || type == kMatchTypeNonVirtual || | 740 if (type == kMatchTypeDefault || type == kMatchTypeNonVirtual || |
| 727 type == kMatchTypeWireless) { | 741 type == kMatchTypeWireless) { |
| 728 NOTREACHED(); | 742 NOTREACHED(); |
| 729 return flimflam::kTypeWifi; | 743 return flimflam::kTypeWifi; |
| 730 } | 744 } |
| 731 return type; | 745 return type; |
| 732 } | 746 } |
| 733 | 747 |
| 734 } // namespace chromeos | 748 } // namespace chromeos |
| OLD | NEW |