 Chromium Code Reviews
 Chromium Code Reviews Issue 2945643002:
  [CrOS Tether] Sort Tether network lists.  (Closed)
    
  
    Issue 2945643002:
  [CrOS Tether] Sort Tether network lists.  (Closed) 
  | Index: chromeos/network/network_state_handler.cc | 
| diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc | 
| index e95ba4f933e7f194fb4f7a195450912dac57e161..b23f0354d2ec2acd27513f28f16c24b7c9ed861a 100644 | 
| --- a/chromeos/network/network_state_handler.cc | 
| +++ b/chromeos/network/network_state_handler.cc | 
| @@ -538,6 +538,8 @@ void NetworkStateHandler::AddTetherNetworkState(const std::string& guid, | 
| tether_network_state->set_signal_strength(signal_strength); | 
| tether_network_list_.push_back(std::move(tether_network_state)); | 
| + network_list_sorted_ = false; | 
| + | 
| NotifyNetworkListChanged(); | 
| } | 
| @@ -562,6 +564,7 @@ bool NetworkStateHandler::UpdateTetherNetworkProperties( | 
| tether_network_state->set_carrier(carrier); | 
| tether_network_state->set_battery_percentage(battery_percentage); | 
| tether_network_state->set_signal_strength(signal_strength); | 
| + network_list_sorted_ = false; | 
| 
Ryan Hansberry
2017/06/19 19:17:48
I thought sorting was only determined by most rece
 
Kyle Horimoto
2017/06/20 23:44:54
The algorithm used to sort is an implementation de
 | 
| NotifyNetworkPropertiesUpdated(tether_network_state); | 
| return true; | 
| @@ -581,6 +584,7 @@ bool NetworkStateHandler::SetTetherNetworkHasConnectedToHost( | 
| } | 
| tether_network_state->set_tether_has_connected_to_host(true); | 
| + network_list_sorted_ = false; | 
| NotifyNetworkPropertiesUpdated(tether_network_state); | 
| return true; | 
| @@ -596,6 +600,8 @@ bool NetworkStateHandler::RemoveTetherNetworkState(const std::string& guid) { | 
| wifi_network->set_tether_guid(std::string()); | 
| tether_network_list_.erase(iter); | 
| + network_list_sorted_ = false; | 
| 
Ryan Hansberry
2017/06/19 19:17:49
Is this true? Once an element is removed, I would
 
Kyle Horimoto
2017/06/20 23:44:54
You're right - removed.
 | 
| + | 
| NotifyNetworkListChanged(); | 
| return true; | 
| @@ -634,6 +640,7 @@ bool NetworkStateHandler::DisassociateTetherNetworkStateFromWifiNetwork( | 
| wifi_network_state->set_tether_guid(std::string()); | 
| tether_network_state->set_tether_guid(std::string()); | 
| + network_list_sorted_ = false; | 
| NotifyNetworkPropertiesUpdated(wifi_network_state); | 
| NotifyNetworkPropertiesUpdated(tether_network_state); | 
| @@ -681,6 +688,7 @@ bool NetworkStateHandler::AssociateTetherNetworkStateWithWifiNetwork( | 
| tether_network_state->set_tether_guid(wifi_network_guid); | 
| wifi_network_state->set_tether_guid(tether_network_guid); | 
| + network_list_sorted_ = false; | 
| NotifyNetworkPropertiesUpdated(wifi_network_state); | 
| NotifyNetworkPropertiesUpdated(tether_network_state); | 
| @@ -739,8 +747,9 @@ void NetworkStateHandler::SetTetherNetworkStateConnectionState( | 
| std::string prev_connection_state = tether_network_state->connection_state(); | 
| tether_network_state->set_connection_state(connection_state); | 
| - DCHECK(!tether_network_state->is_captive_portal()); | 
| + network_list_sorted_ = false; | 
| 
Ryan Hansberry
2017/06/19 19:17:48
Again, I'm not sure how this relates to how HostSc
 
Kyle Horimoto
2017/06/20 23:44:54
Connecting/connected networks should be prioritize
 | 
| + DCHECK(!tether_network_state->is_captive_portal()); | 
| if (ConnectionStateChanged(tether_network_state, prev_connection_state, | 
| false /* prev_is_captive_portal */)) { | 
| NET_LOG(EVENT) << "Changing connection state for Tether network with GUID " | 
| @@ -752,6 +761,17 @@ void NetworkStateHandler::SetTetherNetworkStateConnectionState( | 
| } | 
| } | 
| +void NetworkStateHandler::SetTetherNetworkListSorter( | 
| + const TetherNetworkListSorter* tether_network_list_sorter) { | 
| + if (tether_technology_state_ != TECHNOLOGY_ENABLED) { | 
| + NET_LOG(ERROR) << "SetTetherNetworkListSorter() called when Tether " | 
| + << "networks are not enabled."; | 
| + return; | 
| + } | 
| + | 
| + tether_network_list_sorter_ = tether_network_list_sorter; | 
| +} | 
| + | 
| void NetworkStateHandler::EnsureTetherDeviceState() { | 
| bool should_be_present = | 
| tether_technology_state_ != TechnologyState::TECHNOLOGY_UNAVAILABLE; | 
| @@ -1207,8 +1227,10 @@ void NetworkStateHandler::ManagedStateListChanged( | 
| } | 
| } | 
| -// TODO(khorimoto): Add sorting for the Tether network list as well. | 
| void NetworkStateHandler::SortNetworkList() { | 
| + if (tether_network_list_sorter_) | 
| 
Ryan Hansberry
2017/06/19 19:17:49
Check if network_list_sorted_ is false?
 
Kyle Horimoto
2017/06/20 23:44:54
That's already done before SortNetworkList() is ca
 | 
| + tether_network_list_sorter_->SortTetherNetworkList(&tether_network_list_); | 
| 
Ryan Hansberry
2017/06/19 19:17:49
set network_list_sorted_ = true
 
Kyle Horimoto
2017/06/20 23:44:54
That's already done at the end of this function.
 | 
| + | 
| // Note: usually active networks will precede inactive networks, however | 
| // this may briefly be untrue during state transitions (e.g. a network may | 
| // transition to idle before the list is updated). |