| OLD | NEW |
| 1 // Copyright (c) 2012 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/http/http_proxy_client_socket_pool.h" | 5 #include "net/http/http_proxy_client_socket_pool.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 | 30 |
| 31 HttpProxySocketParams::HttpProxySocketParams( | 31 HttpProxySocketParams::HttpProxySocketParams( |
| 32 const scoped_refptr<TransportSocketParams>& transport_params, | 32 const scoped_refptr<TransportSocketParams>& transport_params, |
| 33 const scoped_refptr<SSLSocketParams>& ssl_params, | 33 const scoped_refptr<SSLSocketParams>& ssl_params, |
| 34 const GURL& request_url, | 34 const GURL& request_url, |
| 35 const std::string& user_agent, | 35 const std::string& user_agent, |
| 36 const HostPortPair& endpoint, | 36 const HostPortPair& endpoint, |
| 37 HttpAuthCache* http_auth_cache, | 37 HttpAuthCache* http_auth_cache, |
| 38 HttpAuthHandlerFactory* http_auth_handler_factory, | 38 HttpAuthHandlerFactory* http_auth_handler_factory, |
| 39 SpdySessionPool* spdy_session_pool, | 39 SpdySessionPool* spdy_session_pool, |
| 40 bool tunnel) | 40 bool tunnel, |
| 41 ProxyDelegate* proxy_delegate) |
| 41 : transport_params_(transport_params), | 42 : transport_params_(transport_params), |
| 42 ssl_params_(ssl_params), | 43 ssl_params_(ssl_params), |
| 43 spdy_session_pool_(spdy_session_pool), | 44 spdy_session_pool_(spdy_session_pool), |
| 44 request_url_(request_url), | 45 request_url_(request_url), |
| 45 user_agent_(user_agent), | 46 user_agent_(user_agent), |
| 46 endpoint_(endpoint), | 47 endpoint_(endpoint), |
| 47 http_auth_cache_(tunnel ? http_auth_cache : NULL), | 48 http_auth_cache_(tunnel ? http_auth_cache : NULL), |
| 48 http_auth_handler_factory_(tunnel ? http_auth_handler_factory : NULL), | 49 http_auth_handler_factory_(tunnel ? http_auth_handler_factory : NULL), |
| 49 tunnel_(tunnel) { | 50 tunnel_(tunnel), |
| 51 proxy_delegate_(proxy_delegate) { |
| 50 DCHECK((transport_params.get() == NULL && ssl_params.get() != NULL) || | 52 DCHECK((transport_params.get() == NULL && ssl_params.get() != NULL) || |
| 51 (transport_params.get() != NULL && ssl_params.get() == NULL)); | 53 (transport_params.get() != NULL && ssl_params.get() == NULL)); |
| 52 if (transport_params_.get()) { | 54 if (transport_params_.get()) { |
| 53 ignore_limits_ = transport_params->ignore_limits(); | 55 ignore_limits_ = transport_params->ignore_limits(); |
| 54 } else { | 56 } else { |
| 55 ignore_limits_ = ssl_params->ignore_limits(); | 57 ignore_limits_ = ssl_params->ignore_limits(); |
| 56 } | 58 } |
| 57 } | 59 } |
| 58 | 60 |
| 59 const HostResolver::RequestInfo& HttpProxySocketParams::destination() const { | 61 const HostResolver::RequestInfo& HttpProxySocketParams::destination() const { |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 new HttpProxyClientSocket(transport_socket_handle_.release(), | 286 new HttpProxyClientSocket(transport_socket_handle_.release(), |
| 285 params_->request_url(), | 287 params_->request_url(), |
| 286 params_->user_agent(), | 288 params_->user_agent(), |
| 287 params_->endpoint(), | 289 params_->endpoint(), |
| 288 proxy_server, | 290 proxy_server, |
| 289 params_->http_auth_cache(), | 291 params_->http_auth_cache(), |
| 290 params_->http_auth_handler_factory(), | 292 params_->http_auth_handler_factory(), |
| 291 params_->tunnel(), | 293 params_->tunnel(), |
| 292 using_spdy_, | 294 using_spdy_, |
| 293 protocol_negotiated_, | 295 protocol_negotiated_, |
| 296 params_->proxy_delegate(), |
| 294 params_->ssl_params().get() != NULL)); | 297 params_->ssl_params().get() != NULL)); |
| 295 return transport_socket_->Connect(callback_); | 298 return transport_socket_->Connect(callback_); |
| 296 } | 299 } |
| 297 | 300 |
| 298 int HttpProxyConnectJob::DoHttpProxyConnectComplete(int result) { | 301 int HttpProxyConnectJob::DoHttpProxyConnectComplete(int result) { |
| 299 if (result == OK || result == ERR_PROXY_AUTH_REQUESTED || | 302 if (result == OK || result == ERR_PROXY_AUTH_REQUESTED || |
| 300 result == ERR_HTTPS_PROXY_TUNNEL_RESPONSE) { | 303 result == ERR_HTTPS_PROXY_TUNNEL_RESPONSE) { |
| 301 SetSocket(transport_socket_.PassAs<StreamSocket>()); | 304 SetSocket(transport_socket_.PassAs<StreamSocket>()); |
| 302 } | 305 } |
| 303 | 306 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 next_state_ = STATE_SSL_CONNECT; | 368 next_state_ = STATE_SSL_CONNECT; |
| 366 } | 369 } |
| 367 return DoLoop(OK); | 370 return DoLoop(OK); |
| 368 } | 371 } |
| 369 | 372 |
| 370 HttpProxyClientSocketPool:: | 373 HttpProxyClientSocketPool:: |
| 371 HttpProxyConnectJobFactory::HttpProxyConnectJobFactory( | 374 HttpProxyConnectJobFactory::HttpProxyConnectJobFactory( |
| 372 TransportClientSocketPool* transport_pool, | 375 TransportClientSocketPool* transport_pool, |
| 373 SSLClientSocketPool* ssl_pool, | 376 SSLClientSocketPool* ssl_pool, |
| 374 HostResolver* host_resolver, | 377 HostResolver* host_resolver, |
| 378 ProxyDelegate* proxy_delegate, |
| 375 NetLog* net_log) | 379 NetLog* net_log) |
| 376 : transport_pool_(transport_pool), | 380 : transport_pool_(transport_pool), |
| 377 ssl_pool_(ssl_pool), | 381 ssl_pool_(ssl_pool), |
| 378 host_resolver_(host_resolver), | 382 host_resolver_(host_resolver), |
| 383 proxy_delegate_(proxy_delegate), |
| 379 net_log_(net_log) { | 384 net_log_(net_log) { |
| 380 base::TimeDelta max_pool_timeout = base::TimeDelta(); | 385 base::TimeDelta max_pool_timeout = base::TimeDelta(); |
| 381 | 386 |
| 382 #if (defined(OS_ANDROID) || defined(OS_IOS)) && defined(SPDY_PROXY_AUTH_ORIGIN) | 387 #if (defined(OS_ANDROID) || defined(OS_IOS)) && defined(SPDY_PROXY_AUTH_ORIGIN) |
| 383 #else | 388 #else |
| 384 if (transport_pool_) | 389 if (transport_pool_) |
| 385 max_pool_timeout = transport_pool_->ConnectionTimeout(); | 390 max_pool_timeout = transport_pool_->ConnectionTimeout(); |
| 386 if (ssl_pool_) | 391 if (ssl_pool_) |
| 387 max_pool_timeout = std::max(max_pool_timeout, | 392 max_pool_timeout = std::max(max_pool_timeout, |
| 388 ssl_pool_->ConnectionTimeout()); | 393 ssl_pool_->ConnectionTimeout()); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 414 return timeout_; | 419 return timeout_; |
| 415 } | 420 } |
| 416 | 421 |
| 417 HttpProxyClientSocketPool::HttpProxyClientSocketPool( | 422 HttpProxyClientSocketPool::HttpProxyClientSocketPool( |
| 418 int max_sockets, | 423 int max_sockets, |
| 419 int max_sockets_per_group, | 424 int max_sockets_per_group, |
| 420 ClientSocketPoolHistograms* histograms, | 425 ClientSocketPoolHistograms* histograms, |
| 421 HostResolver* host_resolver, | 426 HostResolver* host_resolver, |
| 422 TransportClientSocketPool* transport_pool, | 427 TransportClientSocketPool* transport_pool, |
| 423 SSLClientSocketPool* ssl_pool, | 428 SSLClientSocketPool* ssl_pool, |
| 429 ProxyDelegate* proxy_delegate, |
| 424 NetLog* net_log) | 430 NetLog* net_log) |
| 425 : transport_pool_(transport_pool), | 431 : transport_pool_(transport_pool), |
| 426 ssl_pool_(ssl_pool), | 432 ssl_pool_(ssl_pool), |
| 427 base_(this, max_sockets, max_sockets_per_group, histograms, | 433 base_(this, max_sockets, max_sockets_per_group, histograms, |
| 428 ClientSocketPool::unused_idle_socket_timeout(), | 434 ClientSocketPool::unused_idle_socket_timeout(), |
| 429 ClientSocketPool::used_idle_socket_timeout(), | 435 ClientSocketPool::used_idle_socket_timeout(), |
| 430 new HttpProxyConnectJobFactory(transport_pool, | 436 new HttpProxyConnectJobFactory(transport_pool, |
| 431 ssl_pool, | 437 ssl_pool, |
| 432 host_resolver, | 438 host_resolver, |
| 439 proxy_delegate, |
| 433 net_log)) { | 440 net_log)) { |
| 434 // We should always have a |transport_pool_| except in unit tests. | 441 // We should always have a |transport_pool_| except in unit tests. |
| 435 if (transport_pool_) | 442 if (transport_pool_) |
| 436 base_.AddLowerLayeredPool(transport_pool_); | 443 base_.AddLowerLayeredPool(transport_pool_); |
| 437 if (ssl_pool_) | 444 if (ssl_pool_) |
| 438 base_.AddLowerLayeredPool(ssl_pool_); | 445 base_.AddLowerLayeredPool(ssl_pool_); |
| 439 } | 446 } |
| 440 | 447 |
| 441 HttpProxyClientSocketPool::~HttpProxyClientSocketPool() { | 448 HttpProxyClientSocketPool::~HttpProxyClientSocketPool() { |
| 442 } | 449 } |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 base_.RemoveHigherLayeredPool(higher_pool); | 548 base_.RemoveHigherLayeredPool(higher_pool); |
| 542 } | 549 } |
| 543 | 550 |
| 544 bool HttpProxyClientSocketPool::CloseOneIdleConnection() { | 551 bool HttpProxyClientSocketPool::CloseOneIdleConnection() { |
| 545 if (base_.CloseOneIdleSocket()) | 552 if (base_.CloseOneIdleSocket()) |
| 546 return true; | 553 return true; |
| 547 return base_.CloseOneIdleConnectionInHigherLayeredPool(); | 554 return base_.CloseOneIdleConnectionInHigherLayeredPool(); |
| 548 } | 555 } |
| 549 | 556 |
| 550 } // namespace net | 557 } // namespace net |
| OLD | NEW |