| 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 // ClientSocketPoolManager manages access to all ClientSocketPools. It's a | 5 // ClientSocketPoolManager manages access to all ClientSocketPools. It's a |
| 6 // simple container for all of them. Most importantly, it handles the lifetime | 6 // simple container for all of them. Most importantly, it handles the lifetime |
| 7 // and destruction order properly. | 7 // and destruction order properly. |
| 8 | 8 |
| 9 #include "net/socket/client_socket_pool_manager.h" | 9 #include "net/socket/client_socket_pool_manager.h" |
| 10 | 10 |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 ClientSocketPoolManager::ClientSocketPoolManager( | 255 ClientSocketPoolManager::ClientSocketPoolManager( |
| 256 NetLog* net_log, | 256 NetLog* net_log, |
| 257 ClientSocketFactory* socket_factory, | 257 ClientSocketFactory* socket_factory, |
| 258 HostResolver* host_resolver, | 258 HostResolver* host_resolver, |
| 259 CertVerifier* cert_verifier, | 259 CertVerifier* cert_verifier, |
| 260 OriginBoundCertService* origin_bound_cert_service, | 260 OriginBoundCertService* origin_bound_cert_service, |
| 261 DnsRRResolver* dnsrr_resolver, | 261 DnsRRResolver* dnsrr_resolver, |
| 262 DnsCertProvenanceChecker* dns_cert_checker, | 262 DnsCertProvenanceChecker* dns_cert_checker, |
| 263 SSLHostInfoFactory* ssl_host_info_factory, | 263 SSLHostInfoFactory* ssl_host_info_factory, |
| 264 ProxyService* proxy_service, | 264 ProxyService* proxy_service, |
| 265 SSLConfigService* ssl_config_service) | 265 SSLConfigService* ssl_config_service, |
| 266 bool use_cleanup_timer) |
| 266 : net_log_(net_log), | 267 : net_log_(net_log), |
| 267 socket_factory_(socket_factory), | 268 socket_factory_(socket_factory), |
| 268 host_resolver_(host_resolver), | 269 host_resolver_(host_resolver), |
| 269 cert_verifier_(cert_verifier), | 270 cert_verifier_(cert_verifier), |
| 270 origin_bound_cert_service_(origin_bound_cert_service), | 271 origin_bound_cert_service_(origin_bound_cert_service), |
| 271 dnsrr_resolver_(dnsrr_resolver), | 272 dnsrr_resolver_(dnsrr_resolver), |
| 272 dns_cert_checker_(dns_cert_checker), | 273 dns_cert_checker_(dns_cert_checker), |
| 273 ssl_host_info_factory_(ssl_host_info_factory), | 274 ssl_host_info_factory_(ssl_host_info_factory), |
| 274 proxy_service_(proxy_service), | 275 proxy_service_(proxy_service), |
| 275 ssl_config_service_(ssl_config_service), | 276 ssl_config_service_(ssl_config_service), |
| 277 options_(use_cleanup_timer), |
| 276 transport_pool_histograms_("TCP"), | 278 transport_pool_histograms_("TCP"), |
| 277 transport_socket_pool_(new TransportClientSocketPool( | 279 transport_socket_pool_(new TransportClientSocketPool( |
| 278 g_max_sockets_per_pool, g_max_sockets_per_group, | 280 g_max_sockets_per_pool, g_max_sockets_per_group, |
| 279 &transport_pool_histograms_, | 281 &transport_pool_histograms_, |
| 280 host_resolver, | 282 host_resolver, |
| 281 socket_factory_, | 283 socket_factory_, |
| 282 net_log)), | 284 net_log, |
| 285 options_)), |
| 283 ssl_pool_histograms_("SSL2"), | 286 ssl_pool_histograms_("SSL2"), |
| 284 ssl_socket_pool_(new SSLClientSocketPool( | 287 ssl_socket_pool_(new SSLClientSocketPool( |
| 285 g_max_sockets_per_pool, g_max_sockets_per_group, | 288 g_max_sockets_per_pool, g_max_sockets_per_group, |
| 286 &ssl_pool_histograms_, | 289 &ssl_pool_histograms_, |
| 287 host_resolver, | 290 host_resolver, |
| 288 cert_verifier, | 291 cert_verifier, |
| 289 origin_bound_cert_service, | 292 origin_bound_cert_service, |
| 290 dnsrr_resolver, | 293 dnsrr_resolver, |
| 291 dns_cert_checker, | 294 dns_cert_checker, |
| 292 ssl_host_info_factory, | 295 ssl_host_info_factory, |
| 293 socket_factory, | 296 socket_factory, |
| 294 transport_socket_pool_.get(), | 297 transport_socket_pool_.get(), |
| 295 NULL /* no socks proxy */, | 298 NULL /* no socks proxy */, |
| 296 NULL /* no http proxy */, | 299 NULL /* no http proxy */, |
| 297 ssl_config_service, | 300 ssl_config_service, |
| 298 net_log)), | 301 net_log, |
| 302 options_)), |
| 303 |
| 299 transport_for_socks_pool_histograms_("TCPforSOCKS"), | 304 transport_for_socks_pool_histograms_("TCPforSOCKS"), |
| 300 socks_pool_histograms_("SOCK"), | 305 socks_pool_histograms_("SOCK"), |
| 301 transport_for_http_proxy_pool_histograms_("TCPforHTTPProxy"), | 306 transport_for_http_proxy_pool_histograms_("TCPforHTTPProxy"), |
| 302 transport_for_https_proxy_pool_histograms_("TCPforHTTPSProxy"), | 307 transport_for_https_proxy_pool_histograms_("TCPforHTTPSProxy"), |
| 303 ssl_for_https_proxy_pool_histograms_("SSLforHTTPSProxy"), | 308 ssl_for_https_proxy_pool_histograms_("SSLforHTTPSProxy"), |
| 304 http_proxy_pool_histograms_("HTTPProxy"), | 309 http_proxy_pool_histograms_("HTTPProxy"), |
| 305 ssl_socket_pool_for_proxies_histograms_("SSLForProxies") { | 310 ssl_socket_pool_for_proxies_histograms_("SSLForProxies") { |
| 306 CertDatabase::AddObserver(this); | 311 CertDatabase::AddObserver(this); |
| 307 } | 312 } |
| 308 | 313 |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 421 | 426 |
| 422 std::pair<TransportSocketPoolMap::iterator, bool> tcp_ret = | 427 std::pair<TransportSocketPoolMap::iterator, bool> tcp_ret = |
| 423 transport_socket_pools_for_socks_proxies_.insert( | 428 transport_socket_pools_for_socks_proxies_.insert( |
| 424 std::make_pair( | 429 std::make_pair( |
| 425 socks_proxy, | 430 socks_proxy, |
| 426 new TransportClientSocketPool( | 431 new TransportClientSocketPool( |
| 427 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | 432 g_max_sockets_per_proxy_server, g_max_sockets_per_group, |
| 428 &transport_for_socks_pool_histograms_, | 433 &transport_for_socks_pool_histograms_, |
| 429 host_resolver_, | 434 host_resolver_, |
| 430 socket_factory_, | 435 socket_factory_, |
| 431 net_log_))); | 436 net_log_, |
| 437 options_))); |
| 432 DCHECK(tcp_ret.second); | 438 DCHECK(tcp_ret.second); |
| 433 | 439 |
| 434 std::pair<SOCKSSocketPoolMap::iterator, bool> ret = | 440 std::pair<SOCKSSocketPoolMap::iterator, bool> ret = |
| 435 socks_socket_pools_.insert( | 441 socks_socket_pools_.insert( |
| 436 std::make_pair(socks_proxy, new SOCKSClientSocketPool( | 442 std::make_pair(socks_proxy, new SOCKSClientSocketPool( |
| 437 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | 443 g_max_sockets_per_proxy_server, g_max_sockets_per_group, |
| 438 &socks_pool_histograms_, | 444 &socks_pool_histograms_, |
| 439 host_resolver_, | 445 host_resolver_, |
| 440 tcp_ret.first->second, | 446 tcp_ret.first->second, |
| 441 net_log_))); | 447 net_log_, |
| 448 options_))); |
| 442 | 449 |
| 443 return ret.first->second; | 450 return ret.first->second; |
| 444 } | 451 } |
| 445 | 452 |
| 446 HttpProxyClientSocketPool* ClientSocketPoolManager::GetSocketPoolForHTTPProxy( | 453 HttpProxyClientSocketPool* ClientSocketPoolManager::GetSocketPoolForHTTPProxy( |
| 447 const HostPortPair& http_proxy) { | 454 const HostPortPair& http_proxy) { |
| 448 HTTPProxySocketPoolMap::const_iterator it = | 455 HTTPProxySocketPoolMap::const_iterator it = |
| 449 http_proxy_socket_pools_.find(http_proxy); | 456 http_proxy_socket_pools_.find(http_proxy); |
| 450 if (it != http_proxy_socket_pools_.end()) { | 457 if (it != http_proxy_socket_pools_.end()) { |
| 451 DCHECK(ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy)); | 458 DCHECK(ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy)); |
| 452 DCHECK(ContainsKey(transport_socket_pools_for_https_proxies_, http_proxy)); | 459 DCHECK(ContainsKey(transport_socket_pools_for_https_proxies_, http_proxy)); |
| 453 DCHECK(ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy)); | 460 DCHECK(ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy)); |
| 454 return it->second; | 461 return it->second; |
| 455 } | 462 } |
| 456 | 463 |
| 457 DCHECK(!ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy)); | 464 DCHECK(!ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy)); |
| 458 DCHECK(!ContainsKey(transport_socket_pools_for_https_proxies_, http_proxy)); | 465 DCHECK(!ContainsKey(transport_socket_pools_for_https_proxies_, http_proxy)); |
| 459 DCHECK(!ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy)); | 466 DCHECK(!ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy)); |
| 460 | 467 |
| 461 std::pair<TransportSocketPoolMap::iterator, bool> tcp_http_ret = | 468 std::pair<TransportSocketPoolMap::iterator, bool> tcp_http_ret = |
| 462 transport_socket_pools_for_http_proxies_.insert( | 469 transport_socket_pools_for_http_proxies_.insert( |
| 463 std::make_pair( | 470 std::make_pair( |
| 464 http_proxy, | 471 http_proxy, |
| 465 new TransportClientSocketPool( | 472 new TransportClientSocketPool( |
| 466 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | 473 g_max_sockets_per_proxy_server, g_max_sockets_per_group, |
| 467 &transport_for_http_proxy_pool_histograms_, | 474 &transport_for_http_proxy_pool_histograms_, |
| 468 host_resolver_, | 475 host_resolver_, |
| 469 socket_factory_, | 476 socket_factory_, |
| 470 net_log_))); | 477 net_log_, |
| 478 options_))); |
| 471 DCHECK(tcp_http_ret.second); | 479 DCHECK(tcp_http_ret.second); |
| 472 | 480 |
| 473 std::pair<TransportSocketPoolMap::iterator, bool> tcp_https_ret = | 481 std::pair<TransportSocketPoolMap::iterator, bool> tcp_https_ret = |
| 474 transport_socket_pools_for_https_proxies_.insert( | 482 transport_socket_pools_for_https_proxies_.insert( |
| 475 std::make_pair( | 483 std::make_pair( |
| 476 http_proxy, | 484 http_proxy, |
| 477 new TransportClientSocketPool( | 485 new TransportClientSocketPool( |
| 478 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | 486 g_max_sockets_per_proxy_server, g_max_sockets_per_group, |
| 479 &transport_for_https_proxy_pool_histograms_, | 487 &transport_for_https_proxy_pool_histograms_, |
| 480 host_resolver_, | 488 host_resolver_, |
| 481 socket_factory_, | 489 socket_factory_, |
| 482 net_log_))); | 490 net_log_, |
| 491 options_))); |
| 483 DCHECK(tcp_https_ret.second); | 492 DCHECK(tcp_https_ret.second); |
| 484 | 493 |
| 485 std::pair<SSLSocketPoolMap::iterator, bool> ssl_https_ret = | 494 std::pair<SSLSocketPoolMap::iterator, bool> ssl_https_ret = |
| 486 ssl_socket_pools_for_https_proxies_.insert( | 495 ssl_socket_pools_for_https_proxies_.insert( |
| 487 std::make_pair( | 496 std::make_pair( |
| 488 http_proxy, | 497 http_proxy, |
| 489 new SSLClientSocketPool( | 498 new SSLClientSocketPool( |
| 490 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | 499 g_max_sockets_per_proxy_server, g_max_sockets_per_group, |
| 491 &ssl_for_https_proxy_pool_histograms_, | 500 &ssl_for_https_proxy_pool_histograms_, |
| 492 host_resolver_, | 501 host_resolver_, |
| 493 cert_verifier_, | 502 cert_verifier_, |
| 494 origin_bound_cert_service_, | 503 origin_bound_cert_service_, |
| 495 dnsrr_resolver_, | 504 dnsrr_resolver_, |
| 496 dns_cert_checker_, | 505 dns_cert_checker_, |
| 497 ssl_host_info_factory_, | 506 ssl_host_info_factory_, |
| 498 socket_factory_, | 507 socket_factory_, |
| 499 tcp_https_ret.first->second /* https proxy */, | 508 tcp_https_ret.first->second /* https proxy */, |
| 500 NULL /* no socks proxy */, | 509 NULL /* no socks proxy */, |
| 501 NULL /* no http proxy */, | 510 NULL /* no http proxy */, |
| 502 ssl_config_service_, net_log_))); | 511 ssl_config_service_, |
| 512 net_log_, |
| 513 options_))); |
| 503 DCHECK(tcp_https_ret.second); | 514 DCHECK(tcp_https_ret.second); |
| 504 | 515 |
| 505 std::pair<HTTPProxySocketPoolMap::iterator, bool> ret = | 516 std::pair<HTTPProxySocketPoolMap::iterator, bool> ret = |
| 506 http_proxy_socket_pools_.insert( | 517 http_proxy_socket_pools_.insert( |
| 507 std::make_pair( | 518 std::make_pair( |
| 508 http_proxy, | 519 http_proxy, |
| 509 new HttpProxyClientSocketPool( | 520 new HttpProxyClientSocketPool( |
| 510 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | 521 g_max_sockets_per_proxy_server, g_max_sockets_per_group, |
| 511 &http_proxy_pool_histograms_, | 522 &http_proxy_pool_histograms_, |
| 512 host_resolver_, | 523 host_resolver_, |
| 513 tcp_http_ret.first->second, | 524 tcp_http_ret.first->second, |
| 514 ssl_https_ret.first->second, | 525 ssl_https_ret.first->second, |
| 515 net_log_))); | 526 net_log_, |
| 527 options_))); |
| 516 | 528 |
| 517 return ret.first->second; | 529 return ret.first->second; |
| 518 } | 530 } |
| 519 | 531 |
| 520 SSLClientSocketPool* ClientSocketPoolManager::GetSocketPoolForSSLWithProxy( | 532 SSLClientSocketPool* ClientSocketPoolManager::GetSocketPoolForSSLWithProxy( |
| 521 const HostPortPair& proxy_server) { | 533 const HostPortPair& proxy_server) { |
| 522 SSLSocketPoolMap::const_iterator it = | 534 SSLSocketPoolMap::const_iterator it = |
| 523 ssl_socket_pools_for_proxies_.find(proxy_server); | 535 ssl_socket_pools_for_proxies_.find(proxy_server); |
| 524 if (it != ssl_socket_pools_for_proxies_.end()) | 536 if (it != ssl_socket_pools_for_proxies_.end()) |
| 525 return it->second; | 537 return it->second; |
| 526 | 538 |
| 527 SSLClientSocketPool* new_pool = new SSLClientSocketPool( | 539 SSLClientSocketPool* new_pool = new SSLClientSocketPool( |
| 528 g_max_sockets_per_proxy_server, g_max_sockets_per_group, | 540 g_max_sockets_per_proxy_server, g_max_sockets_per_group, |
| 529 &ssl_pool_histograms_, | 541 &ssl_pool_histograms_, |
| 530 host_resolver_, | 542 host_resolver_, |
| 531 cert_verifier_, | 543 cert_verifier_, |
| 532 origin_bound_cert_service_, | 544 origin_bound_cert_service_, |
| 533 dnsrr_resolver_, | 545 dnsrr_resolver_, |
| 534 dns_cert_checker_, | 546 dns_cert_checker_, |
| 535 ssl_host_info_factory_, | 547 ssl_host_info_factory_, |
| 536 socket_factory_, | 548 socket_factory_, |
| 537 NULL, /* no tcp pool, we always go through a proxy */ | 549 NULL, /* no tcp pool, we always go through a proxy */ |
| 538 GetSocketPoolForSOCKSProxy(proxy_server), | 550 GetSocketPoolForSOCKSProxy(proxy_server), |
| 539 GetSocketPoolForHTTPProxy(proxy_server), | 551 GetSocketPoolForHTTPProxy(proxy_server), |
| 540 ssl_config_service_, | 552 ssl_config_service_, |
| 541 net_log_); | 553 net_log_, |
| 542 | 554 options_); |
| 543 std::pair<SSLSocketPoolMap::iterator, bool> ret = | 555 std::pair<SSLSocketPoolMap::iterator, bool> ret = |
| 544 ssl_socket_pools_for_proxies_.insert(std::make_pair(proxy_server, | 556 ssl_socket_pools_for_proxies_.insert(std::make_pair(proxy_server, |
| 545 new_pool)); | 557 new_pool)); |
| 546 | 558 |
| 547 return ret.first->second; | 559 return ret.first->second; |
| 548 } | 560 } |
| 549 | 561 |
| 550 // static | 562 // static |
| 551 void ClientSocketPoolManager::set_max_sockets_per_pool(int socket_count) { | 563 void ClientSocketPoolManager::set_max_sockets_per_pool(int socket_count) { |
| 552 DCHECK_LT(0, socket_count); | 564 DCHECK_LT(0, socket_count); |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 722 ssl_config_for_proxy, | 734 ssl_config_for_proxy, |
| 723 false, | 735 false, |
| 724 net_log, | 736 net_log, |
| 725 num_preconnect_streams, | 737 num_preconnect_streams, |
| 726 NULL, | 738 NULL, |
| 727 NULL); | 739 NULL); |
| 728 } | 740 } |
| 729 | 741 |
| 730 | 742 |
| 731 } // namespace net | 743 } // namespace net |
| OLD | NEW |