rAc - revert invalid suggestions to edit mode
[chromium-blink-merge.git] / remoting / base / url_request_context.cc
blob60f620d3f3e95685ff24caa5d044f0239ff87890
1 // Copyright 2013 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.
5 #include "remoting/base/url_request_context.h"
7 #include "base/message_loop/message_loop_proxy.h"
8 #include "net/cert/cert_verifier.h"
9 #include "net/dns/host_resolver.h"
10 #include "net/http/http_auth_handler_factory.h"
11 #include "net/http/http_network_layer.h"
12 #include "net/http/http_network_session.h"
13 #include "net/http/http_server_properties_impl.h"
14 #include "net/http/transport_security_state.h"
15 #include "net/proxy/proxy_config_service.h"
16 #include "net/proxy/proxy_service.h"
17 #include "net/ssl/ssl_config_service_defaults.h"
18 #include "remoting/base/vlog_net_log.h"
20 #if defined(OS_WIN)
21 #include "net/proxy/proxy_config_service_win.h"
22 #elif defined(OS_IOS)
23 #include "net/proxy/proxy_config_service_ios.h"
24 #elif defined(OS_MACOSX)
25 #include "net/proxy/proxy_config_service_mac.h"
26 #elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
27 #include "net/proxy/proxy_config_service_linux.h"
28 #endif
30 namespace remoting {
32 namespace {
34 // Config getter that always returns direct settings.
35 class ProxyConfigServiceDirect : public net::ProxyConfigService {
36 public:
37 // ProxyConfigService implementation:
38 virtual void AddObserver(Observer* observer) OVERRIDE {}
39 virtual void RemoveObserver(Observer* observer) OVERRIDE {}
40 virtual ConfigAvailability GetLatestProxyConfig(
41 net::ProxyConfig* config) OVERRIDE {
42 *config = net::ProxyConfig::CreateDirect();
43 return CONFIG_VALID;
47 net::ProxyConfigService* CreateSystemProxyConfigService(
48 base::SingleThreadTaskRunner* io_thread_task_runner) {
49 #if defined(OS_WIN)
50 return new net::ProxyConfigServiceWin();
51 #elif defined(OS_IOS)
52 return new net::ProxyConfigServiceIOS();
53 #elif defined(OS_MACOSX)
54 return new net::ProxyConfigServiceMac(io_thread_task_runner);
55 #elif defined(OS_CHROMEOS)
56 NOTREACHED() << "ChromeOS is not a supported target for Chromoting host";
57 return NULL;
58 #elif defined(OS_LINUX)
59 // TODO(sergeyu): Currently ProxyConfigServiceLinux depends on
60 // base::OneShotTimer that doesn't work properly on main NPAPI
61 // thread. Fix that and uncomment the code below.
63 // net::ProxyConfigServiceLinux* linux_config_service =
64 // new net::ProxyConfigServiceLinux();
65 // linux_config_service->SetupAndFetchInitialConfig(
66 // ui_message_loop_, io_message_loop->message_loop_proxy(),
67 // file_message_loop);
69 // return linux_config_service;
70 return new ProxyConfigServiceDirect();
71 #else
72 LOG(WARNING) << "Failed to choose a system proxy settings fetcher "
73 "for this platform.";
74 return new ProxyConfigServiceDirect();
75 #endif
78 } // namespace
80 // TODO(willchan): This is largely copied from service_url_request_context.cc,
81 // which is in turn copied from some test code. Move it somewhere reusable.
82 URLRequestContext::URLRequestContext(
83 scoped_ptr<net::ProxyConfigService> proxy_config_service)
84 : storage_(this) {
85 scoped_ptr<VlogNetLog> net_log(new VlogNetLog());
86 storage_.set_host_resolver(
87 net::HostResolver::CreateDefaultResolver(net_log.get()));
88 storage_.set_proxy_service(net::ProxyService::CreateUsingSystemProxyResolver(
89 proxy_config_service.release(), 0u, net_log.get()));
90 storage_.set_cert_verifier(net::CertVerifier::CreateDefault());
91 storage_.set_ssl_config_service(new net::SSLConfigServiceDefaults);
92 storage_.set_http_auth_handler_factory(
93 net::HttpAuthHandlerFactory::CreateDefault(host_resolver()));
94 storage_.set_http_server_properties(
95 scoped_ptr<net::HttpServerProperties>(
96 new net::HttpServerPropertiesImpl()));
97 storage_.set_transport_security_state(new net::TransportSecurityState);
99 net::HttpNetworkSession::Params session_params;
100 session_params.host_resolver = host_resolver();
101 session_params.cert_verifier = cert_verifier();
102 session_params.transport_security_state = transport_security_state();
103 session_params.proxy_service = proxy_service();
104 session_params.ssl_config_service = ssl_config_service();
105 session_params.http_auth_handler_factory = http_auth_handler_factory();
106 session_params.http_server_properties = http_server_properties();
107 session_params.net_log = net_log.get();
108 scoped_refptr<net::HttpNetworkSession> network_session(
109 new net::HttpNetworkSession(session_params));
110 storage_.set_http_transaction_factory(
111 new net::HttpNetworkLayer(network_session.get()));
112 storage_.set_net_log(net_log.release());
115 URLRequestContext::~URLRequestContext() {
118 URLRequestContextGetter::URLRequestContextGetter(
119 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner)
120 : network_task_runner_(network_task_runner) {
121 proxy_config_service_.reset(CreateSystemProxyConfigService(
122 network_task_runner_.get()));
125 net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() {
126 if (!url_request_context_.get()) {
127 url_request_context_.reset(
128 new URLRequestContext(proxy_config_service_.Pass()));
130 return url_request_context_.get();
133 scoped_refptr<base::SingleThreadTaskRunner>
134 URLRequestContextGetter::GetNetworkTaskRunner() const {
135 return network_task_runner_;
138 URLRequestContextGetter::~URLRequestContextGetter() {
141 } // namespace remoting