blob: 8e0337dc8b67817bed587e95800910ad0310a050 [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.
#ifndef CHROMEOS_COMPONENTS_MULTIDEVICE_REMOTE_DEVICE_CACHE_H_
#define CHROMEOS_COMPONENTS_MULTIDEVICE_REMOTE_DEVICE_CACHE_H_
#include <memory>
#include <unordered_map>
#include "base/macros.h"
#include "base/optional.h"
#include "chromeos/components/multidevice/remote_device.h"
#include "chromeos/components/multidevice/remote_device_ref.h"
namespace chromeos {
namespace multidevice {
// A simple cache of RemoteDeviceRefs. Note that if multiple calls to
// SetRemoteDevices() are provided different sets of devices, the set of devices
// returned by GetRemoteDevices() is the union of those different sets (i.e.,
// devices are not deleted from the cache).
class RemoteDeviceCache {
public:
class Factory {
public:
static Factory* Get();
static void SetFactoryForTesting(Factory* test_factory);
virtual ~Factory();
virtual std::unique_ptr<RemoteDeviceCache> BuildInstance();
private:
static Factory* test_factory_;
};
virtual ~RemoteDeviceCache();
void SetRemoteDevices(const RemoteDeviceList& remote_devices);
RemoteDeviceRefList GetRemoteDevices() const;
base::Optional<RemoteDeviceRef> GetRemoteDevice(
const std::string& device_id) const;
private:
RemoteDeviceCache();
std::unordered_map<std::string, std::shared_ptr<RemoteDevice>>
remote_device_map_;
DISALLOW_COPY_AND_ASSIGN(RemoteDeviceCache);
};
} // namespace multidevice
} // namespace chromeos
#endif // CHROMEOS_COMPONENTS_MULTIDEVICE_REMOTE_DEVICE_CACHE_H_