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

Side by Side Diff: net/proxy/sync_host_resolver_bridge.cc

Issue 9121055: Add a source to V8 proxy resolver-initiated DNS requests, (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Update year Created 8 years, 11 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
« no previous file with comments | « net/proxy/sync_host_resolver_bridge.h ('k') | net/proxy/sync_host_resolver_bridge_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) 2012 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/proxy/sync_host_resolver_bridge.h" 5 #include "net/proxy/sync_host_resolver_bridge.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/synchronization/lock.h" 11 #include "base/synchronization/lock.h"
12 #include "base/synchronization/waitable_event.h" 12 #include "base/synchronization/waitable_event.h"
13 #include "net/base/net_errors.h" 13 #include "net/base/net_errors.h"
14 #include "net/base/net_log.h" 14 #include "net/base/net_log.h"
15 15
16 namespace net { 16 namespace net {
17 17
18 // SyncHostResolverBridge::Core ---------------------------------------------- 18 // SyncHostResolverBridge::Core ----------------------------------------------
19 19
20 class SyncHostResolverBridge::Core 20 class SyncHostResolverBridge::Core
21 : public base::RefCountedThreadSafe<SyncHostResolverBridge::Core> { 21 : public base::RefCountedThreadSafe<SyncHostResolverBridge::Core> {
22 public: 22 public:
23 Core(HostResolver* resolver, MessageLoop* host_resolver_loop); 23 Core(HostResolver* resolver, MessageLoop* host_resolver_loop);
24 24
25 int ResolveSynchronously(const HostResolver::RequestInfo& info, 25 int ResolveSynchronously(const HostResolver::RequestInfo& info,
26 AddressList* addresses); 26 AddressList* addresses,
27 const BoundNetLog& net_log);
27 28
28 // Returns true if Shutdown() has been called. 29 // Returns true if Shutdown() has been called.
29 bool HasShutdown() const { 30 bool HasShutdown() const {
30 base::AutoLock l(lock_); 31 base::AutoLock l(lock_);
31 return HasShutdownLocked(); 32 return HasShutdownLocked();
32 } 33 }
33 34
34 // Called on |host_resolver_loop_|. 35 // Called on |host_resolver_loop_|.
35 void Shutdown(); 36 void Shutdown();
36 37
37 private: 38 private:
38 friend class base::RefCountedThreadSafe<SyncHostResolverBridge::Core>; 39 friend class base::RefCountedThreadSafe<SyncHostResolverBridge::Core>;
39 40
40 bool HasShutdownLocked() const { 41 bool HasShutdownLocked() const {
41 return has_shutdown_; 42 return has_shutdown_;
42 } 43 }
43 44
44 // Called on |host_resolver_loop_|. 45 // Called on |host_resolver_loop_|.
45 void StartResolve(const HostResolver::RequestInfo& info, 46 void StartResolve(const HostResolver::RequestInfo& info,
46 AddressList* addresses); 47 AddressList* addresses,
48 const BoundNetLog& net_log);
47 49
48 // Called on |host_resolver_loop_|. 50 // Called on |host_resolver_loop_|.
49 void OnResolveCompletion(int result); 51 void OnResolveCompletion(int result);
50 52
51 // Not called on |host_resolver_loop_|. 53 // Not called on |host_resolver_loop_|.
52 int WaitForResolveCompletion(); 54 int WaitForResolveCompletion();
53 55
54 HostResolver* const host_resolver_; 56 HostResolver* const host_resolver_;
55 MessageLoop* const host_resolver_loop_; 57 MessageLoop* const host_resolver_loop_;
56 // The result from the current request (set on |host_resolver_loop_|). 58 // The result from the current request (set on |host_resolver_loop_|).
(...skipping 18 matching lines...) Expand all
75 MessageLoop* host_resolver_loop) 77 MessageLoop* host_resolver_loop)
76 : host_resolver_(host_resolver), 78 : host_resolver_(host_resolver),
77 host_resolver_loop_(host_resolver_loop), 79 host_resolver_loop_(host_resolver_loop),
78 err_(0), 80 err_(0),
79 outstanding_request_(NULL), 81 outstanding_request_(NULL),
80 event_(true, false), 82 event_(true, false),
81 has_shutdown_(false) {} 83 has_shutdown_(false) {}
82 84
83 int SyncHostResolverBridge::Core::ResolveSynchronously( 85 int SyncHostResolverBridge::Core::ResolveSynchronously(
84 const HostResolver::RequestInfo& info, 86 const HostResolver::RequestInfo& info,
85 net::AddressList* addresses) { 87 net::AddressList* addresses,
88 const BoundNetLog& net_log) {
86 // Otherwise start an async resolve on the resolver's thread. 89 // Otherwise start an async resolve on the resolver's thread.
87 host_resolver_loop_->PostTask( 90 host_resolver_loop_->PostTask(
88 FROM_HERE, 91 FROM_HERE,
89 base::Bind(&Core::StartResolve, this, info, addresses)); 92 base::Bind(&Core::StartResolve, this, info, addresses, net_log));
90 93
91 return WaitForResolveCompletion(); 94 return WaitForResolveCompletion();
92 } 95 }
93 96
94 void SyncHostResolverBridge::Core::StartResolve( 97 void SyncHostResolverBridge::Core::StartResolve(
95 const HostResolver::RequestInfo& info, 98 const HostResolver::RequestInfo& info,
96 net::AddressList* addresses) { 99 net::AddressList* addresses,
100 const BoundNetLog& net_log) {
97 DCHECK_EQ(MessageLoop::current(), host_resolver_loop_); 101 DCHECK_EQ(MessageLoop::current(), host_resolver_loop_);
98 DCHECK(!outstanding_request_); 102 DCHECK(!outstanding_request_);
99 103
100 if (HasShutdown()) 104 if (HasShutdown())
101 return; 105 return;
102 106
103 int error = host_resolver_->Resolve( 107 int error = host_resolver_->Resolve(
104 info, addresses, base::Bind(&Core::OnResolveCompletion, this), 108 info, addresses, base::Bind(&Core::OnResolveCompletion, this),
105 &outstanding_request_, BoundNetLog()); 109 &outstanding_request_, net_log);
106 if (error != ERR_IO_PENDING) 110 if (error != ERR_IO_PENDING)
107 OnResolveCompletion(error); // Completed synchronously. 111 OnResolveCompletion(error); // Completed synchronously.
108 } 112 }
109 113
110 void SyncHostResolverBridge::Core::OnResolveCompletion(int result) { 114 void SyncHostResolverBridge::Core::OnResolveCompletion(int result) {
111 DCHECK_EQ(MessageLoop::current(), host_resolver_loop_); 115 DCHECK_EQ(MessageLoop::current(), host_resolver_loop_);
112 err_ = result; 116 err_ = result;
113 outstanding_request_ = NULL; 117 outstanding_request_ = NULL;
114 event_.Signal(); 118 event_.Signal();
115 } 119 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 : host_resolver_loop_(host_resolver_loop), 156 : host_resolver_loop_(host_resolver_loop),
153 core_(new Core(host_resolver, host_resolver_loop)) { 157 core_(new Core(host_resolver, host_resolver_loop)) {
154 DCHECK(host_resolver_loop_); 158 DCHECK(host_resolver_loop_);
155 } 159 }
156 160
157 SyncHostResolverBridge::~SyncHostResolverBridge() { 161 SyncHostResolverBridge::~SyncHostResolverBridge() {
158 DCHECK(core_->HasShutdown()); 162 DCHECK(core_->HasShutdown());
159 } 163 }
160 164
161 int SyncHostResolverBridge::Resolve(const HostResolver::RequestInfo& info, 165 int SyncHostResolverBridge::Resolve(const HostResolver::RequestInfo& info,
162 AddressList* addresses) { 166 AddressList* addresses,
163 return core_->ResolveSynchronously(info, addresses); 167 const BoundNetLog& net_log) {
168 return core_->ResolveSynchronously(info, addresses, net_log);
164 } 169 }
165 170
166 void SyncHostResolverBridge::Shutdown() { 171 void SyncHostResolverBridge::Shutdown() {
167 DCHECK_EQ(MessageLoop::current(), host_resolver_loop_); 172 DCHECK_EQ(MessageLoop::current(), host_resolver_loop_);
168 core_->Shutdown(); 173 core_->Shutdown();
169 } 174 }
170 175
171 } // namespace net 176 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/sync_host_resolver_bridge.h ('k') | net/proxy/sync_host_resolver_bridge_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698