blob: 90ce1a9e1f56826e7108d63c2de8219e5f8e0d38 [file] [log] [blame]
// 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 <string>
#include <vector>
#include "base/containers/contains.h"
#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_alias_key.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<QuicCryptoClientConfigHandle>
QuicSessionPoolPeer::GetCryptoConfig(
QuicSessionPool* pool,
QuicSessionPool::QuicCryptoClientConfigKey key) {
return pool->GetCryptoConfigForTesting(std::move(key));
}
bool QuicSessionPoolPeer::HasActiveSession(
QuicSessionPool* pool,
const quic::QuicServerId& server_id,
PrivacyMode privacy_mode,
const NetworkAnonymizationKey& network_anonymization_key,
const ProxyChain& proxy_chain,
SessionUsage session_usage,
bool require_dns_https_alpn) {
return pool->HasActiveSession(
QuicSessionKey(server_id, privacy_mode, proxy_chain, session_usage,
SocketTag(), network_anonymization_key,
SecureDnsPolicy::kAllow, require_dns_https_alpn));
}
bool QuicSessionPoolPeer::HasActiveJob(QuicSessionPool* pool,
const quic::QuicServerId& server_id,
PrivacyMode privacy_mode,
bool require_dns_https_alpn) {
return pool->HasActiveJob(QuicSessionKey(
server_id, privacy_mode, ProxyChain::Direct(), SessionUsage::kDestination,
SocketTag(), NetworkAnonymizationKey(), SecureDnsPolicy::kAllow,
require_dns_https_alpn));
}
// static
QuicChromiumClientSession* QuicSessionPoolPeer::GetPendingSession(
QuicSessionPool* pool,
const quic::QuicServerId& server_id,
PrivacyMode privacy_mode,
url::SchemeHostPort destination) {
QuicSessionKey session_key(server_id, privacy_mode, ProxyChain::Direct(),
SessionUsage::kDestination, SocketTag(),
NetworkAnonymizationKey(), SecureDnsPolicy::kAllow,
/*require_dns_https_alpn=*/false);
QuicSessionAliasKey key(std::move(destination), session_key);
DCHECK(pool->HasActiveJob(session_key));
DCHECK_EQ(pool->all_sessions_.size(), 1u);
QuicChromiumClientSession* session = pool->all_sessions_.begin()->get();
DCHECK(key == session->session_alias_key());
return session;
}
QuicChromiumClientSession* QuicSessionPoolPeer::GetActiveSession(
QuicSessionPool* pool,
const quic::QuicServerId& server_id,
PrivacyMode privacy_mode,
const NetworkAnonymizationKey& network_anonymization_key,
const ProxyChain& proxy_chain,
SessionUsage session_usage,
bool require_dns_https_alpn) {
QuicSessionKey session_key(server_id, privacy_mode, proxy_chain,
session_usage, SocketTag(),
network_anonymization_key, SecureDnsPolicy::kAllow,
require_dns_https_alpn);
DCHECK(pool->HasActiveSession(session_key));
return pool->active_sessions_[session_key];
}
bool QuicSessionPoolPeer::IsLiveSession(QuicSessionPool* pool,
QuicChromiumClientSession* session) {
return base::Contains(pool->all_sessions_, session);
}
void QuicSessionPoolPeer::SetTaskRunner(
QuicSessionPool* pool,
base::SequencedTaskRunner* task_runner) {
pool->task_runner_ = task_runner;
}
void QuicSessionPoolPeer::SetTickClock(QuicSessionPool* pool,
const base::TickClock* tick_clock) {
pool->tick_clock_ = tick_clock;
}
quic::QuicTime::Delta QuicSessionPoolPeer::GetPingTimeout(
QuicSessionPool* pool) {
return pool->ping_timeout_;
}
void QuicSessionPoolPeer::SetYieldAfterPackets(QuicSessionPool* pool,
int yield_after_packets) {
pool->yield_after_packets_ = yield_after_packets;
}
void QuicSessionPoolPeer::SetYieldAfterDuration(
QuicSessionPool* pool,
quic::QuicTime::Delta yield_after_duration) {
pool->yield_after_duration_ = yield_after_duration;
}
bool QuicSessionPoolPeer::CryptoConfigCacheIsEmpty(
QuicSessionPool* pool,
const quic::QuicServerId& quic_server_id,
QuicSessionPool::QuicCryptoClientConfigKey key) {
return pool->CryptoConfigCacheIsEmptyForTesting(quic_server_id,
std::move(key));
}
size_t QuicSessionPoolPeer::GetNumDegradingSessions(QuicSessionPool* pool) {
return pool->connectivity_monitor_.GetNumDegradingSessions();
}
void QuicSessionPoolPeer::SetAlarmFactory(
QuicSessionPool* pool,
std::unique_ptr<quic::QuicAlarmFactory> alarm_factory) {
pool->alarm_factory_ = std::move(alarm_factory);
}
} // namespace net::test