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

Side by Side Diff: components/domain_reliability/uploader.cc

Issue 2336043007: Domain Reliability: Don't crash on shutdown with uploads pending (Closed)
Patch Set: Shutdown uploader in unittest Created 4 years, 2 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/domain_reliability/uploader.h" 5 #include "components/domain_reliability/uploader.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 52
53 class DomainReliabilityUploaderImpl 53 class DomainReliabilityUploaderImpl
54 : public DomainReliabilityUploader, net::URLFetcherDelegate { 54 : public DomainReliabilityUploader, net::URLFetcherDelegate {
55 public: 55 public:
56 DomainReliabilityUploaderImpl( 56 DomainReliabilityUploaderImpl(
57 MockableTime* time, 57 MockableTime* time,
58 const scoped_refptr< 58 const scoped_refptr<
59 net::URLRequestContextGetter>& url_request_context_getter) 59 net::URLRequestContextGetter>& url_request_context_getter)
60 : time_(time), 60 : time_(time),
61 url_request_context_getter_(url_request_context_getter), 61 url_request_context_getter_(url_request_context_getter),
62 discard_uploads_(true) {} 62 discard_uploads_(true),
63 shutdown_(false) {}
63 64
64 ~DomainReliabilityUploaderImpl() override {} 65 ~DomainReliabilityUploaderImpl() override {
66 DCHECK(shutdown_);
67 }
65 68
66 // DomainReliabilityUploader implementation: 69 // DomainReliabilityUploader implementation:
67 void UploadReport( 70 void UploadReport(
68 const std::string& report_json, 71 const std::string& report_json,
69 int max_upload_depth, 72 int max_upload_depth,
70 const GURL& upload_url, 73 const GURL& upload_url,
71 const DomainReliabilityUploader::UploadCallback& callback) override { 74 const DomainReliabilityUploader::UploadCallback& callback) override {
72 VLOG(1) << "Uploading report to " << upload_url; 75 VLOG(1) << "Uploading report to " << upload_url;
73 VLOG(2) << "Report JSON: " << report_json; 76 VLOG(2) << "Report JSON: " << report_json;
74 77
75 if (discard_uploads_) { 78 if (discard_uploads_ || shutdown_) {
mmenke 2016/09/27 16:56:15 Test coverage for this?
76 VLOG(1) << "Discarding report instead of uploading."; 79 VLOG(1) << "Discarding report instead of uploading.";
77 UploadResult result; 80 UploadResult result;
78 result.status = UploadResult::SUCCESS; 81 result.status = UploadResult::SUCCESS;
79 callback.Run(result); 82 callback.Run(result);
80 return; 83 return;
81 } 84 }
82 85
83 std::unique_ptr<net::URLFetcher> owned_fetcher = 86 std::unique_ptr<net::URLFetcher> owned_fetcher =
84 net::URLFetcher::Create(0, upload_url, net::URLFetcher::POST, this); 87 net::URLFetcher::Create(0, upload_url, net::URLFetcher::POST, this);
85 net::URLFetcher* fetcher = owned_fetcher.get(); 88 net::URLFetcher* fetcher = owned_fetcher.get();
(...skipping 10 matching lines...) Expand all
96 fetcher->Start(); 99 fetcher->Start();
97 100
98 upload_callbacks_[fetcher] = {std::move(owned_fetcher), callback}; 101 upload_callbacks_[fetcher] = {std::move(owned_fetcher), callback};
99 } 102 }
100 103
101 void set_discard_uploads(bool discard_uploads) override { 104 void set_discard_uploads(bool discard_uploads) override {
102 discard_uploads_ = discard_uploads; 105 discard_uploads_ = discard_uploads;
103 VLOG(1) << "Setting discard_uploads to " << discard_uploads; 106 VLOG(1) << "Setting discard_uploads to " << discard_uploads;
104 } 107 }
105 108
109 void Shutdown() override {
110 DCHECK(!shutdown_);
111 shutdown_ = true;
112 upload_callbacks_.clear();
113 }
114
106 // net::URLFetcherDelegate implementation: 115 // net::URLFetcherDelegate implementation:
107 void OnURLFetchComplete(const net::URLFetcher* fetcher) override { 116 void OnURLFetchComplete(const net::URLFetcher* fetcher) override {
108 DCHECK(fetcher); 117 DCHECK(fetcher);
109 118
110 auto callback_it = upload_callbacks_.find(fetcher); 119 auto callback_it = upload_callbacks_.find(fetcher);
111 DCHECK(callback_it != upload_callbacks_.end()); 120 DCHECK(callback_it != upload_callbacks_.end());
112 121
113 int net_error = GetNetErrorFromURLRequestStatus(fetcher->GetStatus()); 122 int net_error = GetNetErrorFromURLRequestStatus(fetcher->GetStatus());
114 int http_response_code = fetcher->GetResponseCode(); 123 int http_response_code = fetcher->GetResponseCode();
115 base::TimeDelta retry_after; 124 base::TimeDelta retry_after;
(...skipping 30 matching lines...) Expand all
146 155
147 private: 156 private:
148 using DomainReliabilityUploader::UploadCallback; 157 using DomainReliabilityUploader::UploadCallback;
149 158
150 MockableTime* time_; 159 MockableTime* time_;
151 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 160 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
152 std::map<const net::URLFetcher*, 161 std::map<const net::URLFetcher*,
153 std::pair<std::unique_ptr<net::URLFetcher>, UploadCallback>> 162 std::pair<std::unique_ptr<net::URLFetcher>, UploadCallback>>
154 upload_callbacks_; 163 upload_callbacks_;
155 bool discard_uploads_; 164 bool discard_uploads_;
165 bool shutdown_;
156 }; 166 };
157 167
158 } // namespace 168 } // namespace
159 169
160 DomainReliabilityUploader::DomainReliabilityUploader() {} 170 DomainReliabilityUploader::DomainReliabilityUploader() {}
161 DomainReliabilityUploader::~DomainReliabilityUploader() {} 171 DomainReliabilityUploader::~DomainReliabilityUploader() {}
162 172
163 // static 173 // static
164 std::unique_ptr<DomainReliabilityUploader> DomainReliabilityUploader::Create( 174 std::unique_ptr<DomainReliabilityUploader> DomainReliabilityUploader::Create(
165 MockableTime* time, 175 MockableTime* time,
166 const scoped_refptr<net::URLRequestContextGetter>& 176 const scoped_refptr<net::URLRequestContextGetter>&
167 url_request_context_getter) { 177 url_request_context_getter) {
168 return std::unique_ptr<DomainReliabilityUploader>( 178 return std::unique_ptr<DomainReliabilityUploader>(
169 new DomainReliabilityUploaderImpl(time, url_request_context_getter)); 179 new DomainReliabilityUploaderImpl(time, url_request_context_getter));
170 } 180 }
171 181
172 // static 182 // static
173 int DomainReliabilityUploader::GetURLRequestUploadDepth( 183 int DomainReliabilityUploader::GetURLRequestUploadDepth(
174 const net::URLRequest& request) { 184 const net::URLRequest& request) {
175 UploadUserData* data = static_cast<UploadUserData*>( 185 UploadUserData* data = static_cast<UploadUserData*>(
176 request.GetUserData(UploadUserData::kUserDataKey)); 186 request.GetUserData(UploadUserData::kUserDataKey));
177 if (!data) 187 if (!data)
178 return 0; 188 return 0;
179 return data->depth(); 189 return data->depth();
180 } 190 }
181 191
192 void DomainReliabilityUploader::Shutdown() {}
193
182 } // namespace domain_reliability 194 } // namespace domain_reliability
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698