| Index: chromeos/components/tether/keep_alive_operation.cc
 | 
| diff --git a/chromeos/components/tether/keep_alive_operation.cc b/chromeos/components/tether/keep_alive_operation.cc
 | 
| index dc9d54acbab17bcddeb39cb8650590ecfab240c6..15816e0bba454b78ec8cd9ab90f178a05d622c5a 100644
 | 
| --- a/chromeos/components/tether/keep_alive_operation.cc
 | 
| +++ b/chromeos/components/tether/keep_alive_operation.cc
 | 
| @@ -44,7 +44,8 @@ KeepAliveOperation::KeepAliveOperation(
 | 
|      BleConnectionManager* connection_manager)
 | 
|      : MessageTransferOperation(
 | 
|            std::vector<cryptauth::RemoteDevice>{device_to_connect},
 | 
| -          connection_manager) {}
 | 
| +          connection_manager),
 | 
| +      remote_device_(device_to_connect) {}
 | 
|  
 | 
|  KeepAliveOperation::~KeepAliveOperation() {}
 | 
|  
 | 
| @@ -62,12 +63,38 @@ void KeepAliveOperation::OnDeviceAuthenticated(
 | 
|  
 | 
|    SendMessageToDevice(remote_device,
 | 
|                        base::MakeUnique<MessageWrapper>(KeepAliveTickle()));
 | 
| +}
 | 
| +
 | 
| +void KeepAliveOperation::OnMessageReceived(
 | 
| +    std::unique_ptr<MessageWrapper> message_wrapper,
 | 
| +    const cryptauth::RemoteDevice& remote_device) {
 | 
| +  if (message_wrapper->GetMessageType() !=
 | 
| +      MessageType::KEEP_ALIVE_TICKLE_RESPONSE) {
 | 
| +    // If another type of message has been received, ignore it.
 | 
| +    return;
 | 
| +  }
 | 
| +
 | 
| +  if (!(remote_device == remote_device_)) {
 | 
| +    // If the message came from another device, ignore it.
 | 
| +    return;
 | 
| +  }
 | 
| +
 | 
| +  KeepAliveTickleResponse* response =
 | 
| +      static_cast<KeepAliveTickleResponse*>(message_wrapper->GetProto().get());
 | 
| +  device_status_ = base::MakeUnique<DeviceStatus>(response->device_status());
 | 
| +
 | 
| +  // Now that a response has been received, the device can be unregistered.
 | 
|    UnregisterDevice(remote_device);
 | 
|  }
 | 
|  
 | 
|  void KeepAliveOperation::OnOperationFinished() {
 | 
|    for (auto& observer : observer_list_) {
 | 
| -    observer.OnOperationFinished();
 | 
| +    // Note: If the operation did not complete successfully, |device_status_|
 | 
| +    // will still be null.
 | 
| +    observer.OnOperationFinished(
 | 
| +        remote_device_, device_status_
 | 
| +                            ? base::MakeUnique<DeviceStatus>(*device_status_)
 | 
| +                            : nullptr);
 | 
|    }
 | 
|  }
 | 
|  
 | 
| 
 |