url_request_context_factory.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1// Copyright 2014 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 CHROMECAST_SHELL_BROWSER_URL_REQUEST_CONTEXT_FACTORY_H_ 6#define CHROMECAST_SHELL_BROWSER_URL_REQUEST_CONTEXT_FACTORY_H_ 7 8#include "content/public/browser/content_browser_client.h" 9#include "net/http/http_network_session.h" 10 11namespace net { 12class HttpTransactionFactory; 13class HttpUserAgentSettings; 14class URLRequestJobFactory; 15} // namespace net 16 17namespace chromecast { 18namespace shell { 19 20class URLRequestContextFactory { 21 public: 22 URLRequestContextFactory(); 23 ~URLRequestContextFactory(); 24 25 // Some members must be initialized on UI thread. 26 void InitializeOnUIThread(); 27 28 // Since main context requires a bunch of input params, if these get called 29 // multiple times, either multiple main contexts should be supported/managed 30 // or the input params need to be the same as before. So to be safe, 31 // the CreateMainGetter function currently DCHECK to make sure it is not 32 // called more than once. 33 // The media and system getters however, do not need input, so it is actually 34 // safe to call these multiple times. The impl create only 1 getter of each 35 // type and return the same instance each time the methods are called, thus 36 // the name difference. 37 net::URLRequestContextGetter* GetSystemGetter(); 38 net::URLRequestContextGetter* CreateMainGetter( 39 content::BrowserContext* browser_context, 40 content::ProtocolHandlerMap* protocol_handlers, 41 content::URLRequestInterceptorScopedVector request_interceptors); 42 net::URLRequestContextGetter* GetMainGetter(); 43 net::URLRequestContextGetter* GetMediaGetter(); 44 45 private: 46 class URLRequestContextGetter; 47 class MainURLRequestContextGetter; 48 friend class URLRequestContextGetter; 49 friend class MainURLRequestContextGetter; 50 51 void InitializeSystemContextDependencies(); 52 void InitializeMainContextDependencies( 53 net::HttpTransactionFactory* factory, 54 content::ProtocolHandlerMap* protocol_handlers, 55 content::URLRequestInterceptorScopedVector request_interceptors); 56 void InitializeMediaContextDependencies(net::HttpTransactionFactory* factory); 57 58 void PopulateNetworkSessionParams(bool ignore_certificate_errors, 59 net::HttpNetworkSession::Params* params); 60 61 // These are called by the RequestContextGetters to create each 62 // RequestContext. 63 // They must be called on the IO thread. 64 net::URLRequestContext* CreateSystemRequestContext(); 65 net::URLRequestContext* CreateMediaRequestContext(); 66 net::URLRequestContext* CreateMainRequestContext( 67 content::BrowserContext* browser_context, 68 content::ProtocolHandlerMap* protocol_handlers, 69 content::URLRequestInterceptorScopedVector request_interceptors); 70 71 scoped_refptr<net::URLRequestContextGetter> system_getter_; 72 scoped_refptr<net::URLRequestContextGetter> media_getter_; 73 scoped_refptr<net::URLRequestContextGetter> main_getter_; 74 75 // Shared objects for all contexts. 76 // The URLRequestContextStorage class is not used as owner to these objects 77 // since they are shared between the different URLRequestContexts. 78 // The URLRequestContextStorage class manages dependent resources for a single 79 // instance of URLRequestContext only. 80 bool system_dependencies_initialized_; 81 scoped_ptr<net::HostResolver> host_resolver_; 82 scoped_ptr<net::ChannelIDService> channel_id_service_; 83 scoped_ptr<net::CertVerifier> cert_verifier_; 84 scoped_refptr<net::SSLConfigService> ssl_config_service_; 85 scoped_ptr<net::TransportSecurityState> transport_security_state_; 86 scoped_ptr<net::ProxyService> proxy_service_; 87 scoped_ptr<net::HttpAuthHandlerFactory> http_auth_handler_factory_; 88 scoped_ptr<net::HttpServerProperties> http_server_properties_; 89 scoped_ptr<net::HttpUserAgentSettings> http_user_agent_settings_; 90 scoped_ptr<net::HttpTransactionFactory> system_transaction_factory_; 91 92 bool main_dependencies_initialized_; 93 scoped_ptr<net::HttpTransactionFactory> main_transaction_factory_; 94 scoped_ptr<net::URLRequestJobFactory> main_job_factory_; 95 96 bool media_dependencies_initialized_; 97 scoped_ptr<net::HttpTransactionFactory> media_transaction_factory_; 98}; 99 100} // namespace shell 101} // namespace chromecast 102 103#endif // CHROMECAST_SHELL_BROWSER_URL_REQUEST_CONTEXT_FACTORY_H_ 104