blob: d71612328943faf6ab7f114fd1b742f9aeb3fa42 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/sync_device_info/fake_device_info_tracker.h"
#include <algorithm>
#include <map>
#include "base/check.h"
#include "base/memory/raw_ptr.h"
#include "base/not_fatal_until.h"
#include "base/notreached.h"
#include "components/sync/protocol/sync_enums.pb.h"
#include "components/sync_device_info/device_info.h"
namespace syncer {
FakeDeviceInfoTracker::FakeDeviceInfoTracker() = default;
FakeDeviceInfoTracker::~FakeDeviceInfoTracker() = default;
bool FakeDeviceInfoTracker::IsSyncing() const {
return !devices_.empty();
}
const DeviceInfo* FakeDeviceInfoTracker::GetDeviceInfo(
const std::string& client_id) const {
for (const DeviceInfo* device : devices_) {
if (device->guid() == client_id) {
return device;
}
}
return nullptr;
}
std::vector<const DeviceInfo*> FakeDeviceInfoTracker::GetAllDeviceInfo() const {
std::vector<const DeviceInfo*> devices;
for (const DeviceInfo* device : devices_) {
devices.push_back(device);
}
return devices;
}
std::vector<const DeviceInfo*> FakeDeviceInfoTracker::GetAllChromeDeviceInfo()
const {
return GetAllDeviceInfo();
}
void FakeDeviceInfoTracker::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void FakeDeviceInfoTracker::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
std::map<DeviceInfo::FormFactor, int>
FakeDeviceInfoTracker::CountActiveDevicesByType() const {
if (device_count_per_type_override_) {
return *device_count_per_type_override_;
}
std::map<DeviceInfo::FormFactor, int> count_by_type;
for (const syncer::DeviceInfo* device : devices_) {
count_by_type[device->form_factor()]++;
}
return count_by_type;
}
void FakeDeviceInfoTracker::ForcePulseForTest() {
NOTREACHED();
}
bool FakeDeviceInfoTracker::IsRecentLocalCacheGuid(
const std::string& cache_guid) const {
return local_device_cache_guid_ == cache_guid;
}
void FakeDeviceInfoTracker::Add(const DeviceInfo* device) {
devices_.push_back(device);
for (auto& observer : observers_) {
observer.OnDeviceInfoChange();
}
}
void FakeDeviceInfoTracker::Add(const std::vector<const DeviceInfo*>& devices) {
for (auto* device : devices) {
devices_.push_back(device);
}
for (auto& observer : observers_) {
observer.OnDeviceInfoChange();
}
}
void FakeDeviceInfoTracker::Add(std::unique_ptr<DeviceInfo> device) {
owned_devices_.push_back(std::move(device));
Add(owned_devices_.back().get());
}
void FakeDeviceInfoTracker::Remove(const DeviceInfo* device) {
const auto to_remove = std::ranges::remove(devices_, device);
CHECK(!to_remove.empty());
devices_.erase(to_remove.begin(), to_remove.end());
}
void FakeDeviceInfoTracker::Replace(const DeviceInfo* old_device,
const DeviceInfo* new_device) {
auto it = std::ranges::find(devices_, old_device);
CHECK(devices_.end() != it, base::NotFatalUntil::M130)
<< "Tracker doesn't contain device";
*it = new_device;
for (auto& observer : observers_) {
observer.OnDeviceInfoChange();
}
}
void FakeDeviceInfoTracker::OverrideActiveDeviceCount(
const std::map<DeviceInfo::FormFactor, int>& counts) {
device_count_per_type_override_ = counts;
for (auto& observer : observers_) {
observer.OnDeviceInfoChange();
}
}
void FakeDeviceInfoTracker::SetLocalCacheGuid(const std::string& cache_guid) {
// ensure that this cache guid is present in the tracker.
DCHECK(GetDeviceInfo(cache_guid));
local_device_cache_guid_ = cache_guid;
}
} // namespace syncer