blob: 0c52415ea3a9324961ca01995664a472fbff6305 [file] [log] [blame]
// Copyright 2018 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/multidevice/expiring_remote_device_cache.h"
#include "base/stl_util.h"
#include "chromeos/components/multidevice/remote_device_cache.h"
namespace chromeos {
namespace multidevice {
ExpiringRemoteDeviceCache::ExpiringRemoteDeviceCache()
: remote_device_cache_(RemoteDeviceCache::Factory::Get()->BuildInstance()) {
}
ExpiringRemoteDeviceCache::~ExpiringRemoteDeviceCache() = default;
void ExpiringRemoteDeviceCache::SetRemoteDevicesAndInvalidateOldEntries(
const RemoteDeviceList& remote_devices) {
remote_device_cache_->SetRemoteDevices(remote_devices);
device_ids_from_last_set_call_.clear();
for (const auto& device : remote_devices)
device_ids_from_last_set_call_.insert(device.GetDeviceId());
}
RemoteDeviceRefList ExpiringRemoteDeviceCache::GetNonExpiredRemoteDevices()
const {
// Only add to the output list if the entry is not stale.
RemoteDeviceRefList remote_devices;
for (auto device : remote_device_cache_->GetRemoteDevices()) {
if (device_ids_from_last_set_call_.count(device.GetDeviceId()) != 0)
remote_devices.push_back(device);
}
return remote_devices;
}
void ExpiringRemoteDeviceCache::UpdateRemoteDevice(
const RemoteDevice& remote_device) {
remote_device_cache_->SetRemoteDevices({remote_device});
device_ids_from_last_set_call_.insert(remote_device.GetDeviceId());
}
base::Optional<RemoteDeviceRef> ExpiringRemoteDeviceCache::GetRemoteDevice(
const std::string& device_id) const {
return remote_device_cache_->GetRemoteDevice(device_id);
}
} // namespace multidevice
} // namespace chromeos