http_network_session.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_network_session.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/debug/stack_trace.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string_util.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_auth_handler_factory.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_response_body_drainer.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_stream_factory_impl.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/url_security_manager.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_service.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/quic/crypto/quic_random.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/quic/quic_clock.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/quic/quic_crypto_client_stream_factory.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/quic/quic_stream_factory.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/socket/client_socket_factory.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/socket/client_socket_pool_manager_impl.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/socket/next_proto.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/spdy/spdy_session_pool.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)net::ClientSocketPoolManager* CreateSocketPoolManager( 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HttpNetworkSession::SocketPoolType pool_type, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::HttpNetworkSession::Params& params) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(yutak): Differentiate WebSocket pool manager and allow more 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // simultaneous connections for WebSockets. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new net::ClientSocketPoolManagerImpl( 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.net_log, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.client_socket_factory ? 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.client_socket_factory : 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ClientSocketFactory::GetDefaultFactory(), 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.host_resolver, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.cert_verifier, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.server_bound_cert_service, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.transport_security_state, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.ssl_session_cache_shard, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.proxy_service, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.ssl_config_service, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pool_type); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // unnamed namespace 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HttpNetworkSession::Params::Params() 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : client_socket_factory(NULL), 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver(NULL), 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cert_verifier(NULL), 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_bound_cert_service(NULL), 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) transport_security_state(NULL), 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_service(NULL), 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ssl_config_service(NULL), 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_auth_handler_factory(NULL), 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_delegate(NULL), 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_properties(NULL), 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net_log(NULL), 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_mapping_rules(NULL), 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) force_http_pipelining(false), 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ignore_certificate_errors(false), 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_pipelining_enabled(false), 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_fixed_http_port(0), 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) testing_fixed_https_port(0), 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) max_spdy_sessions_per_domain(0), 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) force_spdy_single_domain(false), 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enable_spdy_ip_pooling(true), 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enable_spdy_credential_frames(false), 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enable_spdy_compression(true), 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enable_spdy_ping_based_connection_checking(true), 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) spdy_default_protocol(kProtoUnknown), 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) spdy_stream_initial_recv_window_size(0), 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) spdy_initial_max_concurrent_streams(0), 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) spdy_max_concurrent_streams_limit(0), 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) time_func(&base::TimeTicks::Now), 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enable_quic(false), 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) origin_port_to_force_quic_on(0), 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) quic_clock(NULL), 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) quic_random(NULL), 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enable_user_alternate_protocol_ports(false), 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) quic_crypto_client_stream_factory(NULL) { 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(mbelshe): Move the socket factories into HttpStreamFactory. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HttpNetworkSession::HttpNetworkSession(const Params& params) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : net_log_(params.net_log), 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_delegate_(params.network_delegate), 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_properties_(params.http_server_properties), 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cert_verifier_(params.cert_verifier), 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_auth_handler_factory_(params.http_auth_handler_factory), 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) force_http_pipelining_(params.force_http_pipelining), 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_service_(params.proxy_service), 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ssl_config_service_(params.ssl_config_service), 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) normal_socket_pool_manager_( 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSocketPoolManager(NORMAL_SOCKET_POOL, params)), 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) websocket_socket_pool_manager_( 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSocketPoolManager(WEBSOCKET_SOCKET_POOL, params)), 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) quic_stream_factory_(params.host_resolver, 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.client_socket_factory ? 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.client_socket_factory : 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::ClientSocketFactory::GetDefaultFactory(), 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.quic_crypto_client_stream_factory, 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.quic_random ? params.quic_random : 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) QuicRandom::GetInstance(), 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.quic_clock ? params. quic_clock : 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new QuicClock()), 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) spdy_session_pool_(params.host_resolver, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.ssl_config_service, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.http_server_properties, 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.max_spdy_sessions_per_domain, 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.force_spdy_single_domain, 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.enable_spdy_ip_pooling, 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.enable_spdy_credential_frames, 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.enable_spdy_compression, 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.enable_spdy_ping_based_connection_checking, 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.spdy_default_protocol, 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.spdy_stream_initial_recv_window_size, 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.spdy_initial_max_concurrent_streams, 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.spdy_max_concurrent_streams_limit, 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.time_func, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.trusted_spdy_proxy), 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ALLOW_THIS_IN_INITIALIZER_LIST(http_stream_factory_( 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new HttpStreamFactoryImpl(this))), 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params_(params) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(proxy_service_); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(ssl_config_service_); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(http_server_properties_); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HttpNetworkSession::~HttpNetworkSession() { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STLDeleteElements(&response_drainers_); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) spdy_session_pool_.CloseAllSessions(); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HttpNetworkSession::AddResponseDrainer(HttpResponseBodyDrainer* drainer) { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!ContainsKey(response_drainers_, drainer)); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response_drainers_.insert(drainer); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HttpNetworkSession::RemoveResponseDrainer( 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpResponseBodyDrainer* drainer) { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(ContainsKey(response_drainers_, drainer)); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response_drainers_.erase(drainer); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TransportClientSocketPool* HttpNetworkSession::GetTransportSocketPool( 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketPoolType pool_type) { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetSocketPoolManager(pool_type)->GetTransportSocketPool(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SSLClientSocketPool* HttpNetworkSession::GetSSLSocketPool( 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketPoolType pool_type) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetSocketPoolManager(pool_type)->GetSSLSocketPool(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SOCKSClientSocketPool* HttpNetworkSession::GetSocketPoolForSOCKSProxy( 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketPoolType pool_type, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HostPortPair& socks_proxy) { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetSocketPoolManager(pool_type)->GetSocketPoolForSOCKSProxy( 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) socks_proxy); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HttpProxyClientSocketPool* HttpNetworkSession::GetSocketPoolForHTTPProxy( 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketPoolType pool_type, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HostPortPair& http_proxy) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetSocketPoolManager(pool_type)->GetSocketPoolForHTTPProxy(http_proxy); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SSLClientSocketPool* HttpNetworkSession::GetSocketPoolForSSLWithProxy( 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketPoolType pool_type, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HostPortPair& proxy_server) { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetSocketPoolManager(pool_type)->GetSocketPoolForSSLWithProxy( 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_server); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Value* HttpNetworkSession::SocketPoolInfoToValue() const { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(yutak): Should merge values from normal pools and WebSocket pools. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return normal_socket_pool_manager_->SocketPoolInfoToValue(); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Value* HttpNetworkSession::SpdySessionPoolInfoToValue() const { 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return spdy_session_pool_.SpdySessionPoolInfoToValue(); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Value* HttpNetworkSession::QuicInfoToValue() const { 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue(); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->Set("sessions", quic_stream_factory_.QuicStreamFactoryInfoToValue()); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetBoolean("quic_enabled", params_.enable_quic); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetInteger("origin_port_to_force_quic_on", 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params_.origin_port_to_force_quic_on); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return dict; 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HttpNetworkSession::CloseAllConnections() { 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) normal_socket_pool_manager_->FlushSocketPoolsWithError(ERR_ABORTED); 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) websocket_socket_pool_manager_->FlushSocketPoolsWithError(ERR_ABORTED); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) spdy_session_pool_.CloseCurrentSessions(ERR_ABORTED); 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) quic_stream_factory_.CloseAllSessions(ERR_ABORTED); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HttpNetworkSession::CloseIdleConnections() { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) normal_socket_pool_manager_->CloseIdleSockets(); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) websocket_socket_pool_manager_->CloseIdleSockets(); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) spdy_session_pool_.CloseIdleSessions(); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ClientSocketPoolManager* HttpNetworkSession::GetSocketPoolManager( 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketPoolType pool_type) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (pool_type) { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case NORMAL_SOCKET_POOL: 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return normal_socket_pool_manager_.get(); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WEBSOCKET_SOCKET_POOL: 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return websocket_socket_pool_manager_.get(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 230