Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chromecast / shell / browser / url_request_context_factory.h
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
11 namespace net {
12 class HttpTransactionFactory;
13 class HttpUserAgentSettings;
14 class URLRequestJobFactory;
15 }  // namespace net
16
17 namespace chromecast {
18 namespace shell {
19
20 class 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_