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

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

Issue 979183003: Fix logic for default network notification (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@issue_432404_default_network_0
Patch Set: Add test Created 5 years, 9 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
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/guid.h" 9 #include "base/guid.h"
10 #include "base/json/json_string_value_serializer.h" 10 #include "base/json/json_string_value_serializer.h"
(...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 return; 765 return;
766 766
767 default_network_path_ = service_path; 767 default_network_path_ = service_path;
768 NET_LOG_EVENT("DefaultNetworkServiceChanged:", default_network_path_); 768 NET_LOG_EVENT("DefaultNetworkServiceChanged:", default_network_path_);
769 const NetworkState* network = nullptr; 769 const NetworkState* network = nullptr;
770 if (!default_network_path_.empty()) { 770 if (!default_network_path_.empty()) {
771 network = GetNetworkState(default_network_path_); 771 network = GetNetworkState(default_network_path_);
772 if (!network) { 772 if (!network) {
773 // If NetworkState is not available yet, do not notify observers here, 773 // If NetworkState is not available yet, do not notify observers here,
774 // they will be notified when the state is received. 774 // they will be notified when the state is received.
775 NET_LOG_DEBUG("Default NetworkState not available", 775 NET_LOG(EVENT) << "Default NetworkState not available: "
776 default_network_path_); 776 << default_network_path_;
777 return; 777 return;
778 } 778 }
779 } 779 }
780 if (network && !network->IsConnectedState()) { 780 if (network && !network->IsConnectedState()) {
781 NET_LOG_ERROR( 781 if (network->IsConnectingState()) {
782 "DefaultNetwork is not connected: " + network->connection_state(), 782 NET_LOG(EVENT) << "DefaultNetwork is connecting: " << GetLogName(network)
783 network->path()); 783 << ": " << network->connection_state();
784 } else {
785 NET_LOG(ERROR) << "DefaultNetwork in unexpected state: "
786 << GetLogName(network) << ": "
787 << network->connection_state();
788 }
789 // Do not notify observers here, the notification will occur when the
790 // connection state changes.
791 return;
784 } 792 }
785 NotifyDefaultNetworkChanged(network); 793 NotifyDefaultNetworkChanged(network);
786 } 794 }
787 795
788 //------------------------------------------------------------------------------ 796 //------------------------------------------------------------------------------
789 // Private methods 797 // Private methods
790 798
791 void NetworkStateHandler::UpdateGuid(NetworkState* network) { 799 void NetworkStateHandler::UpdateGuid(NetworkState* network) {
792 std::string specifier = network->GetSpecifier(); 800 std::string specifier = network->GetSpecifier();
793 DCHECK(!specifier.empty()); 801 DCHECK(!specifier.empty());
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 return &device_list_; 868 return &device_list_;
861 } 869 }
862 NOTREACHED(); 870 NOTREACHED();
863 return nullptr; 871 return nullptr;
864 } 872 }
865 873
866 void NetworkStateHandler::OnNetworkConnectionStateChanged( 874 void NetworkStateHandler::OnNetworkConnectionStateChanged(
867 NetworkState* network) { 875 NetworkState* network) {
868 SCOPED_NET_LOG_IF_SLOW(); 876 SCOPED_NET_LOG_IF_SLOW();
869 DCHECK(network); 877 DCHECK(network);
870 std::string event = "NetworkConnectionStateChanged"; 878 bool notify_default = false;
871 if (network->path() == default_network_path_) { 879 if (network->path() == default_network_path_) {
872 event = "Default" + event; 880 if (network->IsConnectedState()) {
873 if (!network->IsConnectedState()) { 881 notify_default = true;
874 NET_LOG_EVENT( 882 } else if (network->IsConnectingState()) {
875 "DefaultNetwork is not connected: " + network->connection_state(), 883 // Wait until the network is actually connected to notify that the default
876 network->path()); 884 // network changed.
885 NET_LOG(EVENT) << "Default network is not connected: "
886 << GetLogName(network)
887 << "State: " << network->connection_state();
888 } else {
889 NET_LOG(ERROR) << "Default network in unexpected state: "
890 << GetLogName(network)
891 << "State: " << network->connection_state();
877 default_network_path_.clear(); 892 default_network_path_.clear();
878 SortNetworkList(); 893 SortNetworkList();
879 NotifyDefaultNetworkChanged(nullptr); 894 NotifyDefaultNetworkChanged(nullptr);
880 } 895 }
881 } 896 }
882 NET_LOG_EVENT("NOTIFY:" + event + ": " + network->connection_state(), 897 std::string desc = "NetworkConnectionStateChanged";
883 GetLogName(network)); 898 if (notify_default)
899 desc = "Default" + desc;
900 NET_LOG(EVENT) << "NOTIFY: " << desc << ": " << GetLogName(network) << ": "
901 << network->connection_state();
884 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, 902 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
885 NetworkConnectionStateChanged(network)); 903 NetworkConnectionStateChanged(network));
886 if (network->path() == default_network_path_) 904 if (notify_default)
887 NotifyDefaultNetworkChanged(network); 905 NotifyDefaultNetworkChanged(network);
888 } 906 }
889 907
890 void NetworkStateHandler::NotifyDefaultNetworkChanged( 908 void NetworkStateHandler::NotifyDefaultNetworkChanged(
891 const NetworkState* default_network) { 909 const NetworkState* default_network) {
892 SCOPED_NET_LOG_IF_SLOW(); 910 SCOPED_NET_LOG_IF_SLOW();
893 NET_LOG_EVENT("NOTIFY:DefaultNetworkChanged", GetLogName(default_network)); 911 NET_LOG_EVENT("NOTIFY:DefaultNetworkChanged", GetLogName(default_network));
894 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, 912 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_,
895 DefaultNetworkChanged(default_network)); 913 DefaultNetworkChanged(default_network));
896 } 914 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 if (type.MatchesType(shill::kTypeBluetooth)) 974 if (type.MatchesType(shill::kTypeBluetooth))
957 technologies.push_back(new std::string(shill::kTypeBluetooth)); 975 technologies.push_back(new std::string(shill::kTypeBluetooth));
958 if (type.MatchesType(shill::kTypeVPN)) 976 if (type.MatchesType(shill::kTypeVPN))
959 technologies.push_back(new std::string(shill::kTypeVPN)); 977 technologies.push_back(new std::string(shill::kTypeVPN));
960 978
961 CHECK_GT(technologies.size(), 0ul); 979 CHECK_GT(technologies.size(), 0ul);
962 return technologies.Pass(); 980 return technologies.Pass();
963 } 981 }
964 982
965 } // namespace chromeos 983 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | chromeos/network/network_state_handler_unittest.cc » ('j') | chromeos/network/network_state_handler_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698