blob: 79761269687b1de7e8cd350da0002fcd4d814cd4 [file] [log] [blame]
[email protected]27a112c2011-01-06 04:19:301// Copyright (c) 2011 The Chromium Authors. All rights reserved.
license.botbf09a502008-08-24 00:55:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit586acc5fe2008-07-26 22:42:524
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]43530b32008-08-04 22:21:3410#ifndef NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_
11#define NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_
[email protected]32b76ef2010-07-26 23:08:2412#pragma once
initial.commit586acc5fe2008-07-26 22:42:5213
initial.commit586acc5fe2008-07-26 22:42:5214#include "base/ref_counted.h"
[email protected]c9177502011-01-01 04:48:4915#include "base/threading/non_thread_safe.h"
[email protected]9e743cd2010-03-16 07:03:5316#include "net/base/net_log.h"
[email protected]db36938c2009-08-19 21:48:4217#include "net/base/ssl_config_service.h"
[email protected]326e6792009-12-11 21:04:4218#include "net/base/transport_security_state.h"
[email protected]515838c2009-01-15 06:43:4819#include "net/ftp/ftp_auth_cache.h"
[email protected]80d6524d2009-08-18 03:58:0920#include "net/proxy/proxy_service.h"
[email protected]345c613b2010-11-22 19:33:1821#include "net/socket/dns_cert_provenance_checker.h"
initial.commit586acc5fe2008-07-26 22:42:5222
[email protected]8ac1a752008-07-31 19:40:3723namespace net {
[email protected]822581d2010-12-16 17:27:1524class CertVerifier;
[email protected]cb370a0632010-01-30 08:24:1225class CookiePolicy;
[email protected]9349cfb2010-08-31 18:00:5326class CookieStore;
[email protected]345c613b2010-11-22 19:33:1827class DnsCertProvenanceChecker;
[email protected]2db580532010-10-08 14:32:3728class DnsRRResolver;
[email protected]b65ce0942009-03-16 20:13:3329class FtpTransactionFactory;
[email protected]9349cfb2010-08-31 18:00:5330class HostResolver;
[email protected]fa55e192010-02-15 14:25:5031class HttpAuthHandlerFactory;
[email protected]b65ce0942009-03-16 20:13:3332class HttpTransactionFactory;
[email protected]0651b812011-02-24 00:22:5033class NetworkDelegate;
[email protected]9349cfb2010-08-31 18:00:5334class SSLConfigService;
[email protected]eaadd9052009-06-23 18:02:2335class URLRequest;
initial.commit586acc5fe2008-07-26 22:42:5236
[email protected]27a112c2011-01-06 04:19:3037// Subclass to provide application-specific context for URLRequest
[email protected]529623e2011-02-23 17:37:1638// 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]483bf122010-05-04 20:41:2441class URLRequestContext
[email protected]fe57c8c2010-07-12 18:29:4342 : public base::RefCountedThreadSafe<URLRequestContext>,
[email protected]c9177502011-01-01 04:48:4943 public base::NonThreadSafe {
initial.commit586acc5fe2008-07-26 22:42:5244 public:
[email protected]9349cfb2010-08-31 18:00:5345 URLRequestContext();
[email protected]db8f44c2008-12-13 04:52:0146
[email protected]27a112c2011-01-06 04:19:3047 NetLog* net_log() const {
[email protected]9e743cd2010-03-16 07:03:5348 return net_log_;
49 }
50
[email protected]27a112c2011-01-06 04:19:3051 void set_net_log(NetLog* net_log) {
[email protected]2fb629202010-12-23 23:52:5752 net_log_ = net_log;
53 }
54
[email protected]27a112c2011-01-06 04:19:3055 HostResolver* host_resolver() const {
[email protected]8a00f00a2009-06-12 00:49:3856 return host_resolver_;
57 }
58
[email protected]27a112c2011-01-06 04:19:3059 void set_host_resolver(HostResolver* host_resolver) {
[email protected]2fb629202010-12-23 23:52:5760 host_resolver_ = host_resolver;
61 }
62
[email protected]27a112c2011-01-06 04:19:3063 CertVerifier* cert_verifier() const {
[email protected]822581d2010-12-16 17:27:1564 return cert_verifier_;
65 }
66
[email protected]27a112c2011-01-06 04:19:3067 void set_cert_verifier(CertVerifier* cert_verifier) {
[email protected]2fb629202010-12-23 23:52:5768 cert_verifier_ = cert_verifier;
69 }
70
[email protected]27a112c2011-01-06 04:19:3071 DnsRRResolver* dnsrr_resolver() const {
[email protected]2db580532010-10-08 14:32:3772 return dnsrr_resolver_;
73 }
74
[email protected]27a112c2011-01-06 04:19:3075 void set_dnsrr_resolver(DnsRRResolver* dnsrr_resolver) {
[email protected]2fb629202010-12-23 23:52:5776 dnsrr_resolver_ = dnsrr_resolver;
77 }
78
[email protected]27a112c2011-01-06 04:19:3079 DnsCertProvenanceChecker* dns_cert_checker() const {
[email protected]f6c21cb2011-02-16 19:45:4180 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]345c613b2010-11-22 19:33:1884 }
85
[email protected]63de95b2008-12-10 04:11:2786 // Get the proxy service for this context.
[email protected]f6c21cb2011-02-16 19:45:4187 ProxyService* proxy_service() const { return proxy_service_; }
[email protected]27a112c2011-01-06 04:19:3088 void set_proxy_service(ProxyService* proxy_service) {
[email protected]2fb629202010-12-23 23:52:5789 proxy_service_ = proxy_service;
90 }
91
[email protected]db36938c2009-08-19 21:48:4292 // Get the ssl config service for this context.
[email protected]f6c21cb2011-02-16 19:45:4193 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]db36938c2009-08-19 21:48:4296 }
97
[email protected]2fb629202010-12-23 23:52:5798 // Gets the HTTP Authentication Handler Factory for this context.
99 // The factory is only valid for the lifetime of this URLRequestContext
[email protected]27a112c2011-01-06 04:19:30100 HttpAuthHandlerFactory* http_auth_handler_factory() {
[email protected]2fb629202010-12-23 23:52:57101 return http_auth_handler_factory_;
102 }
[email protected]27a112c2011-01-06 04:19:30103 void set_http_auth_handler_factory(HttpAuthHandlerFactory* factory) {
[email protected]2fb629202010-12-23 23:52:57104 http_auth_handler_factory_ = factory;
105 }
106
initial.commit586acc5fe2008-07-26 22:42:52107 // Gets the http transaction factory for this context.
[email protected]27a112c2011-01-06 04:19:30108 HttpTransactionFactory* http_transaction_factory() const {
[email protected]db8f44c2008-12-13 04:52:01109 return http_transaction_factory_;
initial.commit586acc5fe2008-07-26 22:42:52110 }
[email protected]27a112c2011-01-06 04:19:30111 void set_http_transaction_factory(HttpTransactionFactory* factory) {
[email protected]2fb629202010-12-23 23:52:57112 http_transaction_factory_ = factory;
113 }
114
[email protected]b65ce0942009-03-16 20:13:33115 // Gets the ftp transaction factory for this context.
[email protected]27a112c2011-01-06 04:19:30116 FtpTransactionFactory* ftp_transaction_factory() {
[email protected]b65ce0942009-03-16 20:13:33117 return ftp_transaction_factory_;
118 }
[email protected]f6c21cb2011-02-16 19:45:41119 void set_ftp_transaction_factory(net::FtpTransactionFactory* factory) {
120 ftp_transaction_factory_ = factory;
121 }
[email protected]b65ce0942009-03-16 20:13:33122
[email protected]0651b812011-02-24 00:22:50123 void set_network_delegate(NetworkDelegate* network_delegate) {
[email protected]d05ef99c2011-02-01 21:38:16124 network_delegate_ = network_delegate;
125 }
[email protected]0651b812011-02-24 00:22:50126 NetworkDelegate* network_delegate() const { return network_delegate_; }
[email protected]d05ef99c2011-02-01 21:38:16127
[email protected]be6fca6c2010-01-30 21:48:57128 // Gets the cookie store for this context (may be null, in which case
129 // cookies are not stored).
[email protected]f6c21cb2011-02-16 19:45:41130 CookieStore* cookie_store() const { return cookie_store_.get(); }
[email protected]27a112c2011-01-06 04:19:30131 void set_cookie_store(CookieStore* cookie_store);
[email protected]2fb629202010-12-23 23:52:57132
[email protected]be6fca6c2010-01-30 21:48:57133 // Gets the cookie policy for this context (may be null, in which case
134 // cookies are allowed).
[email protected]f6c21cb2011-02-16 19:45:41135 CookiePolicy* cookie_policy() const { return cookie_policy_; }
136 void set_cookie_policy(CookiePolicy* cookie_policy) {
137 cookie_policy_ = cookie_policy;
138 }
initial.commit586acc5fe2008-07-26 22:42:52139
[email protected]f6c21cb2011-02-16 19:45:41140 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]a9cea7542009-05-20 04:30:23147
[email protected]515838c2009-01-15 06:43:48148 // Gets the FTP authentication cache for this context.
[email protected]27a112c2011-01-06 04:19:30149 FtpAuthCache* ftp_auth_cache() { return &ftp_auth_cache_; }
initial.commit586acc5fe2008-07-26 22:42:52150
initial.commit586acc5fe2008-07-26 22:42:52151 // Gets the value of 'Accept-Charset' header field.
152 const std::string& accept_charset() const { return accept_charset_; }
[email protected]f6c21cb2011-02-16 19:45:41153 void set_accept_charset(const std::string& accept_charset) {
154 accept_charset_ = accept_charset;
155 }
initial.commit586acc5fe2008-07-26 22:42:52156
157 // Gets the value of 'Accept-Language' header field.
158 const std::string& accept_language() const { return accept_language_; }
[email protected]f6c21cb2011-02-16 19:45:41159 void set_accept_language(const std::string& accept_language) {
160 accept_language_ = accept_language;
161 }
initial.commit586acc5fe2008-07-26 22:42:52162
[email protected]6f681a42009-01-27 22:28:54163 // 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]f1d81922010-07-31 17:47:09166 virtual const std::string& GetUserAgent(const GURL& url) const;
initial.commit586acc5fe2008-07-26 22:42:52167
[email protected]c9825a42009-05-01 22:51:50168 // 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]70b92342010-10-12 05:54:06175 // 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.commit586acc5fe2008-07-26 22:42:52180 protected:
[email protected]6f681a42009-01-27 22:28:54181 friend class base::RefCountedThreadSafe<URLRequestContext>;
182
[email protected]9349cfb2010-08-31 18:00:53183 virtual ~URLRequestContext();
[email protected]6f681a42009-01-27 22:28:54184
[email protected]f6c21cb2011-02-16 19:45:41185 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]27a112c2011-01-06 04:19:30191 NetLog* net_log_;
192 HostResolver* host_resolver_;
193 CertVerifier* cert_verifier_;
194 DnsRRResolver* dnsrr_resolver_;
[email protected]f6c21cb2011-02-16 19:45:41195 DnsCertProvenanceChecker* dns_cert_checker_;
196 HttpAuthHandlerFactory* http_auth_handler_factory_;
[email protected]27a112c2011-01-06 04:19:30197 scoped_refptr<ProxyService> proxy_service_;
198 scoped_refptr<SSLConfigService> ssl_config_service_;
[email protected]0651b812011-02-24 00:22:50199 NetworkDelegate* network_delegate_;
[email protected]27a112c2011-01-06 04:19:30200 scoped_refptr<CookieStore> cookie_store_;
201 CookiePolicy* cookie_policy_;
202 scoped_refptr<TransportSecurityState> transport_security_state_;
203 FtpAuthCache ftp_auth_cache_;
initial.commit586acc5fe2008-07-26 22:42:52204 std::string accept_language_;
205 std::string accept_charset_;
[email protected]c9825a42009-05-01 22:51:50206 // 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.commit586acc5fe2008-07-26 22:42:52210
[email protected]f6c21cb2011-02-16 19:45:41211 HttpTransactionFactory* http_transaction_factory_;
212 FtpTransactionFactory* ftp_transaction_factory_;
[email protected]70b92342010-10-12 05:54:06213
[email protected]6f681a42009-01-27 22:28:54214 DISALLOW_COPY_AND_ASSIGN(URLRequestContext);
initial.commit586acc5fe2008-07-26 22:42:52215};
216
[email protected]27a112c2011-01-06 04:19:30217} // namespace net
218
[email protected]43530b32008-08-04 22:21:34219#endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_