http_network_session.cc revision 868fa2fe829687343ffae624259930155e16dbd8
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)      quic_clock(NULL),
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      quic_random(NULL),
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      enable_user_alternate_protocol_ports(false),
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      quic_crypto_client_stream_factory(NULL) {
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(mbelshe): Move the socket factories into HttpStreamFactory.
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HttpNetworkSession::HttpNetworkSession(const Params& params)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : net_log_(params.net_log),
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      network_delegate_(params.network_delegate),
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      http_server_properties_(params.http_server_properties),
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      cert_verifier_(params.cert_verifier),
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      http_auth_handler_factory_(params.http_auth_handler_factory),
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      force_http_pipelining_(params.force_http_pipelining),
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      proxy_service_(params.proxy_service),
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ssl_config_service_(params.ssl_config_service),
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      normal_socket_pool_manager_(
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          CreateSocketPoolManager(NORMAL_SOCKET_POOL, params)),
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      websocket_socket_pool_manager_(
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          CreateSocketPoolManager(WEBSOCKET_SOCKET_POOL, params)),
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      quic_stream_factory_(params.host_resolver,
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           params.client_socket_factory ?
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               params.client_socket_factory :
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               net::ClientSocketFactory::GetDefaultFactory(),
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           params.quic_crypto_client_stream_factory,
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           params.quic_random ? params.quic_random :
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               QuicRandom::GetInstance(),
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           params.quic_clock ? params. quic_clock :
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               new QuicClock()),
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      spdy_session_pool_(params.host_resolver,
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         params.ssl_config_service,
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         params.http_server_properties,
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         params.max_spdy_sessions_per_domain,
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         params.force_spdy_single_domain,
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         params.enable_spdy_ip_pooling,
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         params.enable_spdy_credential_frames,
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         params.enable_spdy_compression,
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         params.enable_spdy_ping_based_connection_checking,
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         params.spdy_default_protocol,
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         params.spdy_stream_initial_recv_window_size,
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         params.spdy_initial_max_concurrent_streams,
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         params.spdy_max_concurrent_streams_limit,
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         params.time_func,
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         params.trusted_spdy_proxy),
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      http_stream_factory_(new HttpStreamFactoryImpl(this)),
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      params_(params) {
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(proxy_service_);
132868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DCHECK(ssl_config_service_.get());
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(http_server_properties_);
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HttpNetworkSession::~HttpNetworkSession() {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  STLDeleteElements(&response_drainers_);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  spdy_session_pool_.CloseAllSessions();
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HttpNetworkSession::AddResponseDrainer(HttpResponseBodyDrainer* drainer) {
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!ContainsKey(response_drainers_, drainer));
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  response_drainers_.insert(drainer);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HttpNetworkSession::RemoveResponseDrainer(
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    HttpResponseBodyDrainer* drainer) {
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(ContainsKey(response_drainers_, drainer));
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  response_drainers_.erase(drainer);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TransportClientSocketPool* HttpNetworkSession::GetTransportSocketPool(
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SocketPoolType pool_type) {
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetSocketPoolManager(pool_type)->GetTransportSocketPool();
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SSLClientSocketPool* HttpNetworkSession::GetSSLSocketPool(
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SocketPoolType pool_type) {
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetSocketPoolManager(pool_type)->GetSSLSocketPool();
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SOCKSClientSocketPool* HttpNetworkSession::GetSocketPoolForSOCKSProxy(
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SocketPoolType pool_type,
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const HostPortPair& socks_proxy) {
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetSocketPoolManager(pool_type)->GetSocketPoolForSOCKSProxy(
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      socks_proxy);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HttpProxyClientSocketPool* HttpNetworkSession::GetSocketPoolForHTTPProxy(
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SocketPoolType pool_type,
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const HostPortPair& http_proxy) {
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetSocketPoolManager(pool_type)->GetSocketPoolForHTTPProxy(http_proxy);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SSLClientSocketPool* HttpNetworkSession::GetSocketPoolForSSLWithProxy(
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SocketPoolType pool_type,
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const HostPortPair& proxy_server) {
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetSocketPoolManager(pool_type)->GetSocketPoolForSSLWithProxy(
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      proxy_server);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Value* HttpNetworkSession::SocketPoolInfoToValue() const {
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(yutak): Should merge values from normal pools and WebSocket pools.
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return normal_socket_pool_manager_->SocketPoolInfoToValue();
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Value* HttpNetworkSession::SpdySessionPoolInfoToValue() const {
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return spdy_session_pool_.SpdySessionPoolInfoToValue();
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Value* HttpNetworkSession::QuicInfoToValue() const {
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* dict = new base::DictionaryValue();
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  dict->Set("sessions", quic_stream_factory_.QuicStreamFactoryInfoToValue());
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  dict->SetBoolean("quic_enabled", params_.enable_quic);
195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  dict->SetString("origin_to_force_quic_on",
196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                  params_.origin_to_force_quic_on.ToString());
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return dict;
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HttpNetworkSession::CloseAllConnections() {
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  normal_socket_pool_manager_->FlushSocketPoolsWithError(ERR_ABORTED);
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  websocket_socket_pool_manager_->FlushSocketPoolsWithError(ERR_ABORTED);
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  spdy_session_pool_.CloseCurrentSessions(ERR_ABORTED);
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  quic_stream_factory_.CloseAllSessions(ERR_ABORTED);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HttpNetworkSession::CloseIdleConnections() {
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  normal_socket_pool_manager_->CloseIdleSockets();
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  websocket_socket_pool_manager_->CloseIdleSockets();
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  spdy_session_pool_.CloseIdleSessions();
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ClientSocketPoolManager* HttpNetworkSession::GetSocketPoolManager(
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SocketPoolType pool_type) {
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (pool_type) {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case NORMAL_SOCKET_POOL:
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return normal_socket_pool_manager_.get();
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case WEBSOCKET_SOCKET_POOL:
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return websocket_socket_pool_manager_.get();
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED();
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  //  namespace net
228