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