[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 1 | // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
license.bot | bf09a50 | 2008-08-24 00:55:55 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 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 | |||||
[email protected] | 43530b3 | 2008-08-04 22:21:34 | [diff] [blame] | 10 | #ifndef NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_ |
11 | #define NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_ | ||||
[email protected] | 32b76ef | 2010-07-26 23:08:24 | [diff] [blame] | 12 | #pragma once |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 13 | |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 14 | #include "base/ref_counted.h" |
[email protected] | c917750 | 2011-01-01 04:48:49 | [diff] [blame] | 15 | #include "base/threading/non_thread_safe.h" |
[email protected] | 9e743cd | 2010-03-16 07:03:53 | [diff] [blame] | 16 | #include "net/base/net_log.h" |
[email protected] | db36938c | 2009-08-19 21:48:42 | [diff] [blame] | 17 | #include "net/base/ssl_config_service.h" |
[email protected] | 326e679 | 2009-12-11 21:04:42 | [diff] [blame] | 18 | #include "net/base/transport_security_state.h" |
[email protected] | 515838c | 2009-01-15 06:43:48 | [diff] [blame] | 19 | #include "net/ftp/ftp_auth_cache.h" |
[email protected] | 80d6524d | 2009-08-18 03:58:09 | [diff] [blame] | 20 | #include "net/proxy/proxy_service.h" |
[email protected] | 345c613b | 2010-11-22 19:33:18 | [diff] [blame] | 21 | #include "net/socket/dns_cert_provenance_checker.h" |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 22 | |
[email protected] | 8ac1a75 | 2008-07-31 19:40:37 | [diff] [blame] | 23 | namespace net { |
[email protected] | 822581d | 2010-12-16 17:27:15 | [diff] [blame] | 24 | class CertVerifier; |
[email protected] | cb370a063 | 2010-01-30 08:24:12 | [diff] [blame] | 25 | class CookiePolicy; |
[email protected] | 9349cfb | 2010-08-31 18:00:53 | [diff] [blame] | 26 | class CookieStore; |
[email protected] | 345c613b | 2010-11-22 19:33:18 | [diff] [blame] | 27 | class DnsCertProvenanceChecker; |
[email protected] | 2db58053 | 2010-10-08 14:32:37 | [diff] [blame] | 28 | class DnsRRResolver; |
[email protected] | b65ce094 | 2009-03-16 20:13:33 | [diff] [blame] | 29 | class FtpTransactionFactory; |
[email protected] | 9349cfb | 2010-08-31 18:00:53 | [diff] [blame] | 30 | class HostResolver; |
[email protected] | fa55e19 | 2010-02-15 14:25:50 | [diff] [blame] | 31 | class HttpAuthHandlerFactory; |
[email protected] | b65ce094 | 2009-03-16 20:13:33 | [diff] [blame] | 32 | class HttpTransactionFactory; |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 33 | class NetworkDelegate; |
[email protected] | 9349cfb | 2010-08-31 18:00:53 | [diff] [blame] | 34 | class SSLConfigService; |
[email protected] | eaadd905 | 2009-06-23 18:02:23 | [diff] [blame] | 35 | class URLRequest; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 36 | |
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 37 | // Subclass to provide application-specific context for URLRequest |
[email protected] | 529623e | 2011-02-23 17:37:16 | [diff] [blame] | 38 | // instances. Note that URLRequestContext typically does not provide storage for |
39 | // these member variables, since they may be shared. For the ones that aren't | ||||
40 | // shared, URLRequestContextStorage can be helpful in defining their storage. | ||||
[email protected] | 483bf12 | 2010-05-04 20:41:24 | [diff] [blame] | 41 | class URLRequestContext |
[email protected] | fe57c8c | 2010-07-12 18:29:43 | [diff] [blame] | 42 | : public base::RefCountedThreadSafe<URLRequestContext>, |
[email protected] | c917750 | 2011-01-01 04:48:49 | [diff] [blame] | 43 | public base::NonThreadSafe { |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 44 | public: |
[email protected] | 9349cfb | 2010-08-31 18:00:53 | [diff] [blame] | 45 | URLRequestContext(); |
[email protected] | db8f44c | 2008-12-13 04:52:01 | [diff] [blame] | 46 | |
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 47 | NetLog* net_log() const { |
[email protected] | 9e743cd | 2010-03-16 07:03:53 | [diff] [blame] | 48 | return net_log_; |
49 | } | ||||
50 | |||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 51 | void set_net_log(NetLog* net_log) { |
[email protected] | 2fb62920 | 2010-12-23 23:52:57 | [diff] [blame] | 52 | net_log_ = net_log; |
53 | } | ||||
54 | |||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 55 | HostResolver* host_resolver() const { |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 56 | return host_resolver_; |
57 | } | ||||
58 | |||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 59 | void set_host_resolver(HostResolver* host_resolver) { |
[email protected] | 2fb62920 | 2010-12-23 23:52:57 | [diff] [blame] | 60 | host_resolver_ = host_resolver; |
61 | } | ||||
62 | |||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 63 | CertVerifier* cert_verifier() const { |
[email protected] | 822581d | 2010-12-16 17:27:15 | [diff] [blame] | 64 | return cert_verifier_; |
65 | } | ||||
66 | |||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 67 | void set_cert_verifier(CertVerifier* cert_verifier) { |
[email protected] | 2fb62920 | 2010-12-23 23:52:57 | [diff] [blame] | 68 | cert_verifier_ = cert_verifier; |
69 | } | ||||
70 | |||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 71 | DnsRRResolver* dnsrr_resolver() const { |
[email protected] | 2db58053 | 2010-10-08 14:32:37 | [diff] [blame] | 72 | return dnsrr_resolver_; |
73 | } | ||||
74 | |||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 75 | void set_dnsrr_resolver(DnsRRResolver* dnsrr_resolver) { |
[email protected] | 2fb62920 | 2010-12-23 23:52:57 | [diff] [blame] | 76 | dnsrr_resolver_ = dnsrr_resolver; |
77 | } | ||||
78 | |||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 79 | DnsCertProvenanceChecker* dns_cert_checker() const { |
[email protected] | f6c21cb | 2011-02-16 19:45:41 | [diff] [blame] | 80 | return dns_cert_checker_; |
81 | } | ||||
82 | void set_dns_cert_checker(net::DnsCertProvenanceChecker* dns_cert_checker) { | ||||
83 | dns_cert_checker_ = dns_cert_checker; | ||||
[email protected] | 345c613b | 2010-11-22 19:33:18 | [diff] [blame] | 84 | } |
85 | |||||
[email protected] | 63de95b | 2008-12-10 04:11:27 | [diff] [blame] | 86 | // Get the proxy service for this context. |
[email protected] | f6c21cb | 2011-02-16 19:45:41 | [diff] [blame] | 87 | ProxyService* proxy_service() const { return proxy_service_; } |
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 88 | void set_proxy_service(ProxyService* proxy_service) { |
[email protected] | 2fb62920 | 2010-12-23 23:52:57 | [diff] [blame] | 89 | proxy_service_ = proxy_service; |
90 | } | ||||
91 | |||||
[email protected] | db36938c | 2009-08-19 21:48:42 | [diff] [blame] | 92 | // Get the ssl config service for this context. |
[email protected] | f6c21cb | 2011-02-16 19:45:41 | [diff] [blame] | 93 | SSLConfigService* ssl_config_service() const { return ssl_config_service_; } |
94 | void set_ssl_config_service(net::SSLConfigService* service) { | ||||
95 | ssl_config_service_ = service; | ||||
[email protected] | db36938c | 2009-08-19 21:48:42 | [diff] [blame] | 96 | } |
97 | |||||
[email protected] | 2fb62920 | 2010-12-23 23:52:57 | [diff] [blame] | 98 | // Gets the HTTP Authentication Handler Factory for this context. |
99 | // The factory is only valid for the lifetime of this URLRequestContext | ||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 100 | HttpAuthHandlerFactory* http_auth_handler_factory() { |
[email protected] | 2fb62920 | 2010-12-23 23:52:57 | [diff] [blame] | 101 | return http_auth_handler_factory_; |
102 | } | ||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 103 | void set_http_auth_handler_factory(HttpAuthHandlerFactory* factory) { |
[email protected] | 2fb62920 | 2010-12-23 23:52:57 | [diff] [blame] | 104 | http_auth_handler_factory_ = factory; |
105 | } | ||||
106 | |||||
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 107 | // Gets the http transaction factory for this context. |
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 108 | HttpTransactionFactory* http_transaction_factory() const { |
[email protected] | db8f44c | 2008-12-13 04:52:01 | [diff] [blame] | 109 | return http_transaction_factory_; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 110 | } |
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 111 | void set_http_transaction_factory(HttpTransactionFactory* factory) { |
[email protected] | 2fb62920 | 2010-12-23 23:52:57 | [diff] [blame] | 112 | http_transaction_factory_ = factory; |
113 | } | ||||
114 | |||||
[email protected] | b65ce094 | 2009-03-16 20:13:33 | [diff] [blame] | 115 | // Gets the ftp transaction factory for this context. |
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 116 | FtpTransactionFactory* ftp_transaction_factory() { |
[email protected] | b65ce094 | 2009-03-16 20:13:33 | [diff] [blame] | 117 | return ftp_transaction_factory_; |
118 | } | ||||
[email protected] | f6c21cb | 2011-02-16 19:45:41 | [diff] [blame] | 119 | void set_ftp_transaction_factory(net::FtpTransactionFactory* factory) { |
120 | ftp_transaction_factory_ = factory; | ||||
121 | } | ||||
[email protected] | b65ce094 | 2009-03-16 20:13:33 | [diff] [blame] | 122 | |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 123 | void set_network_delegate(NetworkDelegate* network_delegate) { |
[email protected] | d05ef99c | 2011-02-01 21:38:16 | [diff] [blame] | 124 | network_delegate_ = network_delegate; |
125 | } | ||||
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 126 | NetworkDelegate* network_delegate() const { return network_delegate_; } |
[email protected] | d05ef99c | 2011-02-01 21:38:16 | [diff] [blame] | 127 | |
[email protected] | be6fca6c | 2010-01-30 21:48:57 | [diff] [blame] | 128 | // Gets the cookie store for this context (may be null, in which case |
129 | // cookies are not stored). | ||||
[email protected] | f6c21cb | 2011-02-16 19:45:41 | [diff] [blame] | 130 | CookieStore* cookie_store() const { return cookie_store_.get(); } |
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 131 | void set_cookie_store(CookieStore* cookie_store); |
[email protected] | 2fb62920 | 2010-12-23 23:52:57 | [diff] [blame] | 132 | |
[email protected] | be6fca6c | 2010-01-30 21:48:57 | [diff] [blame] | 133 | // Gets the cookie policy for this context (may be null, in which case |
134 | // cookies are allowed). | ||||
[email protected] | f6c21cb | 2011-02-16 19:45:41 | [diff] [blame] | 135 | CookiePolicy* cookie_policy() const { return cookie_policy_; } |
136 | void set_cookie_policy(CookiePolicy* cookie_policy) { | ||||
137 | cookie_policy_ = cookie_policy; | ||||
138 | } | ||||
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 139 | |
[email protected] | f6c21cb | 2011-02-16 19:45:41 | [diff] [blame] | 140 | TransportSecurityState* transport_security_state() const { |
141 | return transport_security_state_; | ||||
142 | } | ||||
143 | void set_transport_security_state( | ||||
144 | net::TransportSecurityState* state) { | ||||
145 | transport_security_state_ = state; | ||||
146 | } | ||||
[email protected] | a9cea754 | 2009-05-20 04:30:23 | [diff] [blame] | 147 | |
[email protected] | 515838c | 2009-01-15 06:43:48 | [diff] [blame] | 148 | // Gets the FTP authentication cache for this context. |
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 149 | FtpAuthCache* ftp_auth_cache() { return &ftp_auth_cache_; } |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 150 | |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 151 | // Gets the value of 'Accept-Charset' header field. |
152 | const std::string& accept_charset() const { return accept_charset_; } | ||||
[email protected] | f6c21cb | 2011-02-16 19:45:41 | [diff] [blame] | 153 | void set_accept_charset(const std::string& accept_charset) { |
154 | accept_charset_ = accept_charset; | ||||
155 | } | ||||
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 156 | |
157 | // Gets the value of 'Accept-Language' header field. | ||||
158 | const std::string& accept_language() const { return accept_language_; } | ||||
[email protected] | f6c21cb | 2011-02-16 19:45:41 | [diff] [blame] | 159 | void set_accept_language(const std::string& accept_language) { |
160 | accept_language_ = accept_language; | ||||
161 | } | ||||
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 162 | |
[email protected] | 6f681a4 | 2009-01-27 22:28:54 | [diff] [blame] | 163 | // Gets the UA string to use for the given URL. Pass an invalid URL (such as |
164 | // GURL()) to get the default UA string. Subclasses should override this | ||||
165 | // method to provide a UA string. | ||||
[email protected] | f1d8192 | 2010-07-31 17:47:09 | [diff] [blame] | 166 | virtual const std::string& GetUserAgent(const GURL& url) const; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 167 | |
[email protected] | c9825a4 | 2009-05-01 22:51:50 | [diff] [blame] | 168 | // In general, referrer_charset is not known when URLRequestContext is |
169 | // constructed. So, we need a setter. | ||||
170 | const std::string& referrer_charset() const { return referrer_charset_; } | ||||
171 | void set_referrer_charset(const std::string& charset) { | ||||
172 | referrer_charset_ = charset; | ||||
173 | } | ||||
174 | |||||
[email protected] | 70b9234 | 2010-10-12 05:54:06 | [diff] [blame] | 175 | // Controls whether or not the URLRequestContext considers itself to be the |
176 | // "main" URLRequestContext. | ||||
177 | bool is_main() const { return is_main_; } | ||||
178 | void set_is_main(bool is_main) { is_main_ = is_main; } | ||||
179 | |||||
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 180 | protected: |
[email protected] | 6f681a4 | 2009-01-27 22:28:54 | [diff] [blame] | 181 | friend class base::RefCountedThreadSafe<URLRequestContext>; |
182 | |||||
[email protected] | 9349cfb | 2010-08-31 18:00:53 | [diff] [blame] | 183 | virtual ~URLRequestContext(); |
[email protected] | 6f681a4 | 2009-01-27 22:28:54 | [diff] [blame] | 184 | |
[email protected] | f6c21cb | 2011-02-16 19:45:41 | [diff] [blame] | 185 | private: |
186 | // Indicates whether or not this is the main URLRequestContext. | ||||
187 | bool is_main_; | ||||
188 | |||||
189 | // Ownership for these members are not defined here. Clients should either | ||||
190 | // provide storage elsewhere or have a subclass take ownership. | ||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 191 | NetLog* net_log_; |
192 | HostResolver* host_resolver_; | ||||
193 | CertVerifier* cert_verifier_; | ||||
194 | DnsRRResolver* dnsrr_resolver_; | ||||
[email protected] | f6c21cb | 2011-02-16 19:45:41 | [diff] [blame] | 195 | DnsCertProvenanceChecker* dns_cert_checker_; |
196 | HttpAuthHandlerFactory* http_auth_handler_factory_; | ||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 197 | scoped_refptr<ProxyService> proxy_service_; |
198 | scoped_refptr<SSLConfigService> ssl_config_service_; | ||||
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 199 | NetworkDelegate* network_delegate_; |
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 200 | scoped_refptr<CookieStore> cookie_store_; |
201 | CookiePolicy* cookie_policy_; | ||||
202 | scoped_refptr<TransportSecurityState> transport_security_state_; | ||||
203 | FtpAuthCache ftp_auth_cache_; | ||||
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 204 | std::string accept_language_; |
205 | std::string accept_charset_; | ||||
[email protected] | c9825a4 | 2009-05-01 22:51:50 | [diff] [blame] | 206 | // The charset of the referrer where this request comes from. It's not |
207 | // used in communication with a server but is used to construct a suggested | ||||
208 | // filename for file download. | ||||
209 | std::string referrer_charset_; | ||||
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 210 | |
[email protected] | f6c21cb | 2011-02-16 19:45:41 | [diff] [blame] | 211 | HttpTransactionFactory* http_transaction_factory_; |
212 | FtpTransactionFactory* ftp_transaction_factory_; | ||||
[email protected] | 70b9234 | 2010-10-12 05:54:06 | [diff] [blame] | 213 | |
[email protected] | 6f681a4 | 2009-01-27 22:28:54 | [diff] [blame] | 214 | DISALLOW_COPY_AND_ASSIGN(URLRequestContext); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 215 | }; |
216 | |||||
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 217 | } // namespace net |
218 | |||||
[email protected] | 43530b3 | 2008-08-04 22:21:34 | [diff] [blame] | 219 | #endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_ |