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

Side by Side Diff: components/cronet/stale_host_resolver.cc

Issue 2470913003: cronet: Fix StaleHostResolver.AddressListDelta histogram. (Closed)
Patch Set: Make requested change. Created 4 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/cronet/stale_host_resolver.h" 5 #include "components/cronet/stale_host_resolver.h"
6 6
7 #include "base/callback_helpers.h" 7 #include "base/callback_helpers.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 bool have_handle() const { return handle_ != nullptr; } 132 bool have_handle() const { return handle_ != nullptr; }
133 133
134 // Callback for |stale_timer_| that returns stale results. 134 // Callback for |stale_timer_| that returns stale results.
135 void OnStaleDelayElapsed(); 135 void OnStaleDelayElapsed();
136 // Callback for network request that returns fresh results if the request 136 // Callback for network request that returns fresh results if the request
137 // hasn't already returned stale results, and completes the request. 137 // hasn't already returned stale results, and completes the request.
138 void OnNetworkRequestComplete(int error); 138 void OnNetworkRequestComplete(int error);
139 void OnHandleDestroyed(); 139 void OnHandleDestroyed();
140 140
141 // Fills |*result_addresses_| if rv is OK and returns rv. 141 // Fills |*result_addresses_| if rv is OK and returns rv.
142 int HandleResult(int rv, net::AddressList* addresses); 142 int HandleResult(int rv, const net::AddressList& addresses);
143 // Fills |*result_addresses_| if rv is OK and calls |result_callback_| with 143 // Fills |*result_addresses_| if rv is OK and calls |result_callback_| with
144 // rv. 144 // rv.
145 void ReturnResult(int rv, net::AddressList* addresses); 145 void ReturnResult(int rv, const net::AddressList& addresses);
146 146
147 void MaybeDeleteThis(); 147 void MaybeDeleteThis();
148 148
149 void RecordSynchronousRequest(); 149 void RecordSynchronousRequest();
150 void RecordNetworkRequest(int error, bool returned_stale_data); 150 void RecordNetworkRequest(int error, bool returned_stale_data);
151 void RecordCanceledRequest(); 151 void RecordCanceledRequest();
152 152
153 // The address list passed into |Start()| to be filled in when the request 153 // The address list passed into |Start()| to be filled in when the request
154 // returns. 154 // returns.
155 net::AddressList* result_addresses_; 155 net::AddressList* result_addresses_;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 206
207 result_addresses_ = addresses; 207 result_addresses_ = addresses;
208 208
209 net::AddressList cache_addresses; 209 net::AddressList cache_addresses;
210 net::HostCache::EntryStaleness stale_info; 210 net::HostCache::EntryStaleness stale_info;
211 int cache_rv = resolver->ResolveStaleFromCache(info, &cache_addresses, 211 int cache_rv = resolver->ResolveStaleFromCache(info, &cache_addresses,
212 &stale_info, net_log); 212 &stale_info, net_log);
213 // If it's a fresh cache hit (or literal), return it synchronously. 213 // If it's a fresh cache hit (or literal), return it synchronously.
214 if (cache_rv != net::ERR_DNS_CACHE_MISS && !stale_info.is_stale()) { 214 if (cache_rv != net::ERR_DNS_CACHE_MISS && !stale_info.is_stale()) {
215 RecordSynchronousRequest(); 215 RecordSynchronousRequest();
216 return HandleResult(cache_rv, &cache_addresses); 216 return HandleResult(cache_rv, cache_addresses);
217 } 217 }
218 218
219 result_callback_ = result_callback; 219 result_callback_ = result_callback;
220 handle_ = new Handle(this); 220 handle_ = new Handle(this);
221 *out_req = std::unique_ptr<net::HostResolver::Request>(handle_); 221 *out_req = std::unique_ptr<net::HostResolver::Request>(handle_);
222 222
223 if (cache_rv != net::ERR_DNS_CACHE_MISS && usable_callback.Run(stale_info)) { 223 if (cache_rv != net::ERR_DNS_CACHE_MISS && usable_callback.Run(stale_info)) {
224 stale_error_ = cache_rv; 224 stale_error_ = cache_rv;
225 stale_addresses_ = cache_addresses; 225 stale_addresses_ = cache_addresses;
226 // |stale_timer_| is deleted when the Request is deleted, so it's safe to 226 // |stale_timer_| is deleted when the Request is deleted, so it's safe to
(...skipping 20 matching lines...) Expand all
247 net::RequestPriority priority) { 247 net::RequestPriority priority) {
248 DCHECK(have_network_request()); 248 DCHECK(have_network_request());
249 249
250 network_request_->ChangeRequestPriority(priority); 250 network_request_->ChangeRequestPriority(priority);
251 } 251 }
252 252
253 void StaleHostResolver::RequestImpl::OnStaleDelayElapsed() { 253 void StaleHostResolver::RequestImpl::OnStaleDelayElapsed() {
254 DCHECK(!have_returned()); 254 DCHECK(!have_returned());
255 DCHECK(have_stale_data()); 255 DCHECK(have_stale_data());
256 256
257 ReturnResult(stale_error_, &stale_addresses_); 257 ReturnResult(stale_error_, stale_addresses_);
258 258
259 // The request needs to wait for both the network request to complete (to 259 // The request needs to wait for both the network request to complete (to
260 // backfill the cache) and the caller to delete the handle before deleting 260 // backfill the cache) and the caller to delete the handle before deleting
261 // itself. 261 // itself.
262 DCHECK(have_network_request()); 262 DCHECK(have_network_request());
263 } 263 }
264 264
265 void StaleHostResolver::RequestImpl::OnNetworkRequestComplete(int error) { 265 void StaleHostResolver::RequestImpl::OnNetworkRequestComplete(int error) {
266 DCHECK(have_network_request()); 266 DCHECK(have_network_request());
267 network_request_.reset(); 267 network_request_.reset();
268 268
269 RecordNetworkRequest(error, /* returned_stale_data = */ have_returned()); 269 RecordNetworkRequest(error, /* returned_stale_data = */ have_returned());
270 270
271 if (!have_returned()) { 271 if (!have_returned()) {
272 if (have_stale_data()) 272 if (have_stale_data())
273 stale_timer_.Stop(); 273 stale_timer_.Stop();
274 ReturnResult(error, &network_addresses_); 274 ReturnResult(error, network_addresses_);
275 } 275 }
276 276
277 if (!have_handle()) 277 if (!have_handle())
278 delete this; 278 delete this;
279 } 279 }
280 280
281 void StaleHostResolver::RequestImpl::OnHandleDestroyed() { 281 void StaleHostResolver::RequestImpl::OnHandleDestroyed() {
282 DCHECK(have_handle()); 282 DCHECK(have_handle());
283 handle_ = nullptr; 283 handle_ = nullptr;
284 284
285 // If the caller deletes the handle *before* the request has returned, treat 285 // If the caller deletes the handle *before* the request has returned, treat
286 // it as a cancel. 286 // it as a cancel.
287 if (!have_returned()) { 287 if (!have_returned()) {
288 network_request_.reset(); 288 network_request_.reset();
289 result_callback_ = net::CompletionCallback(); 289 result_callback_ = net::CompletionCallback();
290 RecordCanceledRequest(); 290 RecordCanceledRequest();
291 } 291 }
292 292
293 if (!returning_result_ && !have_handle() && !have_network_request()) 293 if (!returning_result_ && !have_handle() && !have_network_request())
294 delete this; 294 delete this;
295 } 295 }
296 296
297 int StaleHostResolver::RequestImpl::HandleResult(int rv, 297 int StaleHostResolver::RequestImpl::HandleResult(
298 net::AddressList* addresses) { 298 int rv,
299 const net::AddressList& addresses) {
299 DCHECK(result_addresses_); 300 DCHECK(result_addresses_);
300 301
301 if (rv == net::OK) { 302 if (rv == net::OK)
302 *result_addresses_ = *addresses; 303 *result_addresses_ = addresses;
303 addresses->clear();
304 }
305 result_addresses_ = nullptr; 304 result_addresses_ = nullptr;
306 return rv; 305 return rv;
307 } 306 }
308 307
309 void StaleHostResolver::RequestImpl::ReturnResult(int rv, 308 void StaleHostResolver::RequestImpl::ReturnResult(
310 net::AddressList* addresses) { 309 int rv,
310 const net::AddressList& addresses) {
311 DCHECK(result_callback_); 311 DCHECK(result_callback_);
312 returning_result_ = true; 312 returning_result_ = true;
313 base::ResetAndReturn(&result_callback_).Run(HandleResult(rv, addresses)); 313 base::ResetAndReturn(&result_callback_).Run(HandleResult(rv, addresses));
314 returning_result_ = false; 314 returning_result_ = false;
315 } 315 }
316 316
317 void StaleHostResolver::RequestImpl::RecordSynchronousRequest() { 317 void StaleHostResolver::RequestImpl::RecordSynchronousRequest() {
318 RecordRequestOutcome(SYNCHRONOUS); 318 RecordRequestOutcome(SYNCHRONOUS);
319 } 319 }
320 320
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 391
392 net::HostCache* StaleHostResolver::GetHostCache() { 392 net::HostCache* StaleHostResolver::GetHostCache() {
393 return inner_resolver_->GetHostCache(); 393 return inner_resolver_->GetHostCache();
394 } 394 }
395 395
396 std::unique_ptr<base::Value> StaleHostResolver::GetDnsConfigAsValue() const { 396 std::unique_ptr<base::Value> StaleHostResolver::GetDnsConfigAsValue() const {
397 return inner_resolver_->GetDnsConfigAsValue(); 397 return inner_resolver_->GetDnsConfigAsValue();
398 } 398 }
399 399
400 } // namespace net 400 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698