OLD | NEW |
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/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "googleurl/src/gurl.h" | 10 #include "googleurl/src/gurl.h" |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 // If the connection fails, try another proxy. | 183 // If the connection fails, try another proxy. |
184 status = ReconsiderProxyAfterError(status); | 184 status = ReconsiderProxyAfterError(status); |
185 // ReconsiderProxyAfterError either returns an error (in which case it is | 185 // ReconsiderProxyAfterError either returns an error (in which case it is |
186 // not reconsidering a proxy) or returns ERR_IO_PENDING if it is considering | 186 // not reconsidering a proxy) or returns ERR_IO_PENDING if it is considering |
187 // another proxy. | 187 // another proxy. |
188 DCHECK_NE(status, net::OK); | 188 DCHECK_NE(status, net::OK); |
189 if (status == net::ERR_IO_PENDING) | 189 if (status == net::ERR_IO_PENDING) |
190 // Proxy reconsideration pending. Return. | 190 // Proxy reconsideration pending. Return. |
191 return; | 191 return; |
192 CloseTransportSocket(); | 192 CloseTransportSocket(); |
| 193 } else { |
| 194 ReportSuccessfulProxyConnection(); |
193 } | 195 } |
194 RunUserConnectCallback(status); | 196 RunUserConnectCallback(status); |
195 } | 197 } |
196 | 198 |
197 // TODO(sanjeevr): This has largely been copied from | 199 // TODO(sanjeevr): This has largely been copied from |
198 // HttpStreamFactoryImpl::Job::ReconsiderProxyAfterError. This should be | 200 // HttpStreamFactoryImpl::Job::ReconsiderProxyAfterError. This should be |
199 // refactored into some common place. | 201 // refactored into some common place. |
200 // This method reconsiders the proxy on certain errors. If it does reconsider | 202 // This method reconsiders the proxy on certain errors. If it does reconsider |
201 // a proxy it always returns ERR_IO_PENDING and posts a call to | 203 // a proxy it always returns ERR_IO_PENDING and posts a call to |
202 // ProcessProxyResolveDone with the result of the reconsideration. | 204 // ProcessProxyResolveDone with the result of the reconsideration. |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 FROM_HERE, | 269 FROM_HERE, |
268 scoped_runnable_method_factory_.NewRunnableMethod( | 270 scoped_runnable_method_factory_.NewRunnableMethod( |
269 &ProxyResolvingClientSocket::ProcessProxyResolveDone, rv)); | 271 &ProxyResolvingClientSocket::ProcessProxyResolveDone, rv)); |
270 // Since we potentially have another try to go (trying the direct connect) | 272 // Since we potentially have another try to go (trying the direct connect) |
271 // set the return code code to ERR_IO_PENDING. | 273 // set the return code code to ERR_IO_PENDING. |
272 rv = net::ERR_IO_PENDING; | 274 rv = net::ERR_IO_PENDING; |
273 } | 275 } |
274 return rv; | 276 return rv; |
275 } | 277 } |
276 | 278 |
| 279 void ProxyResolvingClientSocket::ReportSuccessfulProxyConnection() { |
| 280 network_session_->proxy_service()->ReportSuccess(proxy_info_); |
| 281 } |
| 282 |
277 void ProxyResolvingClientSocket::Disconnect() { | 283 void ProxyResolvingClientSocket::Disconnect() { |
278 CloseTransportSocket(); | 284 CloseTransportSocket(); |
279 if (pac_request_) | 285 if (pac_request_) |
280 network_session_->proxy_service()->CancelPacRequest(pac_request_); | 286 network_session_->proxy_service()->CancelPacRequest(pac_request_); |
281 user_connect_callback_ = NULL; | 287 user_connect_callback_ = NULL; |
282 } | 288 } |
283 | 289 |
284 bool ProxyResolvingClientSocket::IsConnected() const { | 290 bool ProxyResolvingClientSocket::IsConnected() const { |
285 if (!transport_.get() || !transport_->socket()) | 291 if (!transport_.get() || !transport_->socket()) |
286 return false; | 292 return false; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 return base::TimeDelta::FromMicroseconds(-1); | 364 return base::TimeDelta::FromMicroseconds(-1); |
359 } | 365 } |
360 | 366 |
361 void ProxyResolvingClientSocket::CloseTransportSocket() { | 367 void ProxyResolvingClientSocket::CloseTransportSocket() { |
362 if (transport_.get() && transport_->socket()) | 368 if (transport_.get() && transport_->socket()) |
363 transport_->socket()->Disconnect(); | 369 transport_->socket()->Disconnect(); |
364 transport_.reset(); | 370 transport_.reset(); |
365 } | 371 } |
366 | 372 |
367 } // namespace notifier | 373 } // namespace notifier |
OLD | NEW |