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