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