// Copyright 2015 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/quic/quic_session_pool_peer.h" #include #include #include "base/task/sequenced_task_runner.h" #include "net/base/network_anonymization_key.h" #include "net/base/privacy_mode.h" #include "net/base/proxy_chain.h" #include "net/base/session_usage.h" #include "net/cert/x509_certificate.h" #include "net/cert/x509_util.h" #include "net/dns/public/secure_dns_policy.h" #include "net/quic/platform/impl/quic_chromium_clock.h" #include "net/quic/quic_chromium_client_session.h" #include "net/quic/quic_http_stream.h" #include "net/quic/quic_session_key.h" #include "net/quic/quic_session_pool.h" #include "net/socket/socket_tag.h" #include "net/test/cert_test_util.h" #include "net/test/test_data_directory.h" #include "net/third_party/quiche/src/quiche/quic/core/crypto/quic_crypto_client_config.h" #include "net/third_party/quiche/src/quiche/quic/core/quic_server_id.h" #include "url/scheme_host_port.h" using std::string; namespace net::test { const quic::QuicConfig* QuicSessionPoolPeer::GetConfig( QuicSessionPool* factory) { return &factory->config_; } std::unique_ptr QuicSessionPoolPeer::GetCryptoConfig( QuicSessionPool* factory, const NetworkAnonymizationKey& network_anonymization_key) { return factory->GetCryptoConfigForTesting(network_anonymization_key); } bool QuicSessionPoolPeer::HasActiveSession( QuicSessionPool* factory, const quic::QuicServerId& server_id, const NetworkAnonymizationKey& network_anonymization_key, const ProxyChain& proxy_chain, SessionUsage session_usage, bool require_dns_https_alpn) { return factory->HasActiveSession( QuicSessionKey(server_id, proxy_chain, session_usage, SocketTag(), network_anonymization_key, SecureDnsPolicy::kAllow, require_dns_https_alpn)); } bool QuicSessionPoolPeer::HasActiveJob(QuicSessionPool* factory, const quic::QuicServerId& server_id, bool require_dns_https_alpn) { return factory->HasActiveJob(QuicSessionKey( server_id, ProxyChain::Direct(), SessionUsage::kDestination, SocketTag(), NetworkAnonymizationKey(), SecureDnsPolicy::kAllow, require_dns_https_alpn)); } // static QuicChromiumClientSession* QuicSessionPoolPeer::GetPendingSession( QuicSessionPool* factory, const quic::QuicServerId& server_id, url::SchemeHostPort destination) { QuicSessionKey session_key(server_id, ProxyChain::Direct(), SessionUsage::kDestination, SocketTag(), NetworkAnonymizationKey(), SecureDnsPolicy::kAllow, /*require_dns_https_alpn=*/false); QuicSessionPool::QuicSessionAliasKey key(std::move(destination), session_key); DCHECK(factory->HasActiveJob(session_key)); DCHECK_EQ(factory->all_sessions_.size(), 1u); DCHECK(key == factory->all_sessions_.begin()->second); return factory->all_sessions_.begin()->first; } QuicChromiumClientSession* QuicSessionPoolPeer::GetActiveSession( QuicSessionPool* factory, const quic::QuicServerId& server_id, const NetworkAnonymizationKey& network_anonymization_key, const ProxyChain& proxy_chain, SessionUsage session_usage, bool require_dns_https_alpn) { QuicSessionKey session_key(server_id, proxy_chain, session_usage, SocketTag(), network_anonymization_key, SecureDnsPolicy::kAllow, require_dns_https_alpn); DCHECK(factory->HasActiveSession(session_key)); return factory->active_sessions_[session_key]; } bool QuicSessionPoolPeer::IsLiveSession(QuicSessionPool* factory, QuicChromiumClientSession* session) { for (const auto& it : factory->all_sessions_) { if (it.first == session) { return true; } } return false; } void QuicSessionPoolPeer::SetTaskRunner( QuicSessionPool* factory, base::SequencedTaskRunner* task_runner) { factory->task_runner_ = task_runner; } void QuicSessionPoolPeer::SetTickClock(QuicSessionPool* factory, const base::TickClock* tick_clock) { factory->tick_clock_ = tick_clock; } quic::QuicTime::Delta QuicSessionPoolPeer::GetPingTimeout( QuicSessionPool* factory) { return factory->ping_timeout_; } void QuicSessionPoolPeer::SetYieldAfterPackets(QuicSessionPool* factory, int yield_after_packets) { factory->yield_after_packets_ = yield_after_packets; } void QuicSessionPoolPeer::SetYieldAfterDuration( QuicSessionPool* factory, quic::QuicTime::Delta yield_after_duration) { factory->yield_after_duration_ = yield_after_duration; } bool QuicSessionPoolPeer::CryptoConfigCacheIsEmpty( QuicSessionPool* factory, const quic::QuicServerId& quic_server_id, const NetworkAnonymizationKey& network_anonymization_key) { return factory->CryptoConfigCacheIsEmptyForTesting(quic_server_id, network_anonymization_key); } size_t QuicSessionPoolPeer::GetNumDegradingSessions(QuicSessionPool* factory) { return factory->connectivity_monitor_.GetNumDegradingSessions(); } void QuicSessionPoolPeer::SetAlarmFactory( QuicSessionPool* factory, std::unique_ptr alarm_factory) { factory->alarm_factory_ = std::move(alarm_factory); } } // namespace net::test