1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
// 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/fakes/fake_reporting_settings.h"
#include "base/containers/contains.h"
#include "base/run_loop.h"
#include "base/task/sequenced_task_runner.h"
#include "base/values.h"
namespace reporting::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;
}
bool FakeReportingSettings::GetList(const std::string& path,
const base::Value::List** out_value) const {
if (!base::Contains(list_map_, path)) {
return false;
}
*out_value = &list_map_.at(path);
return true;
}
bool FakeReportingSettings::GetReportingEnabled(const std::string& path,
bool* out_value) const {
if (!base::Contains(reporting_enabled_map_, path)) {
return false;
}
*out_value = reporting_enabled_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::SetList(const std::string& path,
const base::Value::List& list_value) {
list_map_.insert_or_assign(path, list_value.Clone());
if (base::Contains(settings_callbacks_map_, path)) {
settings_callbacks_map_.at(path)->Notify();
}
}
void FakeReportingSettings::SetReportingEnabled(const std::string& path,
bool enabled_value) {
reporting_enabled_map_[path] = enabled_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::SequencedTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, run_loop.QuitClosure());
run_loop.Run();
}
} // namespace reporting::test
|