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 #ifndef NET_URL_REQUEST_URL_REQUEST_CONTEXT_STORAGE_H_ 6 #define NET_URL_REQUEST_URL_REQUEST_CONTEXT_STORAGE_H_ 7 8 #include "base/basictypes.h" 9 #include "base/memory/ref_counted.h" 10 #include "base/memory/scoped_ptr.h" 11 #include "net/base/net_export.h" 12 13 namespace net { 14 15 class CertVerifier; 16 class CookieStore; 17 class FraudulentCertificateReporter; 18 class FtpTransactionFactory; 19 class HostResolver; 20 class HttpAuthHandlerFactory; 21 class HttpServerProperties; 22 class HttpTransactionFactory; 23 class HttpUserAgentSettings; 24 class NetLog; 25 class NetworkDelegate; 26 class ServerBoundCertService; 27 class ProxyService; 28 class SSLConfigService; 29 class TransportSecurityState; 30 class URLRequestContext; 31 class URLRequestJobFactory; 32 class URLRequestThrottlerManager; 33 34 // URLRequestContextStorage is a helper class that provides storage for unowned 35 // member variables of URLRequestContext. 36 class NET_EXPORT URLRequestContextStorage { 37 public: 38 // Note that URLRequestContextStorage does not acquire a reference to 39 // URLRequestContext, since it is often designed to be embedded in a 40 // URLRequestContext subclass. 41 explicit URLRequestContextStorage(URLRequestContext* context); 42 ~URLRequestContextStorage(); 43 44 // These setters will set both the member variables and call the setter on the 45 // URLRequestContext object. In all cases, ownership is passed to |this|. 46 47 void set_net_log(NetLog* net_log); 48 void set_host_resolver(scoped_ptr<HostResolver> host_resolver); 49 void set_cert_verifier(CertVerifier* cert_verifier); 50 void set_server_bound_cert_service( 51 ServerBoundCertService* server_bound_cert_service); 52 void set_fraudulent_certificate_reporter( 53 FraudulentCertificateReporter* fraudulent_certificate_reporter); 54 void set_http_auth_handler_factory( 55 HttpAuthHandlerFactory* http_auth_handler_factory); 56 void set_proxy_service(ProxyService* proxy_service); 57 void set_ssl_config_service(SSLConfigService* ssl_config_service); 58 void set_network_delegate(NetworkDelegate* network_delegate); 59 void set_http_server_properties( 60 scoped_ptr<HttpServerProperties> http_server_properties); 61 void set_cookie_store(CookieStore* cookie_store); 62 void set_transport_security_state( 63 TransportSecurityState* transport_security_state); 64 void set_http_transaction_factory( 65 HttpTransactionFactory* http_transaction_factory); 66 void set_job_factory(URLRequestJobFactory* job_factory); 67 void set_throttler_manager(URLRequestThrottlerManager* throttler_manager); 68 void set_http_user_agent_settings( 69 HttpUserAgentSettings* http_user_agent_settings); 70 71 private: 72 // We use a raw pointer to prevent reference cycles, since 73 // URLRequestContextStorage can often be contained within a URLRequestContext 74 // subclass. 75 URLRequestContext* const context_; 76 77 // Owned members. 78 scoped_ptr<NetLog> net_log_; 79 scoped_ptr<HostResolver> host_resolver_; 80 scoped_ptr<CertVerifier> cert_verifier_; 81 // The ServerBoundCertService must outlive the HttpTransactionFactory. 82 scoped_ptr<ServerBoundCertService> server_bound_cert_service_; 83 scoped_ptr<FraudulentCertificateReporter> fraudulent_certificate_reporter_; 84 scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_; 85 scoped_ptr<ProxyService> proxy_service_; 86 // TODO(willchan): Remove refcounting on these members. 87 scoped_refptr<SSLConfigService> ssl_config_service_; 88 scoped_ptr<NetworkDelegate> network_delegate_; 89 scoped_ptr<HttpServerProperties> http_server_properties_; 90 scoped_ptr<HttpUserAgentSettings> http_user_agent_settings_; 91 scoped_refptr<CookieStore> cookie_store_; 92 scoped_ptr<TransportSecurityState> transport_security_state_; 93 94 scoped_ptr<HttpTransactionFactory> http_transaction_factory_; 95 scoped_ptr<URLRequestJobFactory> job_factory_; 96 scoped_ptr<URLRequestThrottlerManager> throttler_manager_; 97 98 DISALLOW_COPY_AND_ASSIGN(URLRequestContextStorage); 99 }; 100 101 } // namespace net 102 103 #endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_STORAGE_H_ 104