Index: chromeos/components/tether/host_scan_device_prioritizer.cc |
diff --git a/chromeos/components/tether/host_scan_device_prioritizer.cc b/chromeos/components/tether/host_scan_device_prioritizer.cc |
index e2bfb9ac421140fd86410557de6676b5d08e355f..7f30f8d6de8f10a19e9daa1bc9e8596c9025036b 100644 |
--- a/chromeos/components/tether/host_scan_device_prioritizer.cc |
+++ b/chromeos/components/tether/host_scan_device_prioritizer.cc |
@@ -6,8 +6,11 @@ |
#include "base/memory/ptr_util.h" |
#include "base/values.h" |
+#include "chromeos/components/tether/device_id_tether_network_guid_map.h" |
#include "chromeos/components/tether/pref_names.h" |
#include "chromeos/components/tether/tether_host_response_recorder.h" |
+#include "chromeos/network/network_state.h" |
+#include "chromeos/network/network_state_handler.h" |
#include "components/prefs/pref_registry_simple.h" |
#include "components/prefs/pref_service.h" |
@@ -16,13 +19,32 @@ namespace chromeos { |
namespace tether { |
HostScanDevicePrioritizer::HostScanDevicePrioritizer( |
- TetherHostResponseRecorder* tether_host_response_recorder) |
- : tether_host_response_recorder_(tether_host_response_recorder) {} |
+ NetworkStateHandler* network_state_handler, |
+ TetherHostResponseRecorder* tether_host_response_recorder, |
+ DeviceIdTetherNetworkGuidMap* device_id_tether_network_guid_map) |
+ : network_state_handler_(network_state_handler), |
+ tether_host_response_recorder_(tether_host_response_recorder), |
+ device_id_tether_network_guid_map_(device_id_tether_network_guid_map) { |
+ network_state_handler_->SetTetherNetworkListSorter(this); |
+} |
-HostScanDevicePrioritizer::~HostScanDevicePrioritizer() {} |
+HostScanDevicePrioritizer::~HostScanDevicePrioritizer() { |
+ network_state_handler_->SetTetherNetworkListSorter(nullptr); |
+} |
void HostScanDevicePrioritizer::SortByHostScanOrder( |
std::vector<cryptauth::RemoteDevice>* remote_devices) const { |
+ SortNetworks(remote_devices); |
+} |
+ |
+void HostScanDevicePrioritizer::SortTetherNetworkList( |
+ NetworkStateHandler::ManagedStateList* tether_networks) const { |
+ SortNetworks(tether_networks); |
+} |
+ |
+template <typename T> |
+void HostScanDevicePrioritizer::SortNetworks( |
+ std::vector<T>* list_to_sort) const { |
// First, fetch the hosts which have previously responded. |
std::vector<std::string> prioritized_ids = |
tether_host_response_recorder_->GetPreviouslyAvailableHostIds(); |
@@ -38,26 +60,49 @@ void HostScanDevicePrioritizer::SortByHostScanOrder( |
// Iterate from the last stored ID to the first stored ID. This ensures that |
// the items at the front of the list end up in the front of the prioritized |
- // |remote_devices| vector. |
+ // |list_to_sort| vector. |
for (auto prioritized_it = prioritized_ids.rbegin(); |
prioritized_it != prioritized_ids.rend(); ++prioritized_it) { |
- // Iterate through |remote_devices| to see if a device exists with a |
- // device ID of |stored_id|. If one exists, remove it from its previous |
+ // Iterate through |list_to_sort| to see if a device ID exists which is |
+ // equal to |stored_id|. If one exists, remove it from its previous |
// position in the list and add it at the front instead. |
- for (auto remote_devices_it = remote_devices->begin(); |
- remote_devices_it != remote_devices->end(); ++remote_devices_it) { |
- if (remote_devices_it->GetDeviceId() != *prioritized_it) { |
+ for (auto list_to_sort_it = list_to_sort->begin(); |
+ list_to_sort_it != list_to_sort->end(); ++list_to_sort_it) { |
+ if (GetDeviceId(*list_to_sort_it) != *prioritized_it) { |
continue; |
} |
- cryptauth::RemoteDevice device_to_move = *remote_devices_it; |
- remote_devices->erase(remote_devices_it); |
- remote_devices->insert(remote_devices->begin(), device_to_move); |
+ T entry_to_move = Move(*list_to_sort_it); |
+ list_to_sort->erase(list_to_sort_it); |
+ list_to_sort->emplace(list_to_sort->begin(), Move(entry_to_move)); |
break; |
} |
} |
} |
+std::string HostScanDevicePrioritizer::GetDeviceId( |
+ const cryptauth::RemoteDevice& remote_device) const { |
+ return remote_device.GetDeviceId(); |
+} |
+ |
+std::string HostScanDevicePrioritizer::GetDeviceId( |
+ const std::unique_ptr<ManagedState>& tether_network_state) const { |
+ NetworkState* network_state = |
+ static_cast<NetworkState*>(tether_network_state.get()); |
+ return device_id_tether_network_guid_map_->GetDeviceIdForTetherNetworkGuid( |
+ network_state->guid()); |
+} |
+ |
+cryptauth::RemoteDevice HostScanDevicePrioritizer::Move( |
+ const cryptauth::RemoteDevice& remote_device) const { |
+ return remote_device; |
+} |
+ |
+std::unique_ptr<ManagedState> HostScanDevicePrioritizer::Move( |
+ std::unique_ptr<ManagedState>& tether_network_state) const { |
+ return std::move(tether_network_state); |
+} |
+ |
} // namespace tether |
} // namespace chromeos |