Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(452)

Side by Side Diff: net/reporting/reporting_delivery_agent.cc

Issue 2751103002: Reporting: Wrap existing classes in context. (Closed)
Patch Set: Move before BrowsingDataRemover, GarbageCollector, and Serializer CLs. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/reporting/reporting_delivery_agent.h" 5 #include "net/reporting/reporting_delivery_agent.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 43
44 std::string reports_json = ""; 44 std::string reports_json = "";
45 bool json_written = base::JSONWriter::Write(reports_value, &reports_json); 45 bool json_written = base::JSONWriter::Write(reports_value, &reports_json);
46 DCHECK(json_written); 46 DCHECK(json_written);
47 47
48 return reports_json; 48 return reports_json;
49 } 49 }
50 50
51 } // namespace 51 } // namespace
52 52
53 ReportingDeliveryAgent::ReportingDeliveryAgent( 53 ReportingDeliveryAgent::ReportingDeliveryAgent(ReportingContext* context)
54 base::TickClock* clock, 54 : context_(context), weak_factory_(this) {}
55 ReportingCache* cache,
56 ReportingUploader* uploader,
57 const BackoffEntry::Policy* endpoint_backoff_policy)
58 : clock_(clock),
59 cache_(cache),
60 uploader_(uploader),
61 endpoint_manager_(clock, cache, endpoint_backoff_policy),
62 weak_factory_(this) {}
63 ReportingDeliveryAgent::~ReportingDeliveryAgent() {} 55 ReportingDeliveryAgent::~ReportingDeliveryAgent() {}
64 56
65 class ReportingDeliveryAgent::Delivery { 57 class ReportingDeliveryAgent::Delivery {
66 public: 58 public:
67 Delivery(const GURL& endpoint, 59 Delivery(const GURL& endpoint,
68 const std::vector<const ReportingReport*>& reports) 60 const std::vector<const ReportingReport*>& reports)
69 : endpoint(endpoint), reports(reports) {} 61 : endpoint(endpoint), reports(reports) {}
70 62
71 ~Delivery() {} 63 ~Delivery() {}
72 64
73 const GURL endpoint; 65 const GURL endpoint;
74 const std::vector<const ReportingReport*> reports; 66 const std::vector<const ReportingReport*> reports;
75 }; 67 };
76 68
77 void ReportingDeliveryAgent::SendReports() { 69 void ReportingDeliveryAgent::SendReports() {
78 std::vector<const ReportingReport*> reports; 70 std::vector<const ReportingReport*> reports;
79 cache_->GetReports(&reports); 71 cache()->GetReports(&reports);
80 72
81 // Sort reports into (origin, group) buckets. 73 // Sort reports into (origin, group) buckets.
82 std::map<OriginGroup, std::vector<const ReportingReport*>> 74 std::map<OriginGroup, std::vector<const ReportingReport*>>
83 origin_group_reports; 75 origin_group_reports;
84 for (const ReportingReport* report : reports) { 76 for (const ReportingReport* report : reports) {
85 OriginGroup origin_group(url::Origin(report->url), report->group); 77 OriginGroup origin_group(url::Origin(report->url), report->group);
86 origin_group_reports[origin_group].push_back(report); 78 origin_group_reports[origin_group].push_back(report);
87 } 79 }
88 80
89 // Find endpoint for each (origin, group) bucket and sort reports into 81 // Find endpoint for each (origin, group) bucket and sort reports into
90 // endpoint buckets. Don't allow concurrent deliveries to the same (origin, 82 // endpoint buckets. Don't allow concurrent deliveries to the same (origin,
91 // group) bucket. 83 // group) bucket.
92 std::map<GURL, std::vector<const ReportingReport*>> endpoint_reports; 84 std::map<GURL, std::vector<const ReportingReport*>> endpoint_reports;
93 for (auto& it : origin_group_reports) { 85 for (auto& it : origin_group_reports) {
94 const OriginGroup& origin_group = it.first; 86 const OriginGroup& origin_group = it.first;
95 87
96 if (base::ContainsKey(pending_origin_groups_, origin_group)) 88 if (base::ContainsKey(pending_origin_groups_, origin_group))
97 continue; 89 continue;
98 90
99 GURL endpoint_url; 91 GURL endpoint_url;
100 if (!endpoint_manager_.FindEndpointForOriginAndGroup( 92 if (!endpoint_manager()->FindEndpointForOriginAndGroup(
101 origin_group.first, origin_group.second, &endpoint_url)) { 93 origin_group.first, origin_group.second, &endpoint_url)) {
102 continue; 94 continue;
103 } 95 }
104 96
105 endpoint_reports[endpoint_url].insert(endpoint_reports[endpoint_url].end(), 97 endpoint_reports[endpoint_url].insert(endpoint_reports[endpoint_url].end(),
106 it.second.begin(), it.second.end()); 98 it.second.begin(), it.second.end());
107 pending_origin_groups_.insert(origin_group); 99 pending_origin_groups_.insert(origin_group);
108 } 100 }
109 101
110 // Start a delivery to each endpoint. 102 // Start a delivery to each endpoint.
111 for (auto& it : endpoint_reports) { 103 for (auto& it : endpoint_reports) {
112 const GURL& endpoint = it.first; 104 const GURL& endpoint = it.first;
113 const std::vector<const ReportingReport*>& reports = it.second; 105 const std::vector<const ReportingReport*>& reports = it.second;
114 106
115 endpoint_manager_.SetEndpointPending(endpoint); 107 endpoint_manager()->SetEndpointPending(endpoint);
116 cache_->SetReportsPending(reports); 108 cache()->SetReportsPending(reports);
117 109
118 uploader_->StartUpload( 110 uploader()->StartUpload(
119 endpoint, SerializeReports(reports, clock_->NowTicks()), 111 endpoint, SerializeReports(reports, tick_clock()->NowTicks()),
120 base::Bind(&ReportingDeliveryAgent::OnUploadComplete, 112 base::Bind(&ReportingDeliveryAgent::OnUploadComplete,
121 weak_factory_.GetWeakPtr(), 113 weak_factory_.GetWeakPtr(),
122 base::MakeUnique<Delivery>(endpoint, reports))); 114 base::MakeUnique<Delivery>(endpoint, reports)));
123 } 115 }
124 } 116 }
125 117
126 void ReportingDeliveryAgent::OnUploadComplete( 118 void ReportingDeliveryAgent::OnUploadComplete(
127 const std::unique_ptr<Delivery>& delivery, 119 const std::unique_ptr<Delivery>& delivery,
128 ReportingUploader::Outcome outcome) { 120 ReportingUploader::Outcome outcome) {
129 if (outcome == ReportingUploader::Outcome::SUCCESS) { 121 if (outcome == ReportingUploader::Outcome::SUCCESS) {
130 cache_->RemoveReports(delivery->reports); 122 cache()->RemoveReports(delivery->reports);
131 endpoint_manager_.InformOfEndpointRequest(delivery->endpoint, true); 123 endpoint_manager()->InformOfEndpointRequest(delivery->endpoint, true);
132 } else { 124 } else {
133 cache_->IncrementReportsAttempts(delivery->reports); 125 cache()->IncrementReportsAttempts(delivery->reports);
134 endpoint_manager_.InformOfEndpointRequest(delivery->endpoint, false); 126 endpoint_manager()->InformOfEndpointRequest(delivery->endpoint, false);
135 } 127 }
136 128
137 if (outcome == ReportingUploader::Outcome::REMOVE_ENDPOINT) 129 if (outcome == ReportingUploader::Outcome::REMOVE_ENDPOINT)
138 cache_->RemoveClientsForEndpoint(delivery->endpoint); 130 cache()->RemoveClientsForEndpoint(delivery->endpoint);
139 131
140 for (const ReportingReport* report : delivery->reports) { 132 for (const ReportingReport* report : delivery->reports) {
141 pending_origin_groups_.erase( 133 pending_origin_groups_.erase(
142 OriginGroup(url::Origin(report->url), report->group)); 134 OriginGroup(url::Origin(report->url), report->group));
143 } 135 }
144 136
145 cache_->ClearReportsPending(delivery->reports); 137 endpoint_manager()->ClearEndpointPending(delivery->endpoint);
146 endpoint_manager_.ClearEndpointPending(delivery->endpoint); 138 cache()->ClearReportsPending(delivery->reports);
147 } 139 }
148 140
149 } // namespace net 141 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698