// 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 #include "base/memory/raw_ptr.h" #include "base/memory/ref_counted.h" #include "build/buildflag.h" #include "net/base/net_export.h" #include "net/net_buildflags.h" namespace net { class CertVerifier; class CookieStore; class CTPolicyEnforcer; class HostResolver; class HttpAuthHandlerFactory; class HttpNetworkSession; class HttpServerProperties; class HttpTransactionFactory; class HttpUserAgentSettings; class NetworkDelegate; class ProxyDelegate; class ProxyResolutionService; class QuicContext; class SCTAuditingDelegate; class SSLConfigService; class TransportSecurityState; class URLRequestContext; class ClientSocketFactory; class URLRequestJobFactory; class URLRequestThrottlerManager; #if BUILDFLAG(ENABLE_REPORTING) class NetworkErrorLoggingService; class PersistentReportingAndNelStore; class ReportingService; #endif // BUILDFLAG(ENABLE_REPORTING) // 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(const URLRequestContextStorage&) = delete; URLRequestContextStorage& operator=(const URLRequestContextStorage&) = delete; ~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_host_resolver(std::unique_ptr host_resolver); void set_cert_verifier(std::unique_ptr cert_verifier); void set_http_auth_handler_factory( std::unique_ptr http_auth_handler_factory); void set_proxy_delegate(std::unique_ptr proxy_delegate); void set_network_delegate(std::unique_ptr network_delegate); void set_proxy_resolution_service( std::unique_ptr proxy_resolution_service); void set_ssl_config_service( std::unique_ptr ssl_config_service); void set_http_server_properties( std::unique_ptr http_server_properties); void set_cookie_store(std::unique_ptr cookie_store); void set_transport_security_state( std::unique_ptr transport_security_state); void set_ct_policy_enforcer( std::unique_ptr ct_policy_enforcer); void set_sct_auditing_delegate( std::unique_ptr sct_auditing_delegate); void set_http_network_session( std::unique_ptr http_network_session); void set_http_transaction_factory( std::unique_ptr http_transaction_factory); void set_job_factory(std::unique_ptr job_factory); void set_throttler_manager( std::unique_ptr throttler_manager); void set_quic_context(std::unique_ptr quic_context); void set_http_user_agent_settings( std::unique_ptr http_user_agent_settings); #if BUILDFLAG(ENABLE_REPORTING) void set_persistent_reporting_and_nel_store( std::unique_ptr persistent_reporting_and_nel_store); void set_reporting_service( std::unique_ptr reporting_service); void set_network_error_logging_service( std::unique_ptr network_error_logging_service); #endif // BUILDFLAG(ENABLE_REPORTING) void set_client_socket_factory( std::unique_ptr client_socket_factory); // Everything else can be access through the URLRequestContext, but this // cannot. Having an accessor for it makes usage a little cleaner. HttpNetworkSession* http_network_session() const { return http_network_session_.get(); } private: // Not owned. const raw_ptr context_; // Owned members. std::unique_ptr host_resolver_; std::unique_ptr cert_verifier_; std::unique_ptr http_auth_handler_factory_; std::unique_ptr proxy_delegate_; std::unique_ptr network_delegate_; std::unique_ptr proxy_resolution_service_; std::unique_ptr ssl_config_service_; std::unique_ptr http_server_properties_; std::unique_ptr http_user_agent_settings_; std::unique_ptr cookie_store_; std::unique_ptr transport_security_state_; std::unique_ptr ct_policy_enforcer_; std::unique_ptr sct_auditing_delegate_; std::unique_ptr quic_context_; std::unique_ptr client_socket_factory_; // Not actually pointed at by the URLRequestContext, but may be used (but not // owned) by the HttpTransactionFactory. std::unique_ptr http_network_session_; std::unique_ptr http_transaction_factory_; std::unique_ptr job_factory_; std::unique_ptr throttler_manager_; #if BUILDFLAG(ENABLE_REPORTING) // Must precede |reporting_service_| and |network_error_logging_service_| std::unique_ptr persistent_reporting_and_nel_store_; std::unique_ptr reporting_service_; std::unique_ptr network_error_logging_service_; #endif // BUILDFLAG(ENABLE_REPORTING) }; } // namespace net #endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_STORAGE_H_