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