| Index: chromeos/components/tether/host_scan_cache.cc
|
| diff --git a/chromeos/components/tether/host_scan_cache.cc b/chromeos/components/tether/host_scan_cache.cc
|
| deleted file mode 100644
|
| index 38a7aae5762c510ba49718b05ff7d64d724f403c..0000000000000000000000000000000000000000
|
| --- a/chromeos/components/tether/host_scan_cache.cc
|
| +++ /dev/null
|
| @@ -1,227 +0,0 @@
|
| -// Copyright 2017 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chromeos/components/tether/host_scan_cache.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "chromeos/components/tether/active_host.h"
|
| -#include "chromeos/components/tether/device_id_tether_network_guid_map.h"
|
| -#include "chromeos/components/tether/tether_host_response_recorder.h"
|
| -#include "chromeos/network/network_state_handler.h"
|
| -#include "components/proximity_auth/logging/logging.h"
|
| -
|
| -namespace chromeos {
|
| -
|
| -namespace tether {
|
| -
|
| -namespace {
|
| -
|
| -class TimerFactoryImpl : public HostScanCache::TimerFactory {
|
| - public:
|
| - TimerFactoryImpl() {}
|
| - ~TimerFactoryImpl() {}
|
| -
|
| - // HostScanCache::TimerFactory:
|
| - std::unique_ptr<base::Timer> CreateOneShotTimer() override {
|
| - return base::MakeUnique<base::OneShotTimer>();
|
| - }
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -HostScanCache::HostScanCache(
|
| - NetworkStateHandler* network_state_handler,
|
| - ActiveHost* active_host,
|
| - TetherHostResponseRecorder* tether_host_response_recorder,
|
| - DeviceIdTetherNetworkGuidMap* device_id_tether_network_guid_map)
|
| - : timer_factory_(base::MakeUnique<TimerFactoryImpl>()),
|
| - network_state_handler_(network_state_handler),
|
| - active_host_(active_host),
|
| - tether_host_response_recorder_(tether_host_response_recorder),
|
| - device_id_tether_network_guid_map_(device_id_tether_network_guid_map),
|
| - weak_ptr_factory_(this) {
|
| - tether_host_response_recorder_->AddObserver(this);
|
| -}
|
| -
|
| -HostScanCache::~HostScanCache() {
|
| - tether_host_response_recorder_->RemoveObserver(this);
|
| -}
|
| -
|
| -void HostScanCache::SetHostScanResult(const std::string& tether_network_guid,
|
| - const std::string& device_name,
|
| - const std::string& carrier,
|
| - int battery_percentage,
|
| - int signal_strength) {
|
| - DCHECK(!tether_network_guid.empty());
|
| -
|
| - auto found_iter = tether_guid_to_timer_map_.find(tether_network_guid);
|
| -
|
| - if (found_iter == tether_guid_to_timer_map_.end()) {
|
| - // Add the Tether network to NetworkStateHandler and create an associated
|
| - // Timer.
|
| - network_state_handler_->AddTetherNetworkState(
|
| - tether_network_guid, device_name, carrier, battery_percentage,
|
| - signal_strength, HasConnectedToHost(tether_network_guid));
|
| - tether_guid_to_timer_map_.emplace(tether_network_guid,
|
| - timer_factory_->CreateOneShotTimer());
|
| -
|
| - PA_LOG(INFO) << "Added scan result for Tether network with GUID "
|
| - << tether_network_guid << ". Device name: " << device_name
|
| - << ", carrier: " << carrier
|
| - << ", battery percentage: " << battery_percentage
|
| - << ", signal strength: " << signal_strength;
|
| - } else {
|
| - // Update the existing network and stop the associated Timer.
|
| - network_state_handler_->UpdateTetherNetworkProperties(
|
| - tether_network_guid, carrier, battery_percentage, signal_strength);
|
| - found_iter->second->Stop();
|
| -
|
| - PA_LOG(INFO) << "Updated scan result for Tether network with GUID "
|
| - << tether_network_guid << ". New carrier: " << carrier << ", "
|
| - << "new battery percentage: " << battery_percentage << ", "
|
| - << "new signal strength: " << signal_strength;
|
| - }
|
| -
|
| - StartTimer(tether_network_guid);
|
| -}
|
| -
|
| -bool HostScanCache::RemoveHostScanResult(
|
| - const std::string& tether_network_guid) {
|
| - DCHECK(!tether_network_guid.empty());
|
| -
|
| - auto it = tether_guid_to_timer_map_.find(tether_network_guid);
|
| - if (it == tether_guid_to_timer_map_.end()) {
|
| - PA_LOG(ERROR) << "Attempted to remove a host scan result which does not "
|
| - << "exist in the cache. GUID: " << tether_network_guid;
|
| - return false;
|
| - }
|
| -
|
| - if (active_host_->GetTetherNetworkGuid() == tether_network_guid) {
|
| - PA_LOG(ERROR) << "RemoveHostScanResult() called for Tether network with "
|
| - << "GUID " << tether_network_guid << ", but the "
|
| - << "corresponding device is the active host. Not removing "
|
| - << "this scan result from the cache.";
|
| - return false;
|
| - }
|
| -
|
| - tether_guid_to_timer_map_.erase(it);
|
| - return network_state_handler_->RemoveTetherNetworkState(tether_network_guid);
|
| -}
|
| -
|
| -void HostScanCache::ClearCacheExceptForActiveHost() {
|
| - // Create a list of all Tether network GUIDs serving as keys to
|
| - // |tether_guid_to_timer_map_|.
|
| - std::vector<std::string> tether_network_guids;
|
| - tether_network_guids.reserve(tether_guid_to_timer_map_.size());
|
| - for (auto& it : tether_guid_to_timer_map_)
|
| - tether_network_guids.push_back(it.first);
|
| -
|
| - std::string active_host_tether_guid = active_host_->GetTetherNetworkGuid();
|
| - if (active_host_tether_guid.empty()) {
|
| - PA_LOG(INFO) << "Clearing all " << tether_guid_to_timer_map_.size() << " "
|
| - << "entries from the cache.";
|
| - } else {
|
| - PA_LOG(INFO) << "Clearing " << (tether_guid_to_timer_map_.size() - 1) << " "
|
| - << "of the " << tether_guid_to_timer_map_.size() << " "
|
| - << "entries from the cache. Not removing the entry "
|
| - << "corresponding to the Tether network with GUID "
|
| - << active_host_tether_guid << " because it represents the "
|
| - << "active host.";
|
| - }
|
| -
|
| - // Iterate through the keys, removing all scan results not corresponding to
|
| - // the active host. Iteration is done via a list of pre-computed keys instead
|
| - // if iterating through the map because RemoteHostScanResult() will remove
|
| - // key/value pairs from the map, which would invalidate the map iterator.
|
| - for (auto& tether_network_guid : tether_network_guids) {
|
| - if (active_host_->GetTetherNetworkGuid() == tether_network_guid) {
|
| - // Do not remove the active host from the cache.
|
| - continue;
|
| - }
|
| -
|
| - RemoveHostScanResult(tether_network_guid);
|
| - }
|
| -}
|
| -
|
| -void HostScanCache::OnPreviouslyConnectedHostIdsChanged() {
|
| - for (auto& map_entry : tether_guid_to_timer_map_) {
|
| - const std::string& tether_network_guid = map_entry.first;
|
| - if (!HasConnectedToHost(tether_network_guid))
|
| - continue;
|
| -
|
| - // If a the current device has connected to the Tether network with GUID
|
| - // |tether_network_guid|, alert |network_state_handler_|. Note that this
|
| - // function is a no-op if it is called on a network which already has its
|
| - // HasConnectedToHost property set to true.
|
| - bool update_successful =
|
| - network_state_handler_->SetTetherNetworkHasConnectedToHost(
|
| - tether_network_guid);
|
| -
|
| - if (update_successful) {
|
| - PA_LOG(INFO) << "Successfully set the HasConnectedToHost property of "
|
| - << "the Tether network with GUID " << tether_network_guid
|
| - << " to true.";
|
| - }
|
| - }
|
| -}
|
| -
|
| -void HostScanCache::SetTimerFactoryForTest(
|
| - std::unique_ptr<TimerFactory> timer_factory_for_test) {
|
| - timer_factory_ = std::move(timer_factory_for_test);
|
| -}
|
| -
|
| -bool HostScanCache::HasConnectedToHost(const std::string& tether_network_guid) {
|
| - std::string device_id =
|
| - device_id_tether_network_guid_map_->GetDeviceIdForTetherNetworkGuid(
|
| - tether_network_guid);
|
| - std::vector<std::string> connected_device_ids =
|
| - tether_host_response_recorder_->GetPreviouslyConnectedHostIds();
|
| - return std::find(connected_device_ids.begin(), connected_device_ids.end(),
|
| - device_id) != connected_device_ids.end();
|
| -}
|
| -
|
| -void HostScanCache::StartTimer(const std::string& tether_network_guid) {
|
| - auto found_iter = tether_guid_to_timer_map_.find(tether_network_guid);
|
| - DCHECK(found_iter != tether_guid_to_timer_map_.end());
|
| - DCHECK(!found_iter->second->IsRunning());
|
| -
|
| - PA_LOG(INFO) << "Starting host scan cache timer for Tether network with GUID "
|
| - << tether_network_guid << ". Will fire in "
|
| - << kNumMinutesBeforeCacheEntryExpires << " minutes.";
|
| -
|
| - found_iter->second->Start(
|
| - FROM_HERE,
|
| - base::TimeDelta::FromMinutes(kNumMinutesBeforeCacheEntryExpires),
|
| - base::Bind(&HostScanCache::OnTimerFired, weak_ptr_factory_.GetWeakPtr(),
|
| - tether_network_guid));
|
| -}
|
| -
|
| -void HostScanCache::OnTimerFired(const std::string& tether_network_guid) {
|
| - if (active_host_->GetTetherNetworkGuid() == tether_network_guid) {
|
| - // Log as a warning. This situation should be uncommon in practice since
|
| - // KeepAliveScheduler should schedule a new keep-alive status update every
|
| - // 4 minutes.
|
| - PA_LOG(WARNING) << "Timer fired for Tether network GUID "
|
| - << tether_network_guid << ", but the corresponding device "
|
| - << "is the active host. Restarting timer.";
|
| -
|
| - // If the Timer which fired corresponds to the active host, do not remove
|
| - // the cache entry. The active host must always remain in the cache so that
|
| - // the UI can reflect that it is the connecting/connected network. In this
|
| - // case, just restart the timer.
|
| - StartTimer(tether_network_guid);
|
| - return;
|
| - }
|
| -
|
| - PA_LOG(INFO) << "Timer fired for Tether network GUID " << tether_network_guid
|
| - << ". Removing stale scan result.";
|
| - RemoveHostScanResult(tether_network_guid);
|
| -}
|
| -
|
| -} // namespace tether
|
| -
|
| -} // namespace chromeos
|
|
|