// 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/content_browser_client.h" #include "net/http/http_network_session.h" namespace net { class HttpTransactionFactory; class HttpUserAgentSettings; 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(); // 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 system_getter_; scoped_refptr media_getter_; scoped_refptr main_getter_; scoped_ptr app_network_delegate_; scoped_ptr 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_; scoped_ptr host_resolver_; scoped_ptr channel_id_service_; scoped_ptr cert_verifier_; scoped_refptr ssl_config_service_; scoped_ptr transport_security_state_; scoped_ptr proxy_config_service_; scoped_ptr proxy_service_; scoped_ptr http_auth_handler_factory_; scoped_ptr http_server_properties_; scoped_ptr http_user_agent_settings_; scoped_ptr system_transaction_factory_; scoped_ptr system_job_factory_; bool main_dependencies_initialized_; scoped_ptr main_transaction_factory_; scoped_ptr main_job_factory_; bool media_dependencies_initialized_; scoped_ptr media_transaction_factory_; }; } // namespace shell } // namespace chromecast #endif // CHROMECAST_BROWSER_URL_REQUEST_CONTEXT_FACTORY_H_