url_request_context.h revision 0f1bc08d4cfcc34181b0b5cbf065c40f687bf740
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 FraudulentCertificateReporter; 33class HostResolver; 34class HttpAuthHandlerFactory; 35class HttpTransactionFactory; 36class HttpUserAgentSettings; 37class NetworkDelegate; 38class ServerBoundCertService; 39class ProxyService; 40class URLRequest; 41class URLRequestJobFactory; 42class URLRequestThrottlerManager; 43 44// Subclass to provide application-specific context for URLRequest 45// instances. Note that URLRequestContext typically does not provide storage for 46// these member variables, since they may be shared. For the ones that aren't 47// shared, URLRequestContextStorage can be helpful in defining their storage. 48class NET_EXPORT URLRequestContext 49 : NON_EXPORTED_BASE(public base::NonThreadSafe) { 50 public: 51 URLRequestContext(); 52 virtual ~URLRequestContext(); 53 54 // Copies the state from |other| into this context. 55 void CopyFrom(const URLRequestContext* other); 56 57 // May return NULL if this context doesn't have an associated network session. 58 const HttpNetworkSession::Params* GetNetworkSessionParams() const; 59 60 scoped_ptr<URLRequest> CreateRequest(const GURL& url, 61 RequestPriority priority, 62 URLRequest::Delegate* delegate) const; 63 64 NetLog* net_log() const { 65 return net_log_; 66 } 67 68 void set_net_log(NetLog* net_log) { 69 net_log_ = net_log; 70 } 71 72 HostResolver* host_resolver() const { 73 return host_resolver_; 74 } 75 76 void set_host_resolver(HostResolver* host_resolver) { 77 host_resolver_ = host_resolver; 78 } 79 80 CertVerifier* cert_verifier() const { 81 return cert_verifier_; 82 } 83 84 void set_cert_verifier(CertVerifier* cert_verifier) { 85 cert_verifier_ = cert_verifier; 86 } 87 88 ServerBoundCertService* server_bound_cert_service() const { 89 return server_bound_cert_service_; 90 } 91 92 void set_server_bound_cert_service( 93 ServerBoundCertService* server_bound_cert_service) { 94 server_bound_cert_service_ = server_bound_cert_service; 95 } 96 97 FraudulentCertificateReporter* fraudulent_certificate_reporter() const { 98 return fraudulent_certificate_reporter_; 99 } 100 void set_fraudulent_certificate_reporter( 101 FraudulentCertificateReporter* fraudulent_certificate_reporter) { 102 fraudulent_certificate_reporter_ = fraudulent_certificate_reporter; 103 } 104 105 // Get the proxy service for this context. 106 ProxyService* proxy_service() const { return proxy_service_; } 107 void set_proxy_service(ProxyService* proxy_service) { 108 proxy_service_ = proxy_service; 109 } 110 111 // Get the ssl config service for this context. 112 SSLConfigService* ssl_config_service() const { 113 return ssl_config_service_.get(); 114 } 115 void set_ssl_config_service(SSLConfigService* service) { 116 ssl_config_service_ = service; 117 } 118 119 // Gets the HTTP Authentication Handler Factory for this context. 120 // The factory is only valid for the lifetime of this URLRequestContext 121 HttpAuthHandlerFactory* http_auth_handler_factory() const { 122 return http_auth_handler_factory_; 123 } 124 void set_http_auth_handler_factory(HttpAuthHandlerFactory* factory) { 125 http_auth_handler_factory_ = factory; 126 } 127 128 // Gets the http transaction factory for this context. 129 HttpTransactionFactory* http_transaction_factory() const { 130 return http_transaction_factory_; 131 } 132 void set_http_transaction_factory(HttpTransactionFactory* factory) { 133 http_transaction_factory_ = factory; 134 } 135 136 void set_network_delegate(NetworkDelegate* network_delegate) { 137 network_delegate_ = network_delegate; 138 } 139 NetworkDelegate* network_delegate() const { return network_delegate_; } 140 141 void set_http_server_properties( 142 const base::WeakPtr<HttpServerProperties>& http_server_properties) { 143 http_server_properties_ = http_server_properties; 144 } 145 base::WeakPtr<HttpServerProperties> http_server_properties() const { 146 return http_server_properties_; 147 } 148 149 // Gets the cookie store for this context (may be null, in which case 150 // cookies are not stored). 151 CookieStore* cookie_store() const { return cookie_store_.get(); } 152 void set_cookie_store(CookieStore* cookie_store); 153 154 TransportSecurityState* transport_security_state() const { 155 return transport_security_state_; 156 } 157 void set_transport_security_state( 158 TransportSecurityState* state) { 159 transport_security_state_ = state; 160 } 161 162 // --------------------------------------------------------------------------- 163 // Legacy accessors that delegate to http_user_agent_settings_. 164 // TODO(pauljensen): Remove after all clients are updated to directly access 165 // http_user_agent_settings_. 166 // Gets the value of 'Accept-Language' header field. 167 std::string GetAcceptLanguage() const; 168 // Gets the UA string to use for the given URL. Pass an invalid URL (such as 169 // GURL()) to get the default UA string. 170 std::string GetUserAgent(const GURL& url) const; 171 // --------------------------------------------------------------------------- 172 173 const URLRequestJobFactory* job_factory() const { return job_factory_; } 174 void set_job_factory(const URLRequestJobFactory* job_factory) { 175 job_factory_ = job_factory; 176 } 177 178 // May be NULL. 179 URLRequestThrottlerManager* throttler_manager() const { 180 return throttler_manager_; 181 } 182 void set_throttler_manager(URLRequestThrottlerManager* throttler_manager) { 183 throttler_manager_ = throttler_manager; 184 } 185 186 // Gets the URLRequest objects that hold a reference to this 187 // URLRequestContext. 188 std::set<const URLRequest*>* url_requests() const { 189 return url_requests_.get(); 190 } 191 192 void AssertNoURLRequests() const; 193 194 // Get the underlying |HttpUserAgentSettings| implementation that provides 195 // the HTTP Accept-Language and User-Agent header values. 196 const HttpUserAgentSettings* http_user_agent_settings() const { 197 return http_user_agent_settings_; 198 } 199 void set_http_user_agent_settings( 200 HttpUserAgentSettings* http_user_agent_settings) { 201 http_user_agent_settings_ = http_user_agent_settings; 202 } 203 204 private: 205 // --------------------------------------------------------------------------- 206 // Important: When adding any new members below, consider whether they need to 207 // be added to CopyFrom. 208 // --------------------------------------------------------------------------- 209 210 // Ownership for these members are not defined here. Clients should either 211 // provide storage elsewhere or have a subclass take ownership. 212 NetLog* net_log_; 213 HostResolver* host_resolver_; 214 CertVerifier* cert_verifier_; 215 ServerBoundCertService* server_bound_cert_service_; 216 FraudulentCertificateReporter* fraudulent_certificate_reporter_; 217 HttpAuthHandlerFactory* http_auth_handler_factory_; 218 ProxyService* proxy_service_; 219 scoped_refptr<SSLConfigService> ssl_config_service_; 220 NetworkDelegate* network_delegate_; 221 base::WeakPtr<HttpServerProperties> http_server_properties_; 222 HttpUserAgentSettings* http_user_agent_settings_; 223 scoped_refptr<CookieStore> cookie_store_; 224 TransportSecurityState* transport_security_state_; 225 HttpTransactionFactory* http_transaction_factory_; 226 const URLRequestJobFactory* job_factory_; 227 URLRequestThrottlerManager* throttler_manager_; 228 229 // --------------------------------------------------------------------------- 230 // Important: When adding any new members below, consider whether they need to 231 // be added to CopyFrom. 232 // --------------------------------------------------------------------------- 233 234 scoped_ptr<std::set<const URLRequest*> > url_requests_; 235 236 DISALLOW_COPY_AND_ASSIGN(URLRequestContext); 237}; 238 239} // namespace net 240 241#endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_ 242