reporting_context.cc 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. // Copyright 2017 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 "net/reporting/reporting_context.h"
  5. #include <utility>
  6. #include "base/bind.h"
  7. #include "base/observer_list.h"
  8. #include "base/rand_util.h"
  9. #include "base/time/clock.h"
  10. #include "base/time/default_clock.h"
  11. #include "base/time/default_tick_clock.h"
  12. #include "base/time/tick_clock.h"
  13. #include "base/time/time.h"
  14. #include "net/base/backoff_entry.h"
  15. #include "net/base/rand_callback.h"
  16. #include "net/reporting/reporting_cache_observer.h"
  17. #include "net/reporting/reporting_delegate.h"
  18. #include "net/reporting/reporting_delivery_agent.h"
  19. #include "net/reporting/reporting_garbage_collector.h"
  20. #include "net/reporting/reporting_network_change_observer.h"
  21. #include "net/reporting/reporting_policy.h"
  22. #include "net/reporting/reporting_uploader.h"
  23. namespace net {
  24. class URLRequestContext;
  25. namespace {
  26. class ReportingContextImpl : public ReportingContext {
  27. public:
  28. ReportingContextImpl(const ReportingPolicy& policy,
  29. URLRequestContext* request_context,
  30. ReportingCache::PersistentReportingStore* store)
  31. : ReportingContext(policy,
  32. base::DefaultClock::GetInstance(),
  33. base::DefaultTickClock::GetInstance(),
  34. base::BindRepeating(&base::RandInt),
  35. ReportingUploader::Create(request_context),
  36. ReportingDelegate::Create(request_context),
  37. store) {}
  38. };
  39. } // namespace
  40. // static
  41. std::unique_ptr<ReportingContext> ReportingContext::Create(
  42. const ReportingPolicy& policy,
  43. URLRequestContext* request_context,
  44. ReportingCache::PersistentReportingStore* store) {
  45. return std::make_unique<ReportingContextImpl>(policy, request_context, store);
  46. }
  47. ReportingContext::~ReportingContext() = default;
  48. void ReportingContext::AddCacheObserver(ReportingCacheObserver* observer) {
  49. DCHECK(!cache_observers_.HasObserver(observer));
  50. cache_observers_.AddObserver(observer);
  51. }
  52. void ReportingContext::RemoveCacheObserver(ReportingCacheObserver* observer) {
  53. DCHECK(cache_observers_.HasObserver(observer));
  54. cache_observers_.RemoveObserver(observer);
  55. }
  56. void ReportingContext::NotifyCachedReportsUpdated() {
  57. for (auto& observer : cache_observers_)
  58. observer.OnReportsUpdated();
  59. }
  60. void ReportingContext::NotifyReportAdded(const ReportingReport* report) {
  61. for (auto& observer : cache_observers_)
  62. observer.OnReportAdded(report);
  63. }
  64. void ReportingContext::NotifyReportUpdated(const ReportingReport* report) {
  65. for (auto& observer : cache_observers_)
  66. observer.OnReportUpdated(report);
  67. }
  68. void ReportingContext::NotifyCachedClientsUpdated() {
  69. for (auto& observer : cache_observers_)
  70. observer.OnClientsUpdated();
  71. }
  72. void ReportingContext::NotifyEndpointsUpdatedForOrigin(
  73. const std::vector<ReportingEndpoint>& endpoints) {
  74. for (auto& observer : cache_observers_)
  75. observer.OnEndpointsUpdatedForOrigin(endpoints);
  76. }
  77. bool ReportingContext::IsReportDataPersisted() const {
  78. return store_ && policy_.persist_reports_across_restarts;
  79. }
  80. bool ReportingContext::IsClientDataPersisted() const {
  81. return store_ && policy_.persist_clients_across_restarts;
  82. }
  83. void ReportingContext::OnShutdown() {
  84. uploader_->OnShutdown();
  85. }
  86. ReportingContext::ReportingContext(
  87. const ReportingPolicy& policy,
  88. base::Clock* clock,
  89. const base::TickClock* tick_clock,
  90. const RandIntCallback& rand_callback,
  91. std::unique_ptr<ReportingUploader> uploader,
  92. std::unique_ptr<ReportingDelegate> delegate,
  93. ReportingCache::PersistentReportingStore* store)
  94. : policy_(policy),
  95. clock_(clock),
  96. tick_clock_(tick_clock),
  97. uploader_(std::move(uploader)),
  98. delegate_(std::move(delegate)),
  99. cache_(ReportingCache::Create(this)),
  100. store_(store),
  101. delivery_agent_(ReportingDeliveryAgent::Create(this, rand_callback)),
  102. garbage_collector_(ReportingGarbageCollector::Create(this)),
  103. network_change_observer_(ReportingNetworkChangeObserver::Create(this)) {}
  104. } // namespace net