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

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

Issue 8533011: Remove unused HostResolver::Observer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove id from AsyncHostResolver; add double-cancelation check; comments' 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/dns/async_host_resolver.h ('k') | net/dns/async_host_resolver_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/dns/async_host_resolver.h" 5 #include "net/dns/async_host_resolver.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 // cancelled, which can be either through specific CancelRequest call or by 77 // cancelled, which can be either through specific CancelRequest call or by
78 // the destruction of AsyncHostResolver, which would destruct pending or 78 // the destruction of AsyncHostResolver, which would destruct pending or
79 // in-progress requests, causing them to be cancelled. Synchronous 79 // in-progress requests, causing them to be cancelled. Synchronous
80 // resolution sets |callback_| to NULL, thus, if in the destructor we still 80 // resolution sets |callback_| to NULL, thus, if in the destructor we still
81 // have a non-NULL |callback_|, we are being cancelled. 81 // have a non-NULL |callback_|, we are being cancelled.
82 class AsyncHostResolver::Request { 82 class AsyncHostResolver::Request {
83 public: 83 public:
84 Request(AsyncHostResolver* resolver, 84 Request(AsyncHostResolver* resolver,
85 const BoundNetLog& source_net_log, 85 const BoundNetLog& source_net_log,
86 const BoundNetLog& request_net_log, 86 const BoundNetLog& request_net_log,
87 int id,
88 const HostResolver::RequestInfo& info, 87 const HostResolver::RequestInfo& info,
89 OldCompletionCallback* callback, 88 OldCompletionCallback* callback,
90 AddressList* addresses) 89 AddressList* addresses)
91 : resolver_(resolver), 90 : resolver_(resolver),
92 source_net_log_(source_net_log), 91 source_net_log_(source_net_log),
93 request_net_log_(request_net_log), 92 request_net_log_(request_net_log),
94 id_(id),
95 info_(info), 93 info_(info),
96 callback_(callback), 94 callback_(callback),
97 addresses_(addresses), 95 addresses_(addresses),
98 result_(ERR_UNEXPECTED) { 96 result_(ERR_UNEXPECTED) {
99 DCHECK(addresses_); 97 DCHECK(addresses_);
100 DCHECK(resolver_); 98 DCHECK(resolver_);
101 resolver_->OnStart(this); 99 resolver_->OnStart(this);
102 std::string dns_name; 100 std::string dns_name;
103 if (DNSDomainFromDot(info.hostname(), &dns_name)) 101 if (DNSDomainFromDot(info.hostname(), &dns_name))
104 key_ = Key(dns_name, QueryTypeFromAddressFamily(info.address_family())); 102 key_ = Key(dns_name, QueryTypeFromAddressFamily(info.address_family()));
105 } 103 }
106 104
107 ~Request() { 105 ~Request() {
108 if (callback_) 106 if (callback_)
109 resolver_->OnCancel(this); 107 resolver_->OnCancel(this);
110 } 108 }
111 109
112 int id() const { return id_; }
113 int result() const { return result_; } 110 int result() const { return result_; }
114 const Key& key() const { 111 const Key& key() const {
115 DCHECK(IsValid()); 112 DCHECK(IsValid());
116 return key_; 113 return key_;
117 } 114 }
118 const HostResolver::RequestInfo& info() const { return info_; } 115 const HostResolver::RequestInfo& info() const { return info_; }
119 RequestPriority priority() const { return info_.priority(); } 116 RequestPriority priority() const { return info_.priority(); }
120 const BoundNetLog& source_net_log() const { return source_net_log_; } 117 const BoundNetLog& source_net_log() const { return source_net_log_; }
121 const BoundNetLog& request_net_log() const { return request_net_log_; } 118 const BoundNetLog& request_net_log() const { return request_net_log_; }
122 119
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 178
182 // Returns true if request has a validly formed hostname. 179 // Returns true if request has a validly formed hostname.
183 bool IsValid() const { 180 bool IsValid() const {
184 return !info_.hostname().empty() && !key_.first.empty(); 181 return !info_.hostname().empty() && !key_.first.empty();
185 } 182 }
186 183
187 private: 184 private:
188 AsyncHostResolver* resolver_; 185 AsyncHostResolver* resolver_;
189 BoundNetLog source_net_log_; 186 BoundNetLog source_net_log_;
190 BoundNetLog request_net_log_; 187 BoundNetLog request_net_log_;
191 const int id_;
192 const HostResolver::RequestInfo info_; 188 const HostResolver::RequestInfo info_;
193 Key key_; 189 Key key_;
194 OldCompletionCallback* callback_; 190 OldCompletionCallback* callback_;
195 AddressList* addresses_; 191 AddressList* addresses_;
196 int result_; 192 int result_;
197 }; 193 };
198 194
199 //----------------------------------------------------------------------------- 195 //-----------------------------------------------------------------------------
200 AsyncHostResolver::AsyncHostResolver(const IPEndPoint& dns_server, 196 AsyncHostResolver::AsyncHostResolver(const IPEndPoint& dns_server,
201 size_t max_transactions, 197 size_t max_transactions,
202 size_t max_pending_requests, 198 size_t max_pending_requests,
203 const RandIntCallback& rand_int_cb, 199 const RandIntCallback& rand_int_cb,
204 HostCache* cache, 200 HostCache* cache,
205 ClientSocketFactory* factory, 201 ClientSocketFactory* factory,
206 NetLog* net_log) 202 NetLog* net_log)
207 : max_transactions_(max_transactions), 203 : max_transactions_(max_transactions),
208 max_pending_requests_(max_pending_requests), 204 max_pending_requests_(max_pending_requests),
209 dns_server_(dns_server), 205 dns_server_(dns_server),
210 rand_int_cb_(rand_int_cb), 206 rand_int_cb_(rand_int_cb),
211 cache_(cache), 207 cache_(cache),
212 factory_(factory), 208 factory_(factory),
213 next_request_id_(0),
214 net_log_(net_log) { 209 net_log_(net_log) {
215 } 210 }
216 211
217 AsyncHostResolver::~AsyncHostResolver() { 212 AsyncHostResolver::~AsyncHostResolver() {
218 // Destroy request lists. 213 // Destroy request lists.
219 for (KeyRequestListMap::iterator it = requestlist_map_.begin(); 214 for (KeyRequestListMap::iterator it = requestlist_map_.begin();
220 it != requestlist_map_.end(); ++it) 215 it != requestlist_map_.end(); ++it)
221 STLDeleteElements(&it->second); 216 STLDeleteElements(&it->second);
222 217
223 // Destroy transactions. 218 // Destroy transactions.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 DCHECK(request); 275 DCHECK(request);
281 276
282 request->source_net_log().BeginEvent( 277 request->source_net_log().BeginEvent(
283 NetLog::TYPE_ASYNC_HOST_RESOLVER, 278 NetLog::TYPE_ASYNC_HOST_RESOLVER,
284 make_scoped_refptr(new NetLogSourceParameter( 279 make_scoped_refptr(new NetLogSourceParameter(
285 "source_dependency", request->request_net_log().source()))); 280 "source_dependency", request->request_net_log().source())));
286 request->request_net_log().BeginEvent( 281 request->request_net_log().BeginEvent(
287 NetLog::TYPE_ASYNC_HOST_RESOLVER_REQUEST, 282 NetLog::TYPE_ASYNC_HOST_RESOLVER_REQUEST,
288 make_scoped_refptr(new RequestParameters( 283 make_scoped_refptr(new RequestParameters(
289 request->info(), request->source_net_log().source()))); 284 request->info(), request->source_net_log().source())));
290
291 FOR_EACH_OBSERVER(
292 HostResolver::Observer, observers_,
293 OnStartResolution(request->id(), request->info()));
294 } 285 }
295 286
296 void AsyncHostResolver::OnFinish(Request* request, int result) { 287 void AsyncHostResolver::OnFinish(Request* request, int result) {
297 DCHECK(request); 288 DCHECK(request);
298 bool was_resolved = result == OK;
299
300 FOR_EACH_OBSERVER(
301 HostResolver::Observer, observers_,
302 OnFinishResolutionWithStatus(
303 request->id(), was_resolved, request->info()));
304
305 request->request_net_log().EndEventWithNetErrorCode( 289 request->request_net_log().EndEventWithNetErrorCode(
306 NetLog::TYPE_ASYNC_HOST_RESOLVER_REQUEST, result); 290 NetLog::TYPE_ASYNC_HOST_RESOLVER_REQUEST, result);
307 request->source_net_log().EndEvent( 291 request->source_net_log().EndEvent(
308 NetLog::TYPE_ASYNC_HOST_RESOLVER, NULL); 292 NetLog::TYPE_ASYNC_HOST_RESOLVER, NULL);
309 } 293 }
310 294
311 void AsyncHostResolver::OnCancel(Request* request) { 295 void AsyncHostResolver::OnCancel(Request* request) {
312 DCHECK(request); 296 DCHECK(request);
313 297
314 FOR_EACH_OBSERVER(
315 HostResolver::Observer, observers_,
316 OnCancelResolution(request->id(), request->info()));
317
318 request->request_net_log().AddEvent( 298 request->request_net_log().AddEvent(
319 NetLog::TYPE_CANCELLED, NULL); 299 NetLog::TYPE_CANCELLED, NULL);
320 request->request_net_log().EndEvent( 300 request->request_net_log().EndEvent(
321 NetLog::TYPE_ASYNC_HOST_RESOLVER_REQUEST, NULL); 301 NetLog::TYPE_ASYNC_HOST_RESOLVER_REQUEST, NULL);
322 request->source_net_log().EndEvent( 302 request->source_net_log().EndEvent(
323 NetLog::TYPE_ASYNC_HOST_RESOLVER, NULL); 303 NetLog::TYPE_ASYNC_HOST_RESOLVER, NULL);
324 } 304 }
325 305
326 void AsyncHostResolver::CancelRequest(RequestHandle req_handle) { 306 void AsyncHostResolver::CancelRequest(RequestHandle req_handle) {
327 scoped_ptr<Request> request(reinterpret_cast<Request*>(req_handle)); 307 scoped_ptr<Request> request(reinterpret_cast<Request*>(req_handle));
328 DCHECK(request.get()); 308 DCHECK(request.get());
329 309
330 KeyRequestListMap::iterator it = requestlist_map_.find(request->key()); 310 KeyRequestListMap::iterator it = requestlist_map_.find(request->key());
331 if (it != requestlist_map_.end()) 311 if (it != requestlist_map_.end())
332 it->second.remove(request.get()); 312 it->second.remove(request.get());
333 else 313 else
334 pending_requests_[request->priority()].remove(request.get()); 314 pending_requests_[request->priority()].remove(request.get());
335 } 315 }
336 316
337 void AsyncHostResolver::AddObserver(HostResolver::Observer* observer) {
338 observers_.AddObserver(observer);
339 }
340
341 void AsyncHostResolver::RemoveObserver(HostResolver::Observer* observer) {
342 observers_.RemoveObserver(observer);
343 }
344
345 void AsyncHostResolver::SetDefaultAddressFamily( 317 void AsyncHostResolver::SetDefaultAddressFamily(
346 AddressFamily address_family) { 318 AddressFamily address_family) {
347 NOTIMPLEMENTED(); 319 NOTIMPLEMENTED();
348 } 320 }
349 321
350 AddressFamily AsyncHostResolver::GetDefaultAddressFamily() const { 322 AddressFamily AsyncHostResolver::GetDefaultAddressFamily() const {
351 return ADDRESS_FAMILY_IPV4; 323 return ADDRESS_FAMILY_IPV4;
352 } 324 }
353 325
354 HostCache* AsyncHostResolver::GetHostCache() { 326 HostCache* AsyncHostResolver::GetHostCache() {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 ProcessPending(); 380 ProcessPending();
409 } 381 }
410 382
411 AsyncHostResolver::Request* AsyncHostResolver::CreateNewRequest( 383 AsyncHostResolver::Request* AsyncHostResolver::CreateNewRequest(
412 const RequestInfo& info, 384 const RequestInfo& info,
413 OldCompletionCallback* callback, 385 OldCompletionCallback* callback,
414 AddressList* addresses, 386 AddressList* addresses,
415 const BoundNetLog& source_net_log) { 387 const BoundNetLog& source_net_log) {
416 BoundNetLog request_net_log = BoundNetLog::Make(net_log_, 388 BoundNetLog request_net_log = BoundNetLog::Make(net_log_,
417 NetLog::SOURCE_ASYNC_HOST_RESOLVER_REQUEST); 389 NetLog::SOURCE_ASYNC_HOST_RESOLVER_REQUEST);
418 int id = next_request_id_++;
419 return new Request( 390 return new Request(
420 this, source_net_log, request_net_log, id, info, callback, addresses); 391 this, source_net_log, request_net_log, info, callback, addresses);
421 } 392 }
422 393
423 bool AsyncHostResolver::AttachToRequestList(Request* request) { 394 bool AsyncHostResolver::AttachToRequestList(Request* request) {
424 KeyRequestListMap::iterator it = requestlist_map_.find(request->key()); 395 KeyRequestListMap::iterator it = requestlist_map_.find(request->key());
425 if (it == requestlist_map_.end()) 396 if (it == requestlist_map_.end())
426 return false; 397 return false;
427 it->second.push_back(request); 398 it->second.push_back(request);
428 return true; 399 return true;
429 } 400 }
430 401
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 it = requests.erase(it); 487 it = requests.erase(it);
517 } else { 488 } else {
518 ++it; 489 ++it;
519 } 490 }
520 } 491 }
521 } 492 }
522 StartNewTransactionFor(request); 493 StartNewTransactionFor(request);
523 } 494 }
524 495
525 } // namespace net 496 } // namespace net
OLDNEW
« no previous file with comments | « net/dns/async_host_resolver.h ('k') | net/dns/async_host_resolver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698