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