diff options
Diffstat (limited to 'chromium/net/url_request/url_request_context.h')
-rw-r--r-- | chromium/net/url_request/url_request_context.h | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/chromium/net/url_request/url_request_context.h b/chromium/net/url_request/url_request_context.h new file mode 100644 index 00000000000..bf9921e4f76 --- /dev/null +++ b/chromium/net/url_request/url_request_context.h @@ -0,0 +1,239 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This class represents contextual information (cookies, cache, etc.) +// that's useful when processing resource requests. +// The class is reference-counted so that it can be cleaned up after any +// requests that are using it have been completed. + +#ifndef NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_ +#define NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_ + +#include <set> +#include <string> + +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" +#include "base/threading/non_thread_safe.h" +#include "net/base/net_export.h" +#include "net/base/net_log.h" +#include "net/http/http_network_session.h" +#include "net/http/http_server_properties.h" +#include "net/http/transport_security_state.h" +#include "net/ssl/ssl_config_service.h" +#include "net/url_request/url_request.h" + +namespace net { +class CertVerifier; +class CookieStore; +class FraudulentCertificateReporter; +class HostResolver; +class HttpAuthHandlerFactory; +class HttpTransactionFactory; +class HttpUserAgentSettings; +class NetworkDelegate; +class ServerBoundCertService; +class ProxyService; +class URLRequest; +class URLRequestJobFactory; +class URLRequestThrottlerManager; + +// Subclass to provide application-specific context for URLRequest +// instances. Note that URLRequestContext typically does not provide storage for +// these member variables, since they may be shared. For the ones that aren't +// shared, URLRequestContextStorage can be helpful in defining their storage. +class NET_EXPORT URLRequestContext + : NON_EXPORTED_BASE(public base::NonThreadSafe) { + public: + URLRequestContext(); + virtual ~URLRequestContext(); + + // Copies the state from |other| into this context. + void CopyFrom(const URLRequestContext* other); + + // May return NULL if this context doesn't have an associated network session. + const HttpNetworkSession::Params* GetNetworkSessionParams() const; + + URLRequest* CreateRequest( + const GURL& url, URLRequest::Delegate* delegate) const; + + NetLog* net_log() const { + return net_log_; + } + + void set_net_log(NetLog* net_log) { + net_log_ = net_log; + } + + HostResolver* host_resolver() const { + return host_resolver_; + } + + void set_host_resolver(HostResolver* host_resolver) { + host_resolver_ = host_resolver; + } + + CertVerifier* cert_verifier() const { + return cert_verifier_; + } + + void set_cert_verifier(CertVerifier* cert_verifier) { + cert_verifier_ = cert_verifier; + } + + ServerBoundCertService* server_bound_cert_service() const { + return server_bound_cert_service_; + } + + void set_server_bound_cert_service( + ServerBoundCertService* server_bound_cert_service) { + server_bound_cert_service_ = server_bound_cert_service; + } + + FraudulentCertificateReporter* fraudulent_certificate_reporter() const { + return fraudulent_certificate_reporter_; + } + void set_fraudulent_certificate_reporter( + FraudulentCertificateReporter* fraudulent_certificate_reporter) { + fraudulent_certificate_reporter_ = fraudulent_certificate_reporter; + } + + // Get the proxy service for this context. + ProxyService* proxy_service() const { return proxy_service_; } + void set_proxy_service(ProxyService* proxy_service) { + proxy_service_ = proxy_service; + } + + // Get the ssl config service for this context. + SSLConfigService* ssl_config_service() const { + return ssl_config_service_.get(); + } + void set_ssl_config_service(SSLConfigService* service) { + ssl_config_service_ = service; + } + + // Gets the HTTP Authentication Handler Factory for this context. + // The factory is only valid for the lifetime of this URLRequestContext + HttpAuthHandlerFactory* http_auth_handler_factory() const { + return http_auth_handler_factory_; + } + void set_http_auth_handler_factory(HttpAuthHandlerFactory* factory) { + http_auth_handler_factory_ = factory; + } + + // Gets the http transaction factory for this context. + HttpTransactionFactory* http_transaction_factory() const { + return http_transaction_factory_; + } + void set_http_transaction_factory(HttpTransactionFactory* factory) { + http_transaction_factory_ = factory; + } + + void set_network_delegate(NetworkDelegate* network_delegate) { + network_delegate_ = network_delegate; + } + NetworkDelegate* network_delegate() const { return network_delegate_; } + + void set_http_server_properties( + const base::WeakPtr<HttpServerProperties>& http_server_properties) { + http_server_properties_ = http_server_properties; + } + base::WeakPtr<HttpServerProperties> http_server_properties() const { + return http_server_properties_; + } + + // Gets the cookie store for this context (may be null, in which case + // cookies are not stored). + CookieStore* cookie_store() const { return cookie_store_.get(); } + void set_cookie_store(CookieStore* cookie_store); + + TransportSecurityState* transport_security_state() const { + return transport_security_state_; + } + void set_transport_security_state( + TransportSecurityState* state) { + transport_security_state_ = state; + } + + // --------------------------------------------------------------------------- + // Legacy accessors that delegate to http_user_agent_settings_. + // TODO(pauljensen): Remove after all clients are updated to directly access + // http_user_agent_settings_. + // Gets the value of 'Accept-Language' header field. + std::string GetAcceptLanguage() const; + // Gets the UA string to use for the given URL. Pass an invalid URL (such as + // GURL()) to get the default UA string. + std::string GetUserAgent(const GURL& url) const; + // --------------------------------------------------------------------------- + + const URLRequestJobFactory* job_factory() const { return job_factory_; } + void set_job_factory(const URLRequestJobFactory* job_factory) { + job_factory_ = job_factory; + } + + // May be NULL. + URLRequestThrottlerManager* throttler_manager() const { + return throttler_manager_; + } + void set_throttler_manager(URLRequestThrottlerManager* throttler_manager) { + throttler_manager_ = throttler_manager; + } + + // Gets the URLRequest objects that hold a reference to this + // URLRequestContext. + std::set<const URLRequest*>* url_requests() const { + return url_requests_.get(); + } + + void AssertNoURLRequests() const; + + // Get the underlying |HttpUserAgentSettings| implementation that provides + // the HTTP Accept-Language and User-Agent header values. + const HttpUserAgentSettings* http_user_agent_settings() const { + return http_user_agent_settings_; + } + void set_http_user_agent_settings( + HttpUserAgentSettings* http_user_agent_settings) { + http_user_agent_settings_ = http_user_agent_settings; + } + + private: + // --------------------------------------------------------------------------- + // Important: When adding any new members below, consider whether they need to + // be added to CopyFrom. + // --------------------------------------------------------------------------- + + // Ownership for these members are not defined here. Clients should either + // provide storage elsewhere or have a subclass take ownership. + NetLog* net_log_; + HostResolver* host_resolver_; + CertVerifier* cert_verifier_; + ServerBoundCertService* server_bound_cert_service_; + FraudulentCertificateReporter* fraudulent_certificate_reporter_; + HttpAuthHandlerFactory* http_auth_handler_factory_; + ProxyService* proxy_service_; + scoped_refptr<SSLConfigService> ssl_config_service_; + NetworkDelegate* network_delegate_; + base::WeakPtr<HttpServerProperties> http_server_properties_; + HttpUserAgentSettings* http_user_agent_settings_; + scoped_refptr<CookieStore> cookie_store_; + TransportSecurityState* transport_security_state_; + HttpTransactionFactory* http_transaction_factory_; + const URLRequestJobFactory* job_factory_; + URLRequestThrottlerManager* throttler_manager_; + + // --------------------------------------------------------------------------- + // Important: When adding any new members below, consider whether they need to + // be added to CopyFrom. + // --------------------------------------------------------------------------- + + scoped_ptr<std::set<const URLRequest*> > url_requests_; + + DISALLOW_COPY_AND_ASSIGN(URLRequestContext); +}; + +} // namespace net + +#endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_ |