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

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

Issue 12518036: net: move host_resolver files from net/base to net/dns (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "net/base/single_request_host_resolver.h"
6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "base/compiler_specific.h"
10 #include "base/logging.h"
11 #include "net/base/net_errors.h"
12
13 namespace net {
14
15 SingleRequestHostResolver::SingleRequestHostResolver(HostResolver* resolver)
16 : resolver_(resolver),
17 cur_request_(NULL),
18 ALLOW_THIS_IN_INITIALIZER_LIST(callback_(
19 base::Bind(&SingleRequestHostResolver::OnResolveCompletion,
20 base::Unretained(this)))) {
21 DCHECK(resolver_ != NULL);
22 }
23
24 SingleRequestHostResolver::~SingleRequestHostResolver() {
25 Cancel();
26 }
27
28 int SingleRequestHostResolver::Resolve(
29 const HostResolver::RequestInfo& info, AddressList* addresses,
30 const CompletionCallback& callback, const BoundNetLog& net_log) {
31 DCHECK(addresses);
32 DCHECK_EQ(false, callback.is_null());
33 DCHECK(cur_request_callback_.is_null()) << "resolver already in use";
34
35 HostResolver::RequestHandle request = NULL;
36
37 // We need to be notified of completion before |callback| is called, so that
38 // we can clear out |cur_request_*|.
39 CompletionCallback transient_callback =
40 callback.is_null() ? CompletionCallback() : callback_;
41
42 int rv = resolver_->Resolve(
43 info, addresses, transient_callback, &request, net_log);
44
45 if (rv == ERR_IO_PENDING) {
46 DCHECK_EQ(false, callback.is_null());
47 // Cleared in OnResolveCompletion().
48 cur_request_ = request;
49 cur_request_callback_ = callback;
50 }
51
52 return rv;
53 }
54
55 void SingleRequestHostResolver::Cancel() {
56 if (!cur_request_callback_.is_null()) {
57 resolver_->CancelRequest(cur_request_);
58 cur_request_ = NULL;
59 cur_request_callback_.Reset();
60 }
61 }
62
63 void SingleRequestHostResolver::OnResolveCompletion(int result) {
64 DCHECK(cur_request_);
65 DCHECK_EQ(false, cur_request_callback_.is_null());
66
67 CompletionCallback callback = cur_request_callback_;
68
69 // Clear the outstanding request information.
70 cur_request_ = NULL;
71 cur_request_callback_.Reset();
72
73 // Call the user's original callback.
74 callback.Run(result);
75 }
76
77 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698