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

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: Update comments 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
« no previous file with comments | « net/socket/ssl_client_socket_pool.h ('k') | net/socket/transport_client_socket_pool.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 const std::string& ssl_session_cache_shard, 509 const std::string& ssl_session_cache_shard,
510 ClientSocketFactory* client_socket_factory, 510 ClientSocketFactory* client_socket_factory,
511 TransportClientSocketPool* transport_pool, 511 TransportClientSocketPool* transport_pool,
512 SOCKSClientSocketPool* socks_pool, 512 SOCKSClientSocketPool* socks_pool,
513 HttpProxyClientSocketPool* http_proxy_pool, 513 HttpProxyClientSocketPool* http_proxy_pool,
514 SSLConfigService* ssl_config_service, 514 SSLConfigService* ssl_config_service,
515 NetLog* net_log) 515 NetLog* net_log)
516 : transport_pool_(transport_pool), 516 : transport_pool_(transport_pool),
517 socks_pool_(socks_pool), 517 socks_pool_(socks_pool),
518 http_proxy_pool_(http_proxy_pool), 518 http_proxy_pool_(http_proxy_pool),
519 base_(max_sockets, max_sockets_per_group, histograms, 519 base_(this, max_sockets, max_sockets_per_group, histograms,
520 ClientSocketPool::unused_idle_socket_timeout(), 520 ClientSocketPool::unused_idle_socket_timeout(),
521 ClientSocketPool::used_idle_socket_timeout(), 521 ClientSocketPool::used_idle_socket_timeout(),
522 new SSLConnectJobFactory(transport_pool, 522 new SSLConnectJobFactory(transport_pool,
523 socks_pool, 523 socks_pool,
524 http_proxy_pool, 524 http_proxy_pool,
525 client_socket_factory, 525 client_socket_factory,
526 host_resolver, 526 host_resolver,
527 SSLClientSocketContext( 527 SSLClientSocketContext(
528 cert_verifier, 528 cert_verifier,
529 server_bound_cert_service, 529 server_bound_cert_service,
530 transport_security_state, 530 transport_security_state,
531 ssl_session_cache_shard), 531 ssl_session_cache_shard),
532 net_log)), 532 net_log)),
533 ssl_config_service_(ssl_config_service) { 533 ssl_config_service_(ssl_config_service) {
534 if (ssl_config_service_.get()) 534 if (ssl_config_service_.get())
535 ssl_config_service_->AddObserver(this); 535 ssl_config_service_->AddObserver(this);
536 if (transport_pool_) 536 if (transport_pool_)
537 transport_pool_->AddLayeredPool(this); 537 base_.AddLowerLayeredPool(transport_pool_);
538 if (socks_pool_) 538 if (socks_pool_)
539 socks_pool_->AddLayeredPool(this); 539 base_.AddLowerLayeredPool(socks_pool_);
540 if (http_proxy_pool_) 540 if (http_proxy_pool_)
541 http_proxy_pool_->AddLayeredPool(this); 541 base_.AddLowerLayeredPool(http_proxy_pool_);
542 } 542 }
543 543
544 SSLClientSocketPool::~SSLClientSocketPool() { 544 SSLClientSocketPool::~SSLClientSocketPool() {
545 if (http_proxy_pool_)
546 http_proxy_pool_->RemoveLayeredPool(this);
547 if (socks_pool_)
548 socks_pool_->RemoveLayeredPool(this);
549 if (transport_pool_)
550 transport_pool_->RemoveLayeredPool(this);
551 if (ssl_config_service_.get()) 545 if (ssl_config_service_.get())
552 ssl_config_service_->RemoveObserver(this); 546 ssl_config_service_->RemoveObserver(this);
553 } 547 }
554 548
555 scoped_ptr<ConnectJob> 549 scoped_ptr<ConnectJob>
556 SSLClientSocketPool::SSLConnectJobFactory::NewConnectJob( 550 SSLClientSocketPool::SSLConnectJobFactory::NewConnectJob(
557 const std::string& group_name, 551 const std::string& group_name,
558 const PoolBase::Request& request, 552 const PoolBase::Request& request,
559 ConnectJob::Delegate* delegate) const { 553 ConnectJob::Delegate* delegate) const {
560 return scoped_ptr<ConnectJob>( 554 return scoped_ptr<ConnectJob>(
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 void SSLClientSocketPool::ReleaseSocket(const std::string& group_name, 595 void SSLClientSocketPool::ReleaseSocket(const std::string& group_name,
602 scoped_ptr<StreamSocket> socket, 596 scoped_ptr<StreamSocket> socket,
603 int id) { 597 int id) {
604 base_.ReleaseSocket(group_name, socket.Pass(), id); 598 base_.ReleaseSocket(group_name, socket.Pass(), id);
605 } 599 }
606 600
607 void SSLClientSocketPool::FlushWithError(int error) { 601 void SSLClientSocketPool::FlushWithError(int error) {
608 base_.FlushWithError(error); 602 base_.FlushWithError(error);
609 } 603 }
610 604
611 bool SSLClientSocketPool::IsStalled() const {
612 return base_.IsStalled() ||
613 (transport_pool_ && transport_pool_->IsStalled()) ||
614 (socks_pool_ && socks_pool_->IsStalled()) ||
615 (http_proxy_pool_ && http_proxy_pool_->IsStalled());
616 }
617
618 void SSLClientSocketPool::CloseIdleSockets() { 605 void SSLClientSocketPool::CloseIdleSockets() {
619 base_.CloseIdleSockets(); 606 base_.CloseIdleSockets();
620 } 607 }
621 608
622 int SSLClientSocketPool::IdleSocketCount() const { 609 int SSLClientSocketPool::IdleSocketCount() const {
623 return base_.idle_socket_count(); 610 return base_.idle_socket_count();
624 } 611 }
625 612
626 int SSLClientSocketPool::IdleSocketCountInGroup( 613 int SSLClientSocketPool::IdleSocketCountInGroup(
627 const std::string& group_name) const { 614 const std::string& group_name) const {
628 return base_.IdleSocketCountInGroup(group_name); 615 return base_.IdleSocketCountInGroup(group_name);
629 } 616 }
630 617
631 LoadState SSLClientSocketPool::GetLoadState( 618 LoadState SSLClientSocketPool::GetLoadState(
632 const std::string& group_name, const ClientSocketHandle* handle) const { 619 const std::string& group_name, const ClientSocketHandle* handle) const {
633 return base_.GetLoadState(group_name, handle); 620 return base_.GetLoadState(group_name, handle);
634 } 621 }
635 622
636 void SSLClientSocketPool::AddLayeredPool(LayeredPool* layered_pool) {
637 base_.AddLayeredPool(layered_pool);
638 }
639
640 void SSLClientSocketPool::RemoveLayeredPool(LayeredPool* layered_pool) {
641 base_.RemoveLayeredPool(layered_pool);
642 }
643
644 base::DictionaryValue* SSLClientSocketPool::GetInfoAsValue( 623 base::DictionaryValue* SSLClientSocketPool::GetInfoAsValue(
645 const std::string& name, 624 const std::string& name,
646 const std::string& type, 625 const std::string& type,
647 bool include_nested_pools) const { 626 bool include_nested_pools) const {
648 base::DictionaryValue* dict = base_.GetInfoAsValue(name, type); 627 base::DictionaryValue* dict = base_.GetInfoAsValue(name, type);
649 if (include_nested_pools) { 628 if (include_nested_pools) {
650 base::ListValue* list = new base::ListValue(); 629 base::ListValue* list = new base::ListValue();
651 if (transport_pool_) { 630 if (transport_pool_) {
652 list->Append(transport_pool_->GetInfoAsValue("transport_socket_pool", 631 list->Append(transport_pool_->GetInfoAsValue("transport_socket_pool",
653 "transport_socket_pool", 632 "transport_socket_pool",
(...skipping 15 matching lines...) Expand all
669 } 648 }
670 649
671 base::TimeDelta SSLClientSocketPool::ConnectionTimeout() const { 650 base::TimeDelta SSLClientSocketPool::ConnectionTimeout() const {
672 return base_.ConnectionTimeout(); 651 return base_.ConnectionTimeout();
673 } 652 }
674 653
675 ClientSocketPoolHistograms* SSLClientSocketPool::histograms() const { 654 ClientSocketPoolHistograms* SSLClientSocketPool::histograms() const {
676 return base_.histograms(); 655 return base_.histograms();
677 } 656 }
678 657
658 bool SSLClientSocketPool::IsStalled() const {
659 return base_.IsStalled();
660 }
661
662 void SSLClientSocketPool::AddHigherLayeredPool(HigherLayeredPool* higher_pool) {
663 base_.AddHigherLayeredPool(higher_pool);
664 }
665
666 void SSLClientSocketPool::RemoveHigherLayeredPool(
667 HigherLayeredPool* higher_pool) {
668 base_.RemoveHigherLayeredPool(higher_pool);
669 }
670
671 bool SSLClientSocketPool::CloseOneIdleConnection() {
672 if (base_.CloseOneIdleSocket())
673 return true;
674 return base_.CloseOneIdleConnectionInHigherLayeredPool();
675 }
676
679 void SSLClientSocketPool::OnSSLConfigChanged() { 677 void SSLClientSocketPool::OnSSLConfigChanged() {
680 FlushWithError(ERR_NETWORK_CHANGED); 678 FlushWithError(ERR_NETWORK_CHANGED);
681 } 679 }
682 680
683 bool SSLClientSocketPool::CloseOneIdleConnection() {
684 if (base_.CloseOneIdleSocket())
685 return true;
686 return base_.CloseOneIdleConnectionInLayeredPool();
687 }
688
689 } // namespace net 681 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/ssl_client_socket_pool.h ('k') | net/socket/transport_client_socket_pool.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698