url_request_context.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
1// Copyright (c) 2012 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// This class represents contextual information (cookies, cache, etc.) 6// that's useful when processing resource requests. 7// The class is reference-counted so that it can be cleaned up after any 8// requests that are using it have been completed. 9 10#ifndef NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_ 11#define NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_ 12 13#include <set> 14#include <string> 15 16#include "base/memory/ref_counted.h" 17#include "base/memory/scoped_ptr.h" 18#include "base/memory/weak_ptr.h" 19#include "base/threading/non_thread_safe.h" 20#include "net/base/net_export.h" 21#include "net/base/net_log.h" 22#include "net/base/request_priority.h" 23#include "net/http/http_network_session.h" 24#include "net/http/http_server_properties.h" 25#include "net/http/transport_security_state.h" 26#include "net/ssl/ssl_config_service.h" 27#include "net/url_request/url_request.h" 28 29namespace net { 30class CertVerifier; 31class CookieStore; 32class CTVerifier; 33class FraudulentCertificateReporter; 34class HostResolver; 35class HttpAuthHandlerFactory; 36class HttpTransactionFactory; 37class HttpUserAgentSettings; 38class NetworkDelegate; 39class SdchManager; 40class ServerBoundCertService; 41class ProxyService; 42class URLRequest; 43class URLRequestJobFactory; 44class URLRequestThrottlerManager; 45 46// Subclass to provide application-specific context for URLRequest 47// instances. Note that URLRequestContext typically does not provide storage for 48// these member variables, since they may be shared. For the ones that aren't 49// shared, URLRequestContextStorage can be helpful in defining their storage. 50class NET_EXPORT URLRequestContext 51 : NON_EXPORTED_BASE(public base::NonThreadSafe) { 52 public: 53 URLRequestContext(); 54 virtual ~URLRequestContext(); 55 56 // Copies the state from |other| into this context. 57 void CopyFrom(const URLRequestContext* other); 58 59 // May return NULL if this context doesn't have an associated network session. 60 const HttpNetworkSession::Params* GetNetworkSessionParams() const; 61 62 // Creates a URLRequest. |cookie_store| optionally specifies a cookie store 63 // to be used rather than the one represented by the context, or NULL 64 // otherwise. 65 scoped_ptr<URLRequest> CreateRequest(const GURL& url, 66 RequestPriority priority, 67 URLRequest::Delegate* delegate, 68 CookieStore* cookie_store) const; 69 70 NetLog* net_log() const { 71 return net_log_; 72 } 73 74 void set_net_log(NetLog* net_log) { 75 net_log_ = net_log; 76 } 77 78 HostResolver* host_resolver() const { 79 return host_resolver_; 80 } 81 82 void set_host_resolver(HostResolver* host_resolver) { 83 host_resolver_ = host_resolver; 84 } 85 86 CertVerifier* cert_verifier() const { 87 return cert_verifier_; 88 } 89 90 void set_cert_verifier(CertVerifier* cert_verifier) { 91 cert_verifier_ = cert_verifier; 92 } 93 94 ServerBoundCertService* server_bound_cert_service() const { 95 return server_bound_cert_service_; 96 } 97 98 void set_server_bound_cert_service( 99 ServerBoundCertService* server_bound_cert_service) { 100 server_bound_cert_service_ = server_bound_cert_service; 101 } 102 103 FraudulentCertificateReporter* fraudulent_certificate_reporter() const { 104 return fraudulent_certificate_reporter_; 105 } 106 void set_fraudulent_certificate_reporter( 107 FraudulentCertificateReporter* fraudulent_certificate_reporter) { 108 fraudulent_certificate_reporter_ = fraudulent_certificate_reporter; 109 } 110 111 // Get the proxy service for this context. 112 ProxyService* proxy_service() const { return proxy_service_; } 113 void set_proxy_service(ProxyService* proxy_service) { 114 proxy_service_ = proxy_service; 115 } 116 117 // Get the ssl config service for this context. 118 SSLConfigService* ssl_config_service() const { 119 return ssl_config_service_.get(); 120 } 121 void set_ssl_config_service(SSLConfigService* service) { 122 ssl_config_service_ = service; 123 } 124 125 // Gets the HTTP Authentication Handler Factory for this context. 126 // The factory is only valid for the lifetime of this URLRequestContext 127 HttpAuthHandlerFactory* http_auth_handler_factory() const { 128 return http_auth_handler_factory_; 129 } 130 void set_http_auth_handler_factory(HttpAuthHandlerFactory* factory) { 131 http_auth_handler_factory_ = factory; 132 } 133 134 // Gets the http transaction factory for this context. 135 HttpTransactionFactory* http_transaction_factory() const { 136 return http_transaction_factory_; 137 } 138 void set_http_transaction_factory(HttpTransactionFactory* factory) { 139 http_transaction_factory_ = factory; 140 } 141 142 void set_network_delegate(NetworkDelegate* network_delegate) { 143 network_delegate_ = network_delegate; 144 } 145 NetworkDelegate* network_delegate() const { return network_delegate_; } 146 147 void set_http_server_properties( 148 const base::WeakPtr<HttpServerProperties>& http_server_properties) { 149 http_server_properties_ = http_server_properties; 150 } 151 base::WeakPtr<HttpServerProperties> http_server_properties() const { 152 return http_server_properties_; 153 } 154 155 // Gets the cookie store for this context (may be null, in which case 156 // cookies are not stored). 157 CookieStore* cookie_store() const { return cookie_store_.get(); } 158 void set_cookie_store(CookieStore* cookie_store); 159 160 TransportSecurityState* transport_security_state() const { 161 return transport_security_state_; 162 } 163 void set_transport_security_state( 164 TransportSecurityState* state) { 165 transport_security_state_ = state; 166 } 167 168 CTVerifier* cert_transparency_verifier() const { 169 return cert_transparency_verifier_; 170 } 171 void set_cert_transparency_verifier(CTVerifier* verifier) { 172 cert_transparency_verifier_ = verifier; 173 } 174 175 const URLRequestJobFactory* job_factory() const { return job_factory_; } 176 void set_job_factory(const URLRequestJobFactory* job_factory) { 177 job_factory_ = job_factory; 178 } 179 180 // May be NULL. 181 URLRequestThrottlerManager* throttler_manager() const { 182 return throttler_manager_; 183 } 184 void set_throttler_manager(URLRequestThrottlerManager* throttler_manager) { 185 throttler_manager_ = throttler_manager; 186 } 187 188 // May be NULL. 189 SdchManager* sdch_manager() const { 190 return sdch_manager_; 191 } 192 void set_sdch_manager(SdchManager* sdch_manager) { 193 sdch_manager_ = sdch_manager; 194 } 195 196 // Gets the URLRequest objects that hold a reference to this 197 // URLRequestContext. 198 std::set<const URLRequest*>* url_requests() const { 199 return url_requests_.get(); 200 } 201 202 void AssertNoURLRequests() const; 203 204 // Get the underlying |HttpUserAgentSettings| implementation that provides 205 // the HTTP Accept-Language and User-Agent header values. 206 const HttpUserAgentSettings* http_user_agent_settings() const { 207 return http_user_agent_settings_; 208 } 209 void set_http_user_agent_settings( 210 HttpUserAgentSettings* http_user_agent_settings) { 211 http_user_agent_settings_ = http_user_agent_settings; 212 } 213 214 private: 215 // --------------------------------------------------------------------------- 216 // Important: When adding any new members below, consider whether they need to 217 // be added to CopyFrom. 218 // --------------------------------------------------------------------------- 219 220 // Ownership for these members are not defined here. Clients should either 221 // provide storage elsewhere or have a subclass take ownership. 222 NetLog* net_log_; 223 HostResolver* host_resolver_; 224 CertVerifier* cert_verifier_; 225 ServerBoundCertService* server_bound_cert_service_; 226 FraudulentCertificateReporter* fraudulent_certificate_reporter_; 227 HttpAuthHandlerFactory* http_auth_handler_factory_; 228 ProxyService* proxy_service_; 229 scoped_refptr<SSLConfigService> ssl_config_service_; 230 NetworkDelegate* network_delegate_; 231 base::WeakPtr<HttpServerProperties> http_server_properties_; 232 HttpUserAgentSettings* http_user_agent_settings_; 233 scoped_refptr<CookieStore> cookie_store_; 234 TransportSecurityState* transport_security_state_; 235 CTVerifier* cert_transparency_verifier_; 236 HttpTransactionFactory* http_transaction_factory_; 237 const URLRequestJobFactory* job_factory_; 238 URLRequestThrottlerManager* throttler_manager_; 239 SdchManager* sdch_manager_; 240 241 // --------------------------------------------------------------------------- 242 // Important: When adding any new members below, consider whether they need to 243 // be added to CopyFrom. 244 // --------------------------------------------------------------------------- 245 246 scoped_ptr<std::set<const URLRequest*> > url_requests_; 247 248 DISALLOW_COPY_AND_ASSIGN(URLRequestContext); 249}; 250 251} // namespace net 252 253#endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_ 254