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

Side by Side Diff: net/dns/single_request_host_resolver.cc

Issue 2116983002: Change HostResolver::Resolve() to take an std::unique_ptr<Request>* rather than a RequestHandle* (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: changed implementation of attach/detach of request Created 4 years, 5 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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/dns/single_request_host_resolver.h" 5 #include "net/dns/single_request_host_resolver.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "net/base/net_errors.h" 11 #include "net/base/net_errors.h"
12 12
13 namespace net { 13 namespace net {
14 14
15 SingleRequestHostResolver::SingleRequestHostResolver(HostResolver* resolver) 15 SingleRequestHostResolver::SingleRequestHostResolver(HostResolver* resolver)
16 : resolver_(resolver), 16 : resolver_(resolver),
17 cur_request_(NULL),
18 callback_( 17 callback_(
19 base::Bind(&SingleRequestHostResolver::OnResolveCompletion, 18 base::Bind(&SingleRequestHostResolver::OnResolveCompletion,
20 base::Unretained(this))) { 19 base::Unretained(this))) {
21 DCHECK(resolver_ != NULL); 20 DCHECK(resolver_ != nullptr);
22 } 21 }
23 22
24 SingleRequestHostResolver::~SingleRequestHostResolver() { 23 SingleRequestHostResolver::~SingleRequestHostResolver() {
25 Cancel(); 24 Cancel();
26 } 25 }
27 26
28 int SingleRequestHostResolver::Resolve(const HostResolver::RequestInfo& info, 27 int SingleRequestHostResolver::Resolve(const HostResolver::RequestInfo& info,
29 RequestPriority priority, 28 RequestPriority priority,
30 AddressList* addresses, 29 AddressList* addresses,
31 const CompletionCallback& callback, 30 const CompletionCallback& callback,
32 const BoundNetLog& net_log) { 31 const BoundNetLog& net_log) {
33 DCHECK(addresses); 32 DCHECK(addresses);
34 DCHECK_EQ(false, callback.is_null()); 33 DCHECK_EQ(false, callback.is_null());
35 DCHECK(cur_request_callback_.is_null()) << "resolver already in use"; 34 DCHECK(cur_request_callback_.is_null()) << "resolver already in use";
36 35
37 HostResolver::RequestHandle request = NULL; 36 std::unique_ptr<HostResolver::Request> request;
38 37
39 // We need to be notified of completion before |callback| is called, so that 38 // We need to be notified of completion before |callback| is called, so that
40 // we can clear out |cur_request_*|. 39 // we can clear out |cur_request_*|.
41 CompletionCallback transient_callback = 40 CompletionCallback transient_callback =
42 callback.is_null() ? CompletionCallback() : callback_; 41 callback.is_null() ? CompletionCallback() : callback_;
43 42
44 int rv = resolver_->Resolve( 43 int rv = resolver_->Resolve(
45 info, priority, addresses, transient_callback, &request, net_log); 44 info, priority, addresses, transient_callback, &request, net_log);
46 45
47 if (rv == ERR_IO_PENDING) { 46 if (rv == ERR_IO_PENDING) {
48 DCHECK_EQ(false, callback.is_null()); 47 DCHECK_EQ(false, callback.is_null());
49 // Cleared in OnResolveCompletion(). 48 // Cleared in OnResolveCompletion().
50 cur_request_ = request; 49 cur_request_ = std::move(request);
51 cur_request_callback_ = callback; 50 cur_request_callback_ = callback;
52 } 51 }
53 52
54 return rv; 53 return rv;
55 } 54 }
56 55
57 void SingleRequestHostResolver::Cancel() { 56 void SingleRequestHostResolver::Cancel() {
58 if (!cur_request_callback_.is_null()) { 57 if (!cur_request_callback_.is_null()) {
mmenke 2016/07/19 19:03:56 This check id no longer needed. Clearing already
maksims (do not use this acc) 2016/07/21 07:12:46 Done.
59 resolver_->CancelRequest(cur_request_); 58 cur_request_.reset();
60 cur_request_ = NULL;
61 cur_request_callback_.Reset(); 59 cur_request_callback_.Reset();
62 } 60 }
63 } 61 }
64 62
65 void SingleRequestHostResolver::OnResolveCompletion(int result) { 63 void SingleRequestHostResolver::OnResolveCompletion(int result) {
66 DCHECK(cur_request_); 64 DCHECK(cur_request_);
67 DCHECK_EQ(false, cur_request_callback_.is_null()); 65 DCHECK_EQ(false, cur_request_callback_.is_null());
68 66
69 CompletionCallback callback = cur_request_callback_; 67 CompletionCallback callback = cur_request_callback_;
70 68
71 // Clear the outstanding request information. 69 // Clear the outstanding request information.
72 cur_request_ = NULL; 70 cur_request_.reset();
73 cur_request_callback_.Reset(); 71 cur_request_callback_.Reset();
74 72
75 // Call the user's original callback. 73 // Call the user's original callback.
76 callback.Run(result); 74 callback.Run(result);
77 } 75 }
78 76
79 } // namespace net 77 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698