blob: 6a166d9c982bce2244268b0462f7a9f77f1eac64 [file] [log] [blame]
// Copyright 2021 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/reporting/metrics/fake_reporting_settings.h"
#include "base/containers/contains.h"
#include "base/run_loop.h"
#include "base/threading/sequenced_task_runner_handle.h"
namespace reporting {
namespace test {
FakeReportingSettings::FakeReportingSettings() = default;
FakeReportingSettings::~FakeReportingSettings() = default;
base::CallbackListSubscription FakeReportingSettings::AddSettingsObserver(
const std::string& path,
base::RepeatingClosure callback) {
if (!base::Contains(settings_callbacks_map_, path)) {
settings_callbacks_map_[path] =
std::make_unique<base::RepeatingClosureList>();
}
return settings_callbacks_map_.at(path)->Add(std::move(callback));
}
bool FakeReportingSettings::PrepareTrustedValues(base::OnceClosure callback) {
if (!is_trusted_) {
trusted_callbacks_.push(std::move(callback));
}
return is_trusted_;
}
bool FakeReportingSettings::GetBoolean(const std::string& path,
bool* out_value) const {
if (!base::Contains(bool_map_, path)) {
return false;
}
*out_value = bool_map_.at(path);
return true;
}
bool FakeReportingSettings::GetInteger(const std::string& path,
int* out_value) const {
if (!base::Contains(int_map_, path)) {
return false;
}
*out_value = int_map_.at(path);
return true;
}
void FakeReportingSettings::SetBoolean(const std::string& path,
bool bool_value) {
bool_map_[path] = bool_value;
if (base::Contains(settings_callbacks_map_, path)) {
settings_callbacks_map_.at(path)->Notify();
}
}
void FakeReportingSettings::SetInteger(const std::string& path, int int_value) {
int_map_[path] = int_value;
if (base::Contains(settings_callbacks_map_, path)) {
settings_callbacks_map_.at(path)->Notify();
}
}
void FakeReportingSettings::SetIsTrusted(bool is_trusted) {
base::RunLoop run_loop;
is_trusted_ = is_trusted;
while (!trusted_callbacks_.empty()) {
std::move(trusted_callbacks_.front()).Run();
trusted_callbacks_.pop();
}
base::SequencedTaskRunnerHandle::Get()->PostTask(FROM_HERE,
run_loop.QuitClosure());
run_loop.Run();
}
} // namespace test
} // namespace reporting