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 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |