Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(284)

Side by Side Diff: chromeos/network/network_state_handler.cc

Issue 21961003: Request updates when network state changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase + fix comment Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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;
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;
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
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 // The FavoriteState list only changes when the NetworkState list changes,
600 NetworkListChanged()); 614 // so no need to signal observers here again.
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
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
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
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698