| // Copyright 2014 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 CHROMECAST_BROWSER_URL_REQUEST_CONTEXT_FACTORY_H_ |
| #define CHROMECAST_BROWSER_URL_REQUEST_CONTEXT_FACTORY_H_ |
| |
| #include "content/public/browser/browser_context.h" |
| #include "content/public/browser/content_browser_client.h" |
| #include "net/http/http_network_session.h" |
| |
| namespace net { |
| class CookieStore; |
| class HttpTransactionFactory; |
| class HttpUserAgentSettings; |
| class NetLog; |
| class ProxyConfigService; |
| class URLRequestJobFactory; |
| } // namespace net |
| |
| namespace chromecast { |
| namespace shell { |
| class CastNetworkDelegate; |
| |
| class URLRequestContextFactory { |
| public: |
| URLRequestContextFactory(); |
| ~URLRequestContextFactory(); |
| |
| // Some members must be initialized on UI thread. |
| void InitializeOnUIThread(net::NetLog* net_log); |
| |
| // Since main context requires a bunch of input params, if these get called |
| // multiple times, either multiple main contexts should be supported/managed |
| // or the input params need to be the same as before. So to be safe, |
| // the CreateMainGetter function currently DCHECK to make sure it is not |
| // called more than once. |
| // The media and system getters however, do not need input, so it is actually |
| // safe to call these multiple times. The impl create only 1 getter of each |
| // type and return the same instance each time the methods are called, thus |
| // the name difference. |
| net::URLRequestContextGetter* GetSystemGetter(); |
| net::URLRequestContextGetter* CreateMainGetter( |
| content::BrowserContext* browser_context, |
| content::ProtocolHandlerMap* protocol_handlers, |
| content::URLRequestInterceptorScopedVector request_interceptors); |
| net::URLRequestContextGetter* GetMainGetter(); |
| net::URLRequestContextGetter* GetMediaGetter(); |
| |
| CastNetworkDelegate* app_network_delegate() const { |
| return app_network_delegate_.get(); |
| } |
| |
| net::HostResolver* host_resolver() const { |
| return host_resolver_.get(); |
| } |
| |
| // Initialize the CastNetworkDelegate objects. This needs to be done |
| // after the CastService is created, but before any URL requests are made. |
| void InitializeNetworkDelegates(); |
| |
| private: |
| class URLRequestContextGetter; |
| class MainURLRequestContextGetter; |
| friend class URLRequestContextGetter; |
| friend class MainURLRequestContextGetter; |
| |
| void InitializeSystemContextDependencies(); |
| void InitializeMainContextDependencies( |
| net::HttpTransactionFactory* factory, |
| content::ProtocolHandlerMap* protocol_handlers, |
| content::URLRequestInterceptorScopedVector request_interceptors); |
| void InitializeMediaContextDependencies(net::HttpTransactionFactory* factory); |
| |
| void PopulateNetworkSessionParams(bool ignore_certificate_errors, |
| net::HttpNetworkSession::Params* params); |
| |
| // These are called by the RequestContextGetters to create each |
| // RequestContext. |
| // They must be called on the IO thread. |
| net::URLRequestContext* CreateSystemRequestContext(); |
| net::URLRequestContext* CreateMediaRequestContext(); |
| net::URLRequestContext* CreateMainRequestContext( |
| content::BrowserContext* browser_context, |
| content::ProtocolHandlerMap* protocol_handlers, |
| content::URLRequestInterceptorScopedVector request_interceptors); |
| |
| scoped_refptr<net::URLRequestContextGetter> system_getter_; |
| scoped_refptr<net::URLRequestContextGetter> media_getter_; |
| scoped_refptr<net::URLRequestContextGetter> main_getter_; |
| std::unique_ptr<CastNetworkDelegate> app_network_delegate_; |
| std::unique_ptr<CastNetworkDelegate> system_network_delegate_; |
| |
| // Shared objects for all contexts. |
| // The URLRequestContextStorage class is not used as owner to these objects |
| // since they are shared between the different URLRequestContexts. |
| // The URLRequestContextStorage class manages dependent resources for a single |
| // instance of URLRequestContext only. |
| bool system_dependencies_initialized_; |
| std::unique_ptr<net::HostResolver> host_resolver_; |
| std::unique_ptr<net::ChannelIDService> channel_id_service_; |
| std::unique_ptr<net::CertVerifier> cert_verifier_; |
| scoped_refptr<net::SSLConfigService> ssl_config_service_; |
| std::unique_ptr<net::TransportSecurityState> transport_security_state_; |
| std::unique_ptr<net::ProxyConfigService> proxy_config_service_; |
| std::unique_ptr<net::ProxyService> proxy_service_; |
| std::unique_ptr<net::HttpAuthHandlerFactory> http_auth_handler_factory_; |
| std::unique_ptr<net::HttpServerProperties> http_server_properties_; |
| std::unique_ptr<net::HttpUserAgentSettings> http_user_agent_settings_; |
| std::unique_ptr<net::HttpTransactionFactory> system_transaction_factory_; |
| std::unique_ptr<net::CookieStore> system_cookie_store_; |
| std::unique_ptr<net::URLRequestJobFactory> system_job_factory_; |
| |
| bool main_dependencies_initialized_; |
| std::unique_ptr<net::HttpTransactionFactory> main_transaction_factory_; |
| std::unique_ptr<net::CookieStore> main_cookie_store_; |
| std::unique_ptr<net::URLRequestJobFactory> main_job_factory_; |
| |
| bool media_dependencies_initialized_; |
| std::unique_ptr<net::HttpTransactionFactory> media_transaction_factory_; |
| |
| net::NetLog* net_log_; |
| }; |
| |
| } // namespace shell |
| } // namespace chromecast |
| |
| #endif // CHROMECAST_BROWSER_URL_REQUEST_CONTEXT_FACTORY_H_ |