1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "net/http/http_network_session.h" 6 7#include <utility> 8 9#include "base/compiler_specific.h" 10#include "base/logging.h" 11#include "base/stl_util-inl.h" 12#include "base/string_util.h" 13#include "base/values.h" 14#include "net/http/http_auth_handler_factory.h" 15#include "net/http/http_response_body_drainer.h" 16#include "net/http/http_stream_factory_impl.h" 17#include "net/http/url_security_manager.h" 18#include "net/proxy/proxy_service.h" 19#include "net/socket/client_socket_factory.h" 20#include "net/spdy/spdy_session_pool.h" 21 22namespace net { 23 24// TODO(mbelshe): Move the socket factories into HttpStreamFactory. 25HttpNetworkSession::HttpNetworkSession(const Params& params) 26 : net_log_(params.net_log), 27 network_delegate_(params.network_delegate), 28 cert_verifier_(params.cert_verifier), 29 http_auth_handler_factory_(params.http_auth_handler_factory), 30 proxy_service_(params.proxy_service), 31 ssl_config_service_(params.ssl_config_service), 32 socket_pool_manager_(params.net_log, 33 params.client_socket_factory ? 34 params.client_socket_factory : 35 ClientSocketFactory::GetDefaultFactory(), 36 params.host_resolver, 37 params.cert_verifier, 38 params.dnsrr_resolver, 39 params.dns_cert_checker, 40 params.ssl_host_info_factory, 41 params.proxy_service, 42 params.ssl_config_service), 43 spdy_session_pool_(params.host_resolver, params.ssl_config_service), 44 ALLOW_THIS_IN_INITIALIZER_LIST(http_stream_factory_( 45 new HttpStreamFactoryImpl(this))) { 46 DCHECK(params.proxy_service); 47 DCHECK(params.ssl_config_service); 48} 49 50HttpNetworkSession::~HttpNetworkSession() { 51 STLDeleteElements(&response_drainers_); 52 spdy_session_pool_.CloseAllSessions(); 53} 54 55void HttpNetworkSession::AddResponseDrainer(HttpResponseBodyDrainer* drainer) { 56 DCHECK(!ContainsKey(response_drainers_, drainer)); 57 response_drainers_.insert(drainer); 58} 59 60void HttpNetworkSession::RemoveResponseDrainer( 61 HttpResponseBodyDrainer* drainer) { 62 DCHECK(ContainsKey(response_drainers_, drainer)); 63 response_drainers_.erase(drainer); 64} 65 66Value* HttpNetworkSession::SpdySessionPoolInfoToValue() const { 67 return spdy_session_pool_.SpdySessionPoolInfoToValue(); 68} 69 70} // namespace net 71