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

Side by Side Diff: net/socket/client_socket_pool_manager.cc

Issue 8526006: Close idle sockets next time we are about to send data. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: code conventions Created 9 years, 1 month 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
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 // 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698