/external/chromium/net/http/http_network_session.h

https://gitlab.com/brian0218/rk3188_r-box_android4.2.2_sdk · C Header · 179 lines · 138 code · 32 blank · 9 comment · 0 complexity · 542eeb807b39b574e00de1514963b0da MD5 · raw file

  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. #ifndef NET_HTTP_HTTP_NETWORK_SESSION_H_
  5. #define NET_HTTP_HTTP_NETWORK_SESSION_H_
  6. #pragma once
  7. #include <set>
  8. #include "base/memory/ref_counted.h"
  9. #include "base/threading/non_thread_safe.h"
  10. #include "net/base/host_port_pair.h"
  11. #include "net/base/host_resolver.h"
  12. #include "net/base/ssl_client_auth_cache.h"
  13. #include "net/http/http_alternate_protocols.h"
  14. #include "net/http/http_auth_cache.h"
  15. #include "net/http/http_stream_factory.h"
  16. #include "net/socket/client_socket_pool_manager.h"
  17. #include "net/spdy/spdy_session_pool.h"
  18. #include "net/spdy/spdy_settings_storage.h"
  19. class Value;
  20. namespace net {
  21. class CertVerifier;
  22. class ClientSocketFactory;
  23. class DnsCertProvenanceChecker;
  24. class DnsRRResolver;
  25. class HostResolver;
  26. class HttpAuthHandlerFactory;
  27. class HttpNetworkSessionPeer;
  28. class HttpProxyClientSocketPool;
  29. class HttpResponseBodyDrainer;
  30. class NetLog;
  31. class NetworkDelegate;
  32. class ProxyService;
  33. class SSLConfigService;
  34. class SSLHostInfoFactory;
  35. // This class holds session objects used by HttpNetworkTransaction objects.
  36. class HttpNetworkSession : public base::RefCounted<HttpNetworkSession>,
  37. public base::NonThreadSafe {
  38. public:
  39. struct Params {
  40. Params()
  41. : client_socket_factory(NULL),
  42. host_resolver(NULL),
  43. cert_verifier(NULL),
  44. dnsrr_resolver(NULL),
  45. dns_cert_checker(NULL),
  46. proxy_service(NULL),
  47. ssl_host_info_factory(NULL),
  48. ssl_config_service(NULL),
  49. http_auth_handler_factory(NULL),
  50. network_delegate(NULL),
  51. net_log(NULL) {}
  52. ClientSocketFactory* client_socket_factory;
  53. HostResolver* host_resolver;
  54. CertVerifier* cert_verifier;
  55. DnsRRResolver* dnsrr_resolver;
  56. DnsCertProvenanceChecker* dns_cert_checker;
  57. ProxyService* proxy_service;
  58. SSLHostInfoFactory* ssl_host_info_factory;
  59. SSLConfigService* ssl_config_service;
  60. HttpAuthHandlerFactory* http_auth_handler_factory;
  61. NetworkDelegate* network_delegate;
  62. NetLog* net_log;
  63. };
  64. explicit HttpNetworkSession(const Params& params);
  65. HttpAuthCache* http_auth_cache() { return &http_auth_cache_; }
  66. SSLClientAuthCache* ssl_client_auth_cache() {
  67. return &ssl_client_auth_cache_;
  68. }
  69. void AddResponseDrainer(HttpResponseBodyDrainer* drainer);
  70. void RemoveResponseDrainer(HttpResponseBodyDrainer* drainer);
  71. const HttpAlternateProtocols& alternate_protocols() const {
  72. return alternate_protocols_;
  73. }
  74. HttpAlternateProtocols* mutable_alternate_protocols() {
  75. return &alternate_protocols_;
  76. }
  77. TransportClientSocketPool* transport_socket_pool() {
  78. return socket_pool_manager_.transport_socket_pool();
  79. }
  80. SSLClientSocketPool* ssl_socket_pool() {
  81. return socket_pool_manager_.ssl_socket_pool();
  82. }
  83. SOCKSClientSocketPool* GetSocketPoolForSOCKSProxy(
  84. const HostPortPair& socks_proxy) {
  85. return socket_pool_manager_.GetSocketPoolForSOCKSProxy(socks_proxy);
  86. }
  87. HttpProxyClientSocketPool* GetSocketPoolForHTTPProxy(
  88. const HostPortPair& http_proxy) {
  89. return socket_pool_manager_.GetSocketPoolForHTTPProxy(http_proxy);
  90. }
  91. SSLClientSocketPool* GetSocketPoolForSSLWithProxy(
  92. const HostPortPair& proxy_server) {
  93. return socket_pool_manager_.GetSocketPoolForSSLWithProxy(proxy_server);
  94. }
  95. CertVerifier* cert_verifier() { return cert_verifier_; }
  96. ProxyService* proxy_service() { return proxy_service_; }
  97. SSLConfigService* ssl_config_service() { return ssl_config_service_; }
  98. SpdySessionPool* spdy_session_pool() { return &spdy_session_pool_; }
  99. HttpAuthHandlerFactory* http_auth_handler_factory() {
  100. return http_auth_handler_factory_;
  101. }
  102. NetworkDelegate* network_delegate() {
  103. return network_delegate_;
  104. }
  105. HttpStreamFactory* http_stream_factory() {
  106. return http_stream_factory_.get();
  107. }
  108. NetLog* net_log() {
  109. return net_log_;
  110. }
  111. // Creates a Value summary of the state of the socket pools. The caller is
  112. // responsible for deleting the returned value.
  113. Value* SocketPoolInfoToValue() const {
  114. return socket_pool_manager_.SocketPoolInfoToValue();
  115. }
  116. // Creates a Value summary of the state of the SPDY sessions. The caller is
  117. // responsible for deleting the returned value.
  118. Value* SpdySessionPoolInfoToValue() const;
  119. void CloseAllConnections() {
  120. socket_pool_manager_.FlushSocketPools();
  121. spdy_session_pool_.CloseCurrentSessions();
  122. }
  123. void CloseIdleConnections() {
  124. socket_pool_manager_.CloseIdleSockets();
  125. spdy_session_pool_.CloseIdleSessions();
  126. }
  127. private:
  128. friend class base::RefCounted<HttpNetworkSession>;
  129. friend class HttpNetworkSessionPeer;
  130. ~HttpNetworkSession();
  131. NetLog* const net_log_;
  132. NetworkDelegate* const network_delegate_;
  133. CertVerifier* const cert_verifier_;
  134. HttpAuthHandlerFactory* const http_auth_handler_factory_;
  135. // Not const since it's modified by HttpNetworkSessionPeer for testing.
  136. scoped_refptr<ProxyService> proxy_service_;
  137. const scoped_refptr<SSLConfigService> ssl_config_service_;
  138. HttpAuthCache http_auth_cache_;
  139. SSLClientAuthCache ssl_client_auth_cache_;
  140. HttpAlternateProtocols alternate_protocols_;
  141. ClientSocketPoolManager socket_pool_manager_;
  142. SpdySessionPool spdy_session_pool_;
  143. scoped_ptr<HttpStreamFactory> http_stream_factory_;
  144. std::set<HttpResponseBodyDrainer*> response_drainers_;
  145. };
  146. } // namespace net
  147. #endif // NET_HTTP_HTTP_NETWORK_SESSION_H_