Home | History | Annotate | Download | only in http
      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 
     22 namespace net {
     23 
     24 // TODO(mbelshe): Move the socket factories into HttpStreamFactory.
     25 HttpNetworkSession::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 
     50 HttpNetworkSession::~HttpNetworkSession() {
     51   STLDeleteElements(&response_drainers_);
     52   spdy_session_pool_.CloseAllSessions();
     53 }
     54 
     55 void HttpNetworkSession::AddResponseDrainer(HttpResponseBodyDrainer* drainer) {
     56   DCHECK(!ContainsKey(response_drainers_, drainer));
     57   response_drainers_.insert(drainer);
     58 }
     59 
     60 void HttpNetworkSession::RemoveResponseDrainer(
     61     HttpResponseBodyDrainer* drainer) {
     62   DCHECK(ContainsKey(response_drainers_, drainer));
     63   response_drainers_.erase(drainer);
     64 }
     65 
     66 Value* HttpNetworkSession::SpdySessionPoolInfoToValue() const {
     67   return spdy_session_pool_.SpdySessionPoolInfoToValue();
     68 }
     69 
     70 }  //  namespace net
     71