| Index: chromeos/components/tether/keep_alive_scheduler.cc
 | 
| diff --git a/chromeos/components/tether/keep_alive_scheduler.cc b/chromeos/components/tether/keep_alive_scheduler.cc
 | 
| index 4b90fa01b33eeb6a8073ca137608bce48b7dad33..02a47e4b97f2cd3ba0de6689c44ba6360c7e527d 100644
 | 
| --- a/chromeos/components/tether/keep_alive_scheduler.cc
 | 
| +++ b/chromeos/components/tether/keep_alive_scheduler.cc
 | 
| @@ -5,6 +5,8 @@
 | 
|  #include "chromeos/components/tether/keep_alive_scheduler.h"
 | 
|  
 | 
|  #include "base/bind.h"
 | 
| +#include "chromeos/components/tether/device_id_tether_network_guid_map.h"
 | 
| +#include "chromeos/components/tether/host_scan_cache.h"
 | 
|  
 | 
|  namespace chromeos {
 | 
|  
 | 
| @@ -13,17 +15,27 @@ namespace tether {
 | 
|  // static
 | 
|  const uint32_t KeepAliveScheduler::kKeepAliveIntervalMinutes = 4;
 | 
|  
 | 
| -KeepAliveScheduler::KeepAliveScheduler(ActiveHost* active_host,
 | 
| -                                       BleConnectionManager* connection_manager)
 | 
| +KeepAliveScheduler::KeepAliveScheduler(
 | 
| +    ActiveHost* active_host,
 | 
| +    BleConnectionManager* connection_manager,
 | 
| +    HostScanCache* host_scan_cache,
 | 
| +    DeviceIdTetherNetworkGuidMap* device_id_tether_network_guid_map)
 | 
|      : KeepAliveScheduler(active_host,
 | 
|                           connection_manager,
 | 
| +                         host_scan_cache,
 | 
| +                         device_id_tether_network_guid_map,
 | 
|                           base::MakeUnique<base::RepeatingTimer>()) {}
 | 
|  
 | 
| -KeepAliveScheduler::KeepAliveScheduler(ActiveHost* active_host,
 | 
| -                                       BleConnectionManager* connection_manager,
 | 
| -                                       std::unique_ptr<base::Timer> timer)
 | 
| +KeepAliveScheduler::KeepAliveScheduler(
 | 
| +    ActiveHost* active_host,
 | 
| +    BleConnectionManager* connection_manager,
 | 
| +    HostScanCache* host_scan_cache,
 | 
| +    DeviceIdTetherNetworkGuidMap* device_id_tether_network_guid_map,
 | 
| +    std::unique_ptr<base::Timer> timer)
 | 
|      : active_host_(active_host),
 | 
|        connection_manager_(connection_manager),
 | 
| +      host_scan_cache_(host_scan_cache),
 | 
| +      device_id_tether_network_guid_map_(device_id_tether_network_guid_map),
 | 
|        timer_(std::move(timer)),
 | 
|        weak_ptr_factory_(this) {
 | 
|    active_host_->AddObserver(this);
 | 
| @@ -56,9 +68,35 @@ void KeepAliveScheduler::OnActiveHostChanged(
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -void KeepAliveScheduler::OnOperationFinished() {
 | 
| +void KeepAliveScheduler::OnOperationFinished(
 | 
| +    const cryptauth::RemoteDevice& remote_device,
 | 
| +    std::unique_ptr<DeviceStatus> device_status) {
 | 
| +  // Make a copy before destroying the operation below.
 | 
| +  const cryptauth::RemoteDevice device_copy = remote_device;
 | 
| +
 | 
|    keep_alive_operation_->RemoveObserver(this);
 | 
|    keep_alive_operation_.reset();
 | 
| +
 | 
| +  if (!device_status) {
 | 
| +    // If the operation did not complete successfully, there is no new
 | 
| +    // information with which to update the cache.
 | 
| +    return;
 | 
| +  }
 | 
| +
 | 
| +  std::string carrier;
 | 
| +  int32_t battery_percentage;
 | 
| +  int32_t signal_strength;
 | 
| +  NormalizeDeviceStatus(*device_status, &carrier, &battery_percentage,
 | 
| +                        &signal_strength);
 | 
| +
 | 
| +  // Update the cache. Note that "false" is passed for the |setup_required|
 | 
| +  // parameter because it is assumed that setup is no longer required for an
 | 
| +  // active connection attempt.
 | 
| +  host_scan_cache_->SetHostScanResult(
 | 
| +      device_id_tether_network_guid_map_->GetTetherNetworkGuidForDeviceId(
 | 
| +          device_copy.GetDeviceId()),
 | 
| +      device_copy.name, carrier, battery_percentage, signal_strength,
 | 
| +      false /* setup_required */);
 | 
|  }
 | 
|  
 | 
|  void KeepAliveScheduler::SendKeepAliveTickle() {
 | 
| 
 |