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/socket/ssl_client_socket_pool.h" | 5 #include "net/socket/ssl_client_socket_pool.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 return LOAD_STATE_SSL_HANDSHAKE; | 116 return LOAD_STATE_SSL_HANDSHAKE; |
117 default: | 117 default: |
118 NOTREACHED(); | 118 NOTREACHED(); |
119 return LOAD_STATE_IDLE; | 119 return LOAD_STATE_IDLE; |
120 } | 120 } |
121 } | 121 } |
122 | 122 |
123 void SSLConnectJob::GetAdditionalErrorState(ClientSocketHandle* handle) { | 123 void SSLConnectJob::GetAdditionalErrorState(ClientSocketHandle* handle) { |
124 // Headers in |error_response_info_| indicate a proxy tunnel setup | 124 // Headers in |error_response_info_| indicate a proxy tunnel setup |
125 // problem. See DoTunnelConnectComplete. | 125 // problem. See DoTunnelConnectComplete. |
126 if (error_response_info_.headers) { | 126 if (error_response_info_.headers.get()) { |
127 handle->set_pending_http_proxy_connection( | 127 handle->set_pending_http_proxy_connection( |
128 transport_socket_handle_.release()); | 128 transport_socket_handle_.release()); |
129 } | 129 } |
130 handle->set_ssl_error_response_info(error_response_info_); | 130 handle->set_ssl_error_response_info(error_response_info_); |
131 if (!connect_timing_.ssl_start.is_null()) | 131 if (!connect_timing_.ssl_start.is_null()) |
132 handle->set_is_ssl_error(true); | 132 handle->set_is_ssl_error(true); |
133 } | 133 } |
134 | 134 |
135 void SSLConnectJob::OnIOComplete(int result) { | 135 void SSLConnectJob::OnIOComplete(int result) { |
136 int rv = DoLoop(result); | 136 int rv = DoLoop(result); |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 base::TimeDelta::FromMinutes(1), | 376 base::TimeDelta::FromMinutes(1), |
377 100); | 377 100); |
378 } | 378 } |
379 } | 379 } |
380 } | 380 } |
381 | 381 |
382 if (result == OK || IsCertificateError(result)) { | 382 if (result == OK || IsCertificateError(result)) { |
383 set_socket(ssl_socket_.release()); | 383 set_socket(ssl_socket_.release()); |
384 } else if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) { | 384 } else if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) { |
385 error_response_info_.cert_request_info = new SSLCertRequestInfo; | 385 error_response_info_.cert_request_info = new SSLCertRequestInfo; |
386 ssl_socket_->GetSSLCertRequestInfo(error_response_info_.cert_request_info); | 386 ssl_socket_->GetSSLCertRequestInfo( |
| 387 error_response_info_.cert_request_info.get()); |
387 } | 388 } |
388 | 389 |
389 return result; | 390 return result; |
390 } | 391 } |
391 | 392 |
392 int SSLConnectJob::ConnectInternal() { | 393 int SSLConnectJob::ConnectInternal() { |
393 switch (params_->proxy()) { | 394 switch (params_->proxy()) { |
394 case ProxyServer::SCHEME_DIRECT: | 395 case ProxyServer::SCHEME_DIRECT: |
395 next_state_ = STATE_TRANSPORT_CONNECT; | 396 next_state_ = STATE_TRANSPORT_CONNECT; |
396 break; | 397 break; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
468 http_proxy_pool, | 469 http_proxy_pool, |
469 client_socket_factory, | 470 client_socket_factory, |
470 host_resolver, | 471 host_resolver, |
471 SSLClientSocketContext( | 472 SSLClientSocketContext( |
472 cert_verifier, | 473 cert_verifier, |
473 server_bound_cert_service, | 474 server_bound_cert_service, |
474 transport_security_state, | 475 transport_security_state, |
475 ssl_session_cache_shard), | 476 ssl_session_cache_shard), |
476 net_log)), | 477 net_log)), |
477 ssl_config_service_(ssl_config_service) { | 478 ssl_config_service_(ssl_config_service) { |
478 if (ssl_config_service_) | 479 if (ssl_config_service_.get()) |
479 ssl_config_service_->AddObserver(this); | 480 ssl_config_service_->AddObserver(this); |
480 if (transport_pool_) | 481 if (transport_pool_) |
481 transport_pool_->AddLayeredPool(this); | 482 transport_pool_->AddLayeredPool(this); |
482 if (socks_pool_) | 483 if (socks_pool_) |
483 socks_pool_->AddLayeredPool(this); | 484 socks_pool_->AddLayeredPool(this); |
484 if (http_proxy_pool_) | 485 if (http_proxy_pool_) |
485 http_proxy_pool_->AddLayeredPool(this); | 486 http_proxy_pool_->AddLayeredPool(this); |
486 } | 487 } |
487 | 488 |
488 SSLClientSocketPool::~SSLClientSocketPool() { | 489 SSLClientSocketPool::~SSLClientSocketPool() { |
489 if (http_proxy_pool_) | 490 if (http_proxy_pool_) |
490 http_proxy_pool_->RemoveLayeredPool(this); | 491 http_proxy_pool_->RemoveLayeredPool(this); |
491 if (socks_pool_) | 492 if (socks_pool_) |
492 socks_pool_->RemoveLayeredPool(this); | 493 socks_pool_->RemoveLayeredPool(this); |
493 if (transport_pool_) | 494 if (transport_pool_) |
494 transport_pool_->RemoveLayeredPool(this); | 495 transport_pool_->RemoveLayeredPool(this); |
495 if (ssl_config_service_) | 496 if (ssl_config_service_.get()) |
496 ssl_config_service_->RemoveObserver(this); | 497 ssl_config_service_->RemoveObserver(this); |
497 } | 498 } |
498 | 499 |
499 ConnectJob* SSLClientSocketPool::SSLConnectJobFactory::NewConnectJob( | 500 ConnectJob* SSLClientSocketPool::SSLConnectJobFactory::NewConnectJob( |
500 const std::string& group_name, | 501 const std::string& group_name, |
501 const PoolBase::Request& request, | 502 const PoolBase::Request& request, |
502 ConnectJob::Delegate* delegate) const { | 503 ConnectJob::Delegate* delegate) const { |
503 return new SSLConnectJob(group_name, request.params(), ConnectionTimeout(), | 504 return new SSLConnectJob(group_name, request.params(), ConnectionTimeout(), |
504 transport_pool_, socks_pool_, http_proxy_pool_, | 505 transport_pool_, socks_pool_, http_proxy_pool_, |
505 client_socket_factory_, host_resolver_, | 506 client_socket_factory_, host_resolver_, |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 FlushWithError(ERR_NETWORK_CHANGED); | 622 FlushWithError(ERR_NETWORK_CHANGED); |
622 } | 623 } |
623 | 624 |
624 bool SSLClientSocketPool::CloseOneIdleConnection() { | 625 bool SSLClientSocketPool::CloseOneIdleConnection() { |
625 if (base_.CloseOneIdleSocket()) | 626 if (base_.CloseOneIdleSocket()) |
626 return true; | 627 return true; |
627 return base_.CloseOneIdleConnectionInLayeredPool(); | 628 return base_.CloseOneIdleConnectionInLayeredPool(); |
628 } | 629 } |
629 | 630 |
630 } // namespace net | 631 } // namespace net |
OLD | NEW |