// 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. #ifndef NET_URL_REQUEST_URL_REQUEST_CONTEXT_STORAGE_H_ #define NET_URL_REQUEST_URL_REQUEST_CONTEXT_STORAGE_H_ #include "base/basictypes.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "net/base/net_export.h" namespace net { class CertVerifier; class ChannelIDService; class CookieStore; class FraudulentCertificateReporter; class FtpTransactionFactory; class HostResolver; class HttpAuthHandlerFactory; class HttpServerProperties; class HttpTransactionFactory; class HttpUserAgentSettings; class NetLog; class NetworkDelegate; class ProxyService; class SdchManager; class SSLConfigService; class TransportSecurityState; class URLRequestContext; class URLRequestJobFactory; class URLRequestThrottlerManager; // URLRequestContextStorage is a helper class that provides storage for unowned // member variables of URLRequestContext. class NET_EXPORT URLRequestContextStorage { public: // Note that URLRequestContextStorage does not acquire a reference to // URLRequestContext, since it is often designed to be embedded in a // URLRequestContext subclass. explicit URLRequestContextStorage(URLRequestContext* context); ~URLRequestContextStorage(); // These setters will set both the member variables and call the setter on the // URLRequestContext object. In all cases, ownership is passed to |this|. void set_net_log(NetLog* net_log); void set_host_resolver(scoped_ptr host_resolver); void set_cert_verifier(CertVerifier* cert_verifier); void set_channel_id_service(scoped_ptr channel_id_service); void set_fraudulent_certificate_reporter( FraudulentCertificateReporter* fraudulent_certificate_reporter); void set_http_auth_handler_factory( HttpAuthHandlerFactory* http_auth_handler_factory); void set_proxy_service(ProxyService* proxy_service); void set_ssl_config_service(SSLConfigService* ssl_config_service); void set_network_delegate(NetworkDelegate* network_delegate); void set_http_server_properties( scoped_ptr http_server_properties); void set_cookie_store(CookieStore* cookie_store); void set_transport_security_state( TransportSecurityState* transport_security_state); void set_http_transaction_factory( HttpTransactionFactory* http_transaction_factory); void set_job_factory(URLRequestJobFactory* job_factory); void set_throttler_manager(URLRequestThrottlerManager* throttler_manager); void set_http_user_agent_settings( HttpUserAgentSettings* http_user_agent_settings); void set_sdch_manager(scoped_ptr sdch_manager); private: // We use a raw pointer to prevent reference cycles, since // URLRequestContextStorage can often be contained within a URLRequestContext // subclass. URLRequestContext* const context_; // Owned members. scoped_ptr net_log_; scoped_ptr host_resolver_; scoped_ptr cert_verifier_; // The ChannelIDService must outlive the HttpTransactionFactory. scoped_ptr channel_id_service_; scoped_ptr fraudulent_certificate_reporter_; scoped_ptr http_auth_handler_factory_; scoped_ptr proxy_service_; // TODO(willchan): Remove refcounting on these members. scoped_refptr ssl_config_service_; scoped_ptr network_delegate_; scoped_ptr http_server_properties_; scoped_ptr http_user_agent_settings_; scoped_refptr cookie_store_; scoped_ptr transport_security_state_; scoped_ptr http_transaction_factory_; scoped_ptr job_factory_; scoped_ptr throttler_manager_; scoped_ptr sdch_manager_; DISALLOW_COPY_AND_ASSIGN(URLRequestContextStorage); }; } // namespace net #endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_STORAGE_H_