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

Side by Side Diff: net/base/host_resolver_impl.cc

Issue 8549004: base::Bind: Convert HostResolver::Resolve. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 9 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 | Annotate | Revision Log
« no previous file with comments | « net/base/host_resolver_impl.h ('k') | net/base/host_resolver_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/base/host_resolver_impl.h" 5 #include "net/base/host_resolver_impl.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <Winsock2.h> 8 #include <Winsock2.h>
9 #elif defined(OS_POSIX) 9 #elif defined(OS_POSIX)
10 #include <netdb.h> 10 #include <netdb.h>
11 #endif 11 #endif
12 12
13 #include <cmath> 13 #include <cmath>
14 #include <deque> 14 #include <deque>
15 #include <vector> 15 #include <vector>
16 16
17 #include "base/basictypes.h" 17 #include "base/basictypes.h"
18 #include "base/bind.h" 18 #include "base/bind.h"
19 #include "base/bind_helpers.h"
19 #include "base/compiler_specific.h" 20 #include "base/compiler_specific.h"
20 #include "base/debug/debugger.h" 21 #include "base/debug/debugger.h"
21 #include "base/debug/stack_trace.h" 22 #include "base/debug/stack_trace.h"
22 #include "base/message_loop_proxy.h" 23 #include "base/message_loop_proxy.h"
23 #include "base/metrics/field_trial.h" 24 #include "base/metrics/field_trial.h"
24 #include "base/metrics/histogram.h" 25 #include "base/metrics/histogram.h"
25 #include "base/stl_util.h" 26 #include "base/stl_util.h"
26 #include "base/string_util.h" 27 #include "base/string_util.h"
27 #include "base/threading/worker_pool.h" 28 #include "base/threading/worker_pool.h"
28 #include "base/time.h" 29 #include "base/time.h"
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 const NetLog::Source source_; 256 const NetLog::Source source_;
256 }; 257 };
257 258
258 //----------------------------------------------------------------------------- 259 //-----------------------------------------------------------------------------
259 260
260 class HostResolverImpl::Request { 261 class HostResolverImpl::Request {
261 public: 262 public:
262 Request(const BoundNetLog& source_net_log, 263 Request(const BoundNetLog& source_net_log,
263 const BoundNetLog& request_net_log, 264 const BoundNetLog& request_net_log,
264 const RequestInfo& info, 265 const RequestInfo& info,
265 OldCompletionCallback* callback, 266 const CompletionCallback& callback,
266 AddressList* addresses) 267 AddressList* addresses)
267 : source_net_log_(source_net_log), 268 : source_net_log_(source_net_log),
268 request_net_log_(request_net_log), 269 request_net_log_(request_net_log),
269 info_(info), 270 info_(info),
270 job_(NULL), 271 job_(NULL),
271 callback_(callback), 272 callback_(callback),
272 addresses_(addresses) { 273 addresses_(addresses) {
273 } 274 }
274 275
275 // Mark the request as cancelled. 276 // Mark the request as cancelled.
276 void MarkAsCancelled() { 277 void MarkAsCancelled() {
277 job_ = NULL; 278 job_ = NULL;
278 callback_ = NULL;
279 addresses_ = NULL; 279 addresses_ = NULL;
280 callback_.Reset();
280 } 281 }
281 282
282 bool was_cancelled() const { 283 bool was_cancelled() const {
283 return callback_ == NULL; 284 return callback_.is_null();
284 } 285 }
285 286
286 void set_job(Job* job) { 287 void set_job(Job* job) {
287 DCHECK(job != NULL); 288 DCHECK(job != NULL);
288 // Identify which job the request is waiting on. 289 // Identify which job the request is waiting on.
289 job_ = job; 290 job_ = job;
290 } 291 }
291 292
292 void OnComplete(int error, const AddressList& addrlist) { 293 void OnComplete(int error, const AddressList& addrlist) {
293 if (error == OK) 294 if (error == OK)
294 *addresses_ = CreateAddressListUsingPort(addrlist, port()); 295 *addresses_ = CreateAddressListUsingPort(addrlist, port());
295 OldCompletionCallback* callback = callback_; 296 CompletionCallback callback = callback_;
296 MarkAsCancelled(); 297 MarkAsCancelled();
297 callback->Run(error); 298 callback.Run(error);
298 } 299 }
299 300
300 int port() const { 301 int port() const {
301 return info_.port(); 302 return info_.port();
302 } 303 }
303 304
304 Job* job() const { 305 Job* job() const {
305 return job_; 306 return job_;
306 } 307 }
307 308
(...skipping 13 matching lines...) Expand all
321 BoundNetLog source_net_log_; 322 BoundNetLog source_net_log_;
322 BoundNetLog request_net_log_; 323 BoundNetLog request_net_log_;
323 324
324 // The request info that started the request. 325 // The request info that started the request.
325 RequestInfo info_; 326 RequestInfo info_;
326 327
327 // The resolve job (running in worker pool) that this request is dependent on. 328 // The resolve job (running in worker pool) that this request is dependent on.
328 Job* job_; 329 Job* job_;
329 330
330 // The user's callback to invoke when the request completes. 331 // The user's callback to invoke when the request completes.
331 OldCompletionCallback* callback_; 332 CompletionCallback callback_;
332 333
333 // The address list to save result into. 334 // The address list to save result into.
334 AddressList* addresses_; 335 AddressList* addresses_;
335 336
336 DISALLOW_COPY_AND_ASSIGN(Request); 337 DISALLOW_COPY_AND_ASSIGN(Request);
337 }; 338 };
338 339
339 //------------------------------------------------------------------------------ 340 //------------------------------------------------------------------------------
340 341
341 // Provide a common macro to simplify code and readability. We must use a 342 // Provide a common macro to simplify code and readability. We must use a
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after
1113 DCHECK(CalledOnValidThread()); 1114 DCHECK(CalledOnValidThread());
1114 CHECK_GE(pool_index, 0); 1115 CHECK_GE(pool_index, 0);
1115 CHECK_LT(pool_index, POOL_COUNT); 1116 CHECK_LT(pool_index, POOL_COUNT);
1116 CHECK(jobs_.empty()) << "Can only set constraints during setup"; 1117 CHECK(jobs_.empty()) << "Can only set constraints during setup";
1117 JobPool* pool = job_pools_[pool_index]; 1118 JobPool* pool = job_pools_[pool_index];
1118 pool->SetConstraints(max_outstanding_jobs, max_pending_requests); 1119 pool->SetConstraints(max_outstanding_jobs, max_pending_requests);
1119 } 1120 }
1120 1121
1121 int HostResolverImpl::Resolve(const RequestInfo& info, 1122 int HostResolverImpl::Resolve(const RequestInfo& info,
1122 AddressList* addresses, 1123 AddressList* addresses,
1123 OldCompletionCallback* callback, 1124 const CompletionCallback& callback,
1124 RequestHandle* out_req, 1125 RequestHandle* out_req,
1125 const BoundNetLog& source_net_log) { 1126 const BoundNetLog& source_net_log) {
1126 DCHECK(addresses); 1127 DCHECK(addresses);
1127 DCHECK(callback);
1128 DCHECK(CalledOnValidThread()); 1128 DCHECK(CalledOnValidThread());
1129 DCHECK_EQ(false, callback.is_null());
1129 1130
1130 // Make a log item for the request. 1131 // Make a log item for the request.
1131 BoundNetLog request_net_log = BoundNetLog::Make(net_log_, 1132 BoundNetLog request_net_log = BoundNetLog::Make(net_log_,
1132 NetLog::SOURCE_HOST_RESOLVER_IMPL_REQUEST); 1133 NetLog::SOURCE_HOST_RESOLVER_IMPL_REQUEST);
1133 1134
1134 // Update the net log and notify registered observers. 1135 // Update the net log and notify registered observers.
1135 OnStartRequest(source_net_log, request_net_log, info); 1136 OnStartRequest(source_net_log, request_net_log, info);
1136 1137
1137 // Build a key that identifies the request in the cache and in the 1138 // Build a key that identifies the request in the cache and in the
1138 // outstanding jobs map. 1139 // outstanding jobs map.
1139 Key key = GetEffectiveKeyForRequest(info); 1140 Key key = GetEffectiveKeyForRequest(info);
1140 1141
1141 int rv = ResolveHelper(key, info, addresses, request_net_log); 1142 int rv = ResolveHelper(key, info, addresses, request_net_log);
1142 if (rv != ERR_DNS_CACHE_MISS) { 1143 if (rv != ERR_DNS_CACHE_MISS) {
1143 OnFinishRequest(source_net_log, request_net_log, info, 1144 OnFinishRequest(source_net_log, request_net_log, info,
1144 rv, 1145 rv,
1145 0 /* os_error (unknown since from cache) */); 1146 0 /* os_error (unknown since from cache) */);
1146 return rv; 1147 return rv;
1147 } 1148 }
1148 1149
1149 // Create a handle for this request, and pass it back to the user if they 1150 // Create a handle for this request, and pass it back to the user if they
1150 // asked for it (out_req != NULL). 1151 // asked for it (out_req != NULL).
1151 Request* req = new Request(source_net_log, request_net_log, info, 1152 Request* req = new Request(source_net_log, request_net_log, info,
1152 callback, addresses); 1153 callback, addresses);
1153 if (out_req) 1154 if (out_req)
1154 *out_req = reinterpret_cast<RequestHandle>(req); 1155 *out_req = reinterpret_cast<RequestHandle>(req);
1155 1156
1156 // Next we need to attach our request to a "job". This job is responsible for 1157 // Next we need to attach our request to a "job". This job is responsible for
1157 // calling "getaddrinfo(hostname)" on a worker thread. 1158 // calling "getaddrinfo(hostname)" on a worker thread.
1158 scoped_refptr<Job> job; 1159 scoped_refptr<Job> job;
1159 1160
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
1591 // resolv.conf changes so we don't need to do anything to clear that cache. 1592 // resolv.conf changes so we don't need to do anything to clear that cache.
1592 if (cache_.get()) 1593 if (cache_.get())
1593 cache_->clear(); 1594 cache_->clear();
1594 // Existing jobs will have been sent to the original server so they need to 1595 // Existing jobs will have been sent to the original server so they need to
1595 // be aborted. TODO(Craig): Should these jobs be restarted? 1596 // be aborted. TODO(Craig): Should these jobs be restarted?
1596 AbortAllInProgressJobs(); 1597 AbortAllInProgressJobs();
1597 // |this| may be deleted inside AbortAllInProgressJobs(). 1598 // |this| may be deleted inside AbortAllInProgressJobs().
1598 } 1599 }
1599 1600
1600 } // namespace net 1601 } // namespace net
OLDNEW
« no previous file with comments | « net/base/host_resolver_impl.h ('k') | net/base/host_resolver_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698