metric_reporting_controller.cc 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/reporting/metrics/metric_reporting_controller.h"
  5. #include "base/bind.h"
  6. #include "base/task/bind_post_task.h"
  7. #include "base/threading/sequenced_task_runner_handle.h"
  8. #include "components/reporting/metrics/reporting_settings.h"
  9. namespace reporting {
  10. MetricReportingController::MetricReportingController(
  11. ReportingSettings* reporting_settings,
  12. const std::string& setting_path,
  13. bool setting_enabled_default_value,
  14. base::RepeatingClosure on_setting_enabled,
  15. base::RepeatingClosure on_setting_disabled)
  16. : reporting_settings_(reporting_settings),
  17. setting_path_(setting_path),
  18. setting_enabled_default_value_(setting_enabled_default_value),
  19. on_setting_enabled_(std::move(on_setting_enabled)),
  20. on_setting_disabled_(std::move(on_setting_disabled)) {
  21. UpdateSetting();
  22. subscription_ = reporting_settings_->AddSettingsObserver(
  23. setting_path_,
  24. base::BindRepeating(&MetricReportingController::UpdateSetting,
  25. base::Unretained(this)));
  26. }
  27. MetricReportingController::~MetricReportingController() {
  28. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  29. }
  30. void MetricReportingController::UpdateSetting() {
  31. CHECK(base::SequencedTaskRunnerHandle::IsSet());
  32. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  33. base::OnceClosure update_setting_cb = base::BindOnce(
  34. &MetricReportingController::UpdateSetting, weak_factory_.GetWeakPtr());
  35. bool trusted = reporting_settings_->PrepareTrustedValues(base::BindPostTask(
  36. base::SequencedTaskRunnerHandle::Get(), std::move(update_setting_cb)));
  37. if (!trusted) {
  38. return;
  39. }
  40. bool new_setting_enabled = setting_enabled_default_value_;
  41. reporting_settings_->GetBoolean(setting_path_, &new_setting_enabled);
  42. if (setting_enabled_ != new_setting_enabled) {
  43. setting_enabled_ = new_setting_enabled;
  44. if (setting_enabled_) {
  45. on_setting_enabled_.Run();
  46. } else {
  47. on_setting_disabled_.Run();
  48. }
  49. }
  50. }
  51. } // namespace reporting