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

Side by Side Diff: jingle/notifier/base/proxy_resolving_client_socket.cc

Issue 8801004: base::Bind: Convert StreamSocket::Connect. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review fixes Created 9 years 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 | « jingle/notifier/base/proxy_resolving_client_socket.h ('k') | net/curvecp/client_packetizer.h » ('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 "jingle/notifier/base/proxy_resolving_client_socket.h" 5 #include "jingle/notifier/base/proxy_resolving_client_socket.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 19 matching lines...) Expand all
30 &ProxyResolvingClientSocket::ProcessConnectDone), 30 &ProxyResolvingClientSocket::ProcessConnectDone),
31 ssl_config_(ssl_config), 31 ssl_config_(ssl_config),
32 pac_request_(NULL), 32 pac_request_(NULL),
33 dest_host_port_pair_(dest_host_port_pair), 33 dest_host_port_pair_(dest_host_port_pair),
34 tried_direct_connect_fallback_(false), 34 tried_direct_connect_fallback_(false),
35 bound_net_log_( 35 bound_net_log_(
36 net::BoundNetLog::Make( 36 net::BoundNetLog::Make(
37 request_context_getter->GetURLRequestContext()->net_log(), 37 request_context_getter->GetURLRequestContext()->net_log(),
38 net::NetLog::SOURCE_SOCKET)), 38 net::NetLog::SOURCE_SOCKET)),
39 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), 39 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
40 user_connect_callback_(NULL) { 40 old_user_connect_callback_(NULL) {
41 DCHECK(request_context_getter); 41 DCHECK(request_context_getter);
42 net::URLRequestContext* request_context = 42 net::URLRequestContext* request_context =
43 request_context_getter->GetURLRequestContext(); 43 request_context_getter->GetURLRequestContext();
44 DCHECK(request_context); 44 DCHECK(request_context);
45 net::HttpNetworkSession::Params session_params; 45 net::HttpNetworkSession::Params session_params;
46 session_params.client_socket_factory = socket_factory; 46 session_params.client_socket_factory = socket_factory;
47 session_params.host_resolver = request_context->host_resolver(); 47 session_params.host_resolver = request_context->host_resolver();
48 session_params.cert_verifier = request_context->cert_verifier(); 48 session_params.cert_verifier = request_context->cert_verifier();
49 // TODO(rkn): This is NULL because OriginBoundCertService is not thread safe. 49 // TODO(rkn): This is NULL because OriginBoundCertService is not thread safe.
50 session_params.origin_bound_cert_service = NULL; 50 session_params.origin_bound_cert_service = NULL;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 } 90 }
91 91
92 bool ProxyResolvingClientSocket::SetSendBufferSize(int32 size) { 92 bool ProxyResolvingClientSocket::SetSendBufferSize(int32 size) {
93 if (transport_.get() && transport_->socket()) 93 if (transport_.get() && transport_->socket())
94 return transport_->socket()->SetSendBufferSize(size); 94 return transport_->socket()->SetSendBufferSize(size);
95 NOTREACHED(); 95 NOTREACHED();
96 return false; 96 return false;
97 } 97 }
98 98
99 int ProxyResolvingClientSocket::Connect(net::OldCompletionCallback* callback) { 99 int ProxyResolvingClientSocket::Connect(net::OldCompletionCallback* callback) {
100 DCHECK(!user_connect_callback_); 100 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
101 101
102 tried_direct_connect_fallback_ = false; 102 tried_direct_connect_fallback_ = false;
103 103
104 // First we try and resolve the proxy.
105 GURL url("http://" + dest_host_port_pair_.ToString());
106 int status = network_session_->proxy_service()->ResolveProxy(
107 url,
108 &proxy_info_,
109 &proxy_resolve_callback_,
110 &pac_request_,
111 bound_net_log_);
112 if (status != net::ERR_IO_PENDING) {
113 // We defer execution of ProcessProxyResolveDone instead of calling it
114 // directly here for simplicity. From the caller's point of view,
115 // the connect always happens asynchronously.
116 MessageLoop* message_loop = MessageLoop::current();
117 CHECK(message_loop);
118 message_loop->PostTask(
119 FROM_HERE,
120 base::Bind(&ProxyResolvingClientSocket::ProcessProxyResolveDone,
121 weak_factory_.GetWeakPtr(), status));
122 }
123 old_user_connect_callback_ = callback;
124 return net::ERR_IO_PENDING;
125 }
126 int ProxyResolvingClientSocket::Connect(
127 const net::CompletionCallback& callback) {
128 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
129
130 tried_direct_connect_fallback_ = false;
131
104 // First we try and resolve the proxy. 132 // First we try and resolve the proxy.
105 GURL url("http://" + dest_host_port_pair_.ToString()); 133 GURL url("http://" + dest_host_port_pair_.ToString());
106 int status = network_session_->proxy_service()->ResolveProxy( 134 int status = network_session_->proxy_service()->ResolveProxy(
107 url, 135 url,
108 &proxy_info_, 136 &proxy_info_,
109 &proxy_resolve_callback_, 137 &proxy_resolve_callback_,
110 &pac_request_, 138 &pac_request_,
111 bound_net_log_); 139 bound_net_log_);
112 if (status != net::ERR_IO_PENDING) { 140 if (status != net::ERR_IO_PENDING) {
113 // We defer execution of ProcessProxyResolveDone instead of calling it 141 // We defer execution of ProcessProxyResolveDone instead of calling it
114 // directly here for simplicity. From the caller's point of view, 142 // directly here for simplicity. From the caller's point of view,
115 // the connect always happens asynchronously. 143 // the connect always happens asynchronously.
116 MessageLoop* message_loop = MessageLoop::current(); 144 MessageLoop* message_loop = MessageLoop::current();
117 CHECK(message_loop); 145 CHECK(message_loop);
118 message_loop->PostTask( 146 message_loop->PostTask(
119 FROM_HERE, 147 FROM_HERE,
120 base::Bind(&ProxyResolvingClientSocket::ProcessProxyResolveDone, 148 base::Bind(&ProxyResolvingClientSocket::ProcessProxyResolveDone,
121 weak_factory_.GetWeakPtr(), status)); 149 weak_factory_.GetWeakPtr(), status));
122 } 150 }
123 user_connect_callback_ = callback; 151 user_connect_callback_ = callback;
124 return net::ERR_IO_PENDING; 152 return net::ERR_IO_PENDING;
125 } 153 }
126 154
127 void ProxyResolvingClientSocket::RunUserConnectCallback(int status) { 155 void ProxyResolvingClientSocket::RunUserConnectCallback(int status) {
128 DCHECK_LE(status, net::OK); 156 DCHECK_LE(status, net::OK);
129 net::OldCompletionCallback* user_connect_callback = user_connect_callback_; 157 if (old_user_connect_callback_) {
130 user_connect_callback_ = NULL; 158 net::OldCompletionCallback* user_connect_callback =
131 user_connect_callback->Run(status); 159 old_user_connect_callback_;
160 old_user_connect_callback_ = NULL;
161 user_connect_callback->Run(status);
162 } else {
163 net::CompletionCallback user_connect_callback = user_connect_callback_;
164 user_connect_callback_.Reset();
165 user_connect_callback.Run(status);
166 }
132 } 167 }
133 168
134 // Always runs asynchronously. 169 // Always runs asynchronously.
135 void ProxyResolvingClientSocket::ProcessProxyResolveDone(int status) { 170 void ProxyResolvingClientSocket::ProcessProxyResolveDone(int status) {
136 pac_request_ = NULL; 171 pac_request_ = NULL;
137 172
138 DCHECK_NE(status, net::ERR_IO_PENDING); 173 DCHECK_NE(status, net::ERR_IO_PENDING);
139 if (status == net::OK) { 174 if (status == net::OK) {
140 // Remove unsupported proxies from the list. 175 // Remove unsupported proxies from the list.
141 proxy_info_.RemoveProxiesWithoutScheme( 176 proxy_info_.RemoveProxiesWithoutScheme(
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 } 315 }
281 316
282 void ProxyResolvingClientSocket::ReportSuccessfulProxyConnection() { 317 void ProxyResolvingClientSocket::ReportSuccessfulProxyConnection() {
283 network_session_->proxy_service()->ReportSuccess(proxy_info_); 318 network_session_->proxy_service()->ReportSuccess(proxy_info_);
284 } 319 }
285 320
286 void ProxyResolvingClientSocket::Disconnect() { 321 void ProxyResolvingClientSocket::Disconnect() {
287 CloseTransportSocket(); 322 CloseTransportSocket();
288 if (pac_request_) 323 if (pac_request_)
289 network_session_->proxy_service()->CancelPacRequest(pac_request_); 324 network_session_->proxy_service()->CancelPacRequest(pac_request_);
290 user_connect_callback_ = NULL; 325 old_user_connect_callback_ = NULL;
326 user_connect_callback_.Reset();
291 } 327 }
292 328
293 bool ProxyResolvingClientSocket::IsConnected() const { 329 bool ProxyResolvingClientSocket::IsConnected() const {
294 if (!transport_.get() || !transport_->socket()) 330 if (!transport_.get() || !transport_->socket())
295 return false; 331 return false;
296 return transport_->socket()->IsConnected(); 332 return transport_->socket()->IsConnected();
297 } 333 }
298 334
299 bool ProxyResolvingClientSocket::IsConnectedAndIdle() const { 335 bool ProxyResolvingClientSocket::IsConnectedAndIdle() const {
300 if (!transport_.get() || !transport_->socket()) 336 if (!transport_.get() || !transport_->socket())
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 return base::TimeDelta::FromMicroseconds(-1); 403 return base::TimeDelta::FromMicroseconds(-1);
368 } 404 }
369 405
370 void ProxyResolvingClientSocket::CloseTransportSocket() { 406 void ProxyResolvingClientSocket::CloseTransportSocket() {
371 if (transport_.get() && transport_->socket()) 407 if (transport_.get() && transport_->socket())
372 transport_->socket()->Disconnect(); 408 transport_->socket()->Disconnect();
373 transport_.reset(); 409 transport_.reset();
374 } 410 }
375 411
376 } // namespace notifier 412 } // namespace notifier
OLDNEW
« no previous file with comments | « jingle/notifier/base/proxy_resolving_client_socket.h ('k') | net/curvecp/client_packetizer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698