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

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

Issue 18796003: When an idle socket is added back to a socket pool, check for stalled jobs in lower pools (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync Created 7 years, 4 months 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 | Annotate | Revision Log
OLDNEW
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 492 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 const std::string& ssl_session_cache_shard, 503 const std::string& ssl_session_cache_shard,
504 ClientSocketFactory* client_socket_factory, 504 ClientSocketFactory* client_socket_factory,
505 TransportClientSocketPool* transport_pool, 505 TransportClientSocketPool* transport_pool,
506 SOCKSClientSocketPool* socks_pool, 506 SOCKSClientSocketPool* socks_pool,
507 HttpProxyClientSocketPool* http_proxy_pool, 507 HttpProxyClientSocketPool* http_proxy_pool,
508 SSLConfigService* ssl_config_service, 508 SSLConfigService* ssl_config_service,
509 NetLog* net_log) 509 NetLog* net_log)
510 : transport_pool_(transport_pool), 510 : transport_pool_(transport_pool),
511 socks_pool_(socks_pool), 511 socks_pool_(socks_pool),
512 http_proxy_pool_(http_proxy_pool), 512 http_proxy_pool_(http_proxy_pool),
513 base_(max_sockets, max_sockets_per_group, histograms, 513 base_(this, max_sockets, max_sockets_per_group, histograms,
514 ClientSocketPool::unused_idle_socket_timeout(), 514 ClientSocketPool::unused_idle_socket_timeout(),
515 ClientSocketPool::used_idle_socket_timeout(), 515 ClientSocketPool::used_idle_socket_timeout(),
516 new SSLConnectJobFactory(transport_pool, 516 new SSLConnectJobFactory(transport_pool,
517 socks_pool, 517 socks_pool,
518 http_proxy_pool, 518 http_proxy_pool,
519 client_socket_factory, 519 client_socket_factory,
520 host_resolver, 520 host_resolver,
521 SSLClientSocketContext( 521 SSLClientSocketContext(
522 cert_verifier, 522 cert_verifier,
523 server_bound_cert_service, 523 server_bound_cert_service,
524 transport_security_state, 524 transport_security_state,
525 ssl_session_cache_shard), 525 ssl_session_cache_shard),
526 net_log)), 526 net_log)),
527 ssl_config_service_(ssl_config_service) { 527 ssl_config_service_(ssl_config_service) {
528 if (ssl_config_service_.get()) 528 if (ssl_config_service_.get())
529 ssl_config_service_->AddObserver(this); 529 ssl_config_service_->AddObserver(this);
530 if (transport_pool_) 530 if (transport_pool_)
531 transport_pool_->AddLayeredPool(this); 531 base_.AddLowerLayeredPool(transport_pool_);
532 if (socks_pool_) 532 if (socks_pool_)
533 socks_pool_->AddLayeredPool(this); 533 base_.AddLowerLayeredPool(socks_pool_);
534 if (http_proxy_pool_) 534 if (http_proxy_pool_)
535 http_proxy_pool_->AddLayeredPool(this); 535 base_.AddLowerLayeredPool(http_proxy_pool_);
536 } 536 }
537 537
538 SSLClientSocketPool::~SSLClientSocketPool() { 538 SSLClientSocketPool::~SSLClientSocketPool() {
539 if (http_proxy_pool_)
540 http_proxy_pool_->RemoveLayeredPool(this);
541 if (socks_pool_)
542 socks_pool_->RemoveLayeredPool(this);
543 if (transport_pool_)
544 transport_pool_->RemoveLayeredPool(this);
545 if (ssl_config_service_.get()) 539 if (ssl_config_service_.get())
546 ssl_config_service_->RemoveObserver(this); 540 ssl_config_service_->RemoveObserver(this);
547 } 541 }
548 542
549 scoped_ptr<ConnectJob> 543 scoped_ptr<ConnectJob>
550 SSLClientSocketPool::SSLConnectJobFactory::NewConnectJob( 544 SSLClientSocketPool::SSLConnectJobFactory::NewConnectJob(
551 const std::string& group_name, 545 const std::string& group_name,
552 const PoolBase::Request& request, 546 const PoolBase::Request& request,
553 ConnectJob::Delegate* delegate) const { 547 ConnectJob::Delegate* delegate) const {
554 return scoped_ptr<ConnectJob>( 548 return scoped_ptr<ConnectJob>(
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 void SSLClientSocketPool::ReleaseSocket(const std::string& group_name, 589 void SSLClientSocketPool::ReleaseSocket(const std::string& group_name,
596 scoped_ptr<StreamSocket> socket, 590 scoped_ptr<StreamSocket> socket,
597 int id) { 591 int id) {
598 base_.ReleaseSocket(group_name, socket.Pass(), id); 592 base_.ReleaseSocket(group_name, socket.Pass(), id);
599 } 593 }
600 594
601 void SSLClientSocketPool::FlushWithError(int error) { 595 void SSLClientSocketPool::FlushWithError(int error) {
602 base_.FlushWithError(error); 596 base_.FlushWithError(error);
603 } 597 }
604 598
605 bool SSLClientSocketPool::IsStalled() const {
606 return base_.IsStalled() ||
607 (transport_pool_ && transport_pool_->IsStalled()) ||
608 (socks_pool_ && socks_pool_->IsStalled()) ||
609 (http_proxy_pool_ && http_proxy_pool_->IsStalled());
610 }
611
612 void SSLClientSocketPool::CloseIdleSockets() { 599 void SSLClientSocketPool::CloseIdleSockets() {
613 base_.CloseIdleSockets(); 600 base_.CloseIdleSockets();
614 } 601 }
615 602
616 int SSLClientSocketPool::IdleSocketCount() const { 603 int SSLClientSocketPool::IdleSocketCount() const {
617 return base_.idle_socket_count(); 604 return base_.idle_socket_count();
618 } 605 }
619 606
620 int SSLClientSocketPool::IdleSocketCountInGroup( 607 int SSLClientSocketPool::IdleSocketCountInGroup(
621 const std::string& group_name) const { 608 const std::string& group_name) const {
622 return base_.IdleSocketCountInGroup(group_name); 609 return base_.IdleSocketCountInGroup(group_name);
623 } 610 }
624 611
625 LoadState SSLClientSocketPool::GetLoadState( 612 LoadState SSLClientSocketPool::GetLoadState(
626 const std::string& group_name, const ClientSocketHandle* handle) const { 613 const std::string& group_name, const ClientSocketHandle* handle) const {
627 return base_.GetLoadState(group_name, handle); 614 return base_.GetLoadState(group_name, handle);
628 } 615 }
629 616
630 void SSLClientSocketPool::AddLayeredPool(LayeredPool* layered_pool) {
631 base_.AddLayeredPool(layered_pool);
632 }
633
634 void SSLClientSocketPool::RemoveLayeredPool(LayeredPool* layered_pool) {
635 base_.RemoveLayeredPool(layered_pool);
636 }
637
638 base::DictionaryValue* SSLClientSocketPool::GetInfoAsValue( 617 base::DictionaryValue* SSLClientSocketPool::GetInfoAsValue(
639 const std::string& name, 618 const std::string& name,
640 const std::string& type, 619 const std::string& type,
641 bool include_nested_pools) const { 620 bool include_nested_pools) const {
642 base::DictionaryValue* dict = base_.GetInfoAsValue(name, type); 621 base::DictionaryValue* dict = base_.GetInfoAsValue(name, type);
643 if (include_nested_pools) { 622 if (include_nested_pools) {
644 base::ListValue* list = new base::ListValue(); 623 base::ListValue* list = new base::ListValue();
645 if (transport_pool_) { 624 if (transport_pool_) {
646 list->Append(transport_pool_->GetInfoAsValue("transport_socket_pool", 625 list->Append(transport_pool_->GetInfoAsValue("transport_socket_pool",
647 "transport_socket_pool", 626 "transport_socket_pool",
(...skipping 15 matching lines...) Expand all
663 } 642 }
664 643
665 base::TimeDelta SSLClientSocketPool::ConnectionTimeout() const { 644 base::TimeDelta SSLClientSocketPool::ConnectionTimeout() const {
666 return base_.ConnectionTimeout(); 645 return base_.ConnectionTimeout();
667 } 646 }
668 647
669 ClientSocketPoolHistograms* SSLClientSocketPool::histograms() const { 648 ClientSocketPoolHistograms* SSLClientSocketPool::histograms() const {
670 return base_.histograms(); 649 return base_.histograms();
671 } 650 }
672 651
652 bool SSLClientSocketPool::IsStalled() const {
653 return base_.IsStalled();
654 }
655
656 void SSLClientSocketPool::AddHigherLayeredPool(HigherLayeredPool* higher_pool) {
657 base_.AddHigherLayeredPool(higher_pool);
658 }
659
660 void SSLClientSocketPool::RemoveHigherLayeredPool(
661 HigherLayeredPool* higher_pool) {
662 base_.RemoveHigherLayeredPool(higher_pool);
663 }
664
665 bool SSLClientSocketPool::CloseOneIdleConnection() {
666 if (base_.CloseOneIdleSocket())
667 return true;
668 return base_.CloseOneIdleConnectionInHigherLayeredPool();
669 }
670
673 void SSLClientSocketPool::OnSSLConfigChanged() { 671 void SSLClientSocketPool::OnSSLConfigChanged() {
674 FlushWithError(ERR_NETWORK_CHANGED); 672 FlushWithError(ERR_NETWORK_CHANGED);
675 } 673 }
676 674
677 bool SSLClientSocketPool::CloseOneIdleConnection() {
678 if (base_.CloseOneIdleSocket())
679 return true;
680 return base_.CloseOneIdleConnectionInLayeredPool();
681 }
682
683 } // namespace net 675 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698