| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "headless/lib/browser/headless_url_request_context_getter.h" | 5 #include "headless/lib/browser/headless_url_request_context_getter.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 } // namespace | 51 } // namespace |
| 52 | 52 |
| 53 HeadlessURLRequestContextGetter::HeadlessURLRequestContextGetter( | 53 HeadlessURLRequestContextGetter::HeadlessURLRequestContextGetter( |
| 54 bool ignore_certificate_errors, | 54 bool ignore_certificate_errors, |
| 55 const base::FilePath& base_path, | 55 const base::FilePath& base_path, |
| 56 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, | 56 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, |
| 57 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner, | 57 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner, |
| 58 content::ProtocolHandlerMap* protocol_handlers, | 58 content::ProtocolHandlerMap* protocol_handlers, |
| 59 content::URLRequestInterceptorScopedVector request_interceptors, | 59 content::URLRequestInterceptorScopedVector request_interceptors, |
| 60 net::NetLog* net_log, | 60 net::NetLog* net_log, |
| 61 const HeadlessBrowser::Options& options) | 61 HeadlessBrowser::Options* options) |
| 62 : ignore_certificate_errors_(ignore_certificate_errors), | 62 : ignore_certificate_errors_(ignore_certificate_errors), |
| 63 base_path_(base_path), | 63 base_path_(base_path), |
| 64 io_task_runner_(std::move(io_task_runner)), | 64 io_task_runner_(std::move(io_task_runner)), |
| 65 file_task_runner_(std::move(file_task_runner)), | 65 file_task_runner_(std::move(file_task_runner)), |
| 66 net_log_(net_log), | 66 net_log_(net_log), |
| 67 options_(options), | 67 user_agent_(options->user_agent), |
| 68 host_resolver_rules_(options->host_resolver_rules), |
| 69 proxy_server_(options->proxy_server), |
| 68 request_interceptors_(std::move(request_interceptors)) { | 70 request_interceptors_(std::move(request_interceptors)) { |
| 69 // Must first be created on the UI thread. | 71 // Must first be created on the UI thread. |
| 70 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 72 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 71 | 73 |
| 72 std::swap(protocol_handlers_, *protocol_handlers); | 74 std::swap(protocol_handlers_, *protocol_handlers); |
| 73 | 75 |
| 74 // We must create the proxy config service on the UI loop on Linux because it | 76 // We must create the proxy config service on the UI loop on Linux because it |
| 75 // must synchronously run on the glib message loop. This will be passed to | 77 // must synchronously run on the glib message loop. This will be passed to |
| 76 // the URLRequestContextStorage on the IO thread in GetURLRequestContext(). | 78 // the URLRequestContextStorage on the IO thread in GetURLRequestContext(). |
| 77 if (options_.proxy_server.IsEmpty()) | 79 if (proxy_server_.IsEmpty()) |
| 78 proxy_config_service_ = GetProxyConfigService(); | 80 proxy_config_service_ = GetProxyConfigService(); |
| 79 } | 81 } |
| 80 | 82 |
| 81 HeadlessURLRequestContextGetter::~HeadlessURLRequestContextGetter() {} | 83 HeadlessURLRequestContextGetter::~HeadlessURLRequestContextGetter() {} |
| 82 | 84 |
| 83 std::unique_ptr<net::NetworkDelegate> | 85 std::unique_ptr<net::NetworkDelegate> |
| 84 HeadlessURLRequestContextGetter::CreateNetworkDelegate() { | 86 HeadlessURLRequestContextGetter::CreateNetworkDelegate() { |
| 85 return nullptr; | 87 return nullptr; |
| 86 } | 88 } |
| 87 | 89 |
| 88 std::unique_ptr<net::ProxyConfigService> | 90 std::unique_ptr<net::ProxyConfigService> |
| 89 HeadlessURLRequestContextGetter::GetProxyConfigService() { | 91 HeadlessURLRequestContextGetter::GetProxyConfigService() { |
| 90 return net::ProxyService::CreateSystemProxyConfigService(io_task_runner_, | 92 return net::ProxyService::CreateSystemProxyConfigService(io_task_runner_, |
| 91 file_task_runner_); | 93 file_task_runner_); |
| 92 } | 94 } |
| 93 | 95 |
| 94 std::unique_ptr<net::ProxyService> | 96 std::unique_ptr<net::ProxyService> |
| 95 HeadlessURLRequestContextGetter::GetProxyService() { | 97 HeadlessURLRequestContextGetter::GetProxyService() { |
| 96 if (!options_.proxy_server.IsEmpty()) | 98 if (!proxy_server_.IsEmpty()) |
| 97 return net::ProxyService::CreateFixed(options_.proxy_server.ToString()); | 99 return net::ProxyService::CreateFixed(proxy_server_.ToString()); |
| 98 return net::ProxyService::CreateUsingSystemProxyResolver( | 100 return net::ProxyService::CreateUsingSystemProxyResolver( |
| 99 std::move(proxy_config_service_), 0, url_request_context_->net_log()); | 101 std::move(proxy_config_service_), 0, url_request_context_->net_log()); |
| 100 } | 102 } |
| 101 | 103 |
| 102 net::URLRequestContext* | 104 net::URLRequestContext* |
| 103 HeadlessURLRequestContextGetter::GetURLRequestContext() { | 105 HeadlessURLRequestContextGetter::GetURLRequestContext() { |
| 104 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 106 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 105 | 107 |
| 106 if (!url_request_context_) { | 108 if (!url_request_context_) { |
| 107 url_request_context_.reset(new net::URLRequestContext()); | 109 url_request_context_.reset(new net::URLRequestContext()); |
| 108 url_request_context_->set_net_log(net_log_); | 110 url_request_context_->set_net_log(net_log_); |
| 109 network_delegate_ = CreateNetworkDelegate(); | 111 network_delegate_ = CreateNetworkDelegate(); |
| 110 url_request_context_->set_network_delegate(network_delegate_.get()); | 112 url_request_context_->set_network_delegate(network_delegate_.get()); |
| 111 storage_.reset( | 113 storage_.reset( |
| 112 new net::URLRequestContextStorage(url_request_context_.get())); | 114 new net::URLRequestContextStorage(url_request_context_.get())); |
| 113 storage_->set_cookie_store( | 115 storage_->set_cookie_store( |
| 114 content::CreateCookieStore(content::CookieStoreConfig())); | 116 content::CreateCookieStore(content::CookieStoreConfig())); |
| 115 storage_->set_channel_id_service(base::WrapUnique( | 117 storage_->set_channel_id_service(base::WrapUnique( |
| 116 new net::ChannelIDService(new net::DefaultChannelIDStore(nullptr), | 118 new net::ChannelIDService(new net::DefaultChannelIDStore(nullptr), |
| 117 base::WorkerPool::GetTaskRunner(true)))); | 119 base::WorkerPool::GetTaskRunner(true)))); |
| 118 // TODO(skyostil): Make language settings configurable. | 120 // TODO(skyostil): Make language settings configurable. |
| 119 storage_->set_http_user_agent_settings(base::WrapUnique( | 121 storage_->set_http_user_agent_settings(base::WrapUnique( |
| 120 new net::StaticHttpUserAgentSettings("en-us,en", options_.user_agent))); | 122 new net::StaticHttpUserAgentSettings("en-us,en", user_agent_))); |
| 121 | 123 |
| 122 std::unique_ptr<net::HostResolver> host_resolver( | 124 std::unique_ptr<net::HostResolver> host_resolver( |
| 123 net::HostResolver::CreateDefaultResolver( | 125 net::HostResolver::CreateDefaultResolver( |
| 124 url_request_context_->net_log())); | 126 url_request_context_->net_log())); |
| 125 | 127 |
| 126 storage_->set_cert_verifier(net::CertVerifier::CreateDefault()); | 128 storage_->set_cert_verifier(net::CertVerifier::CreateDefault()); |
| 127 storage_->set_transport_security_state( | 129 storage_->set_transport_security_state( |
| 128 base::WrapUnique(new net::TransportSecurityState)); | 130 base::WrapUnique(new net::TransportSecurityState)); |
| 129 storage_->set_proxy_service(GetProxyService()); | 131 storage_->set_proxy_service(GetProxyService()); |
| 130 storage_->set_ssl_config_service(new net::SSLConfigServiceDefaults); | 132 storage_->set_ssl_config_service(new net::SSLConfigServiceDefaults); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 151 url_request_context_->proxy_service(); | 153 url_request_context_->proxy_service(); |
| 152 network_session_params.ssl_config_service = | 154 network_session_params.ssl_config_service = |
| 153 url_request_context_->ssl_config_service(); | 155 url_request_context_->ssl_config_service(); |
| 154 network_session_params.http_auth_handler_factory = | 156 network_session_params.http_auth_handler_factory = |
| 155 url_request_context_->http_auth_handler_factory(); | 157 url_request_context_->http_auth_handler_factory(); |
| 156 network_session_params.http_server_properties = | 158 network_session_params.http_server_properties = |
| 157 url_request_context_->http_server_properties(); | 159 url_request_context_->http_server_properties(); |
| 158 network_session_params.net_log = url_request_context_->net_log(); | 160 network_session_params.net_log = url_request_context_->net_log(); |
| 159 network_session_params.ignore_certificate_errors = | 161 network_session_params.ignore_certificate_errors = |
| 160 ignore_certificate_errors_; | 162 ignore_certificate_errors_; |
| 161 if (!options_.host_resolver_rules.empty()) { | 163 if (!host_resolver_rules_.empty()) { |
| 162 std::unique_ptr<net::MappedHostResolver> mapped_host_resolver( | 164 std::unique_ptr<net::MappedHostResolver> mapped_host_resolver( |
| 163 new net::MappedHostResolver(std::move(host_resolver))); | 165 new net::MappedHostResolver(std::move(host_resolver))); |
| 164 mapped_host_resolver->SetRulesFromString(options_.host_resolver_rules); | 166 mapped_host_resolver->SetRulesFromString(host_resolver_rules_); |
| 165 host_resolver = std::move(mapped_host_resolver); | 167 host_resolver = std::move(mapped_host_resolver); |
| 166 } | 168 } |
| 167 | 169 |
| 168 // Give |storage_| ownership at the end in case it's |mapped_host_resolver|. | 170 // Give |storage_| ownership at the end in case it's |mapped_host_resolver|. |
| 169 storage_->set_host_resolver(std::move(host_resolver)); | 171 storage_->set_host_resolver(std::move(host_resolver)); |
| 170 network_session_params.host_resolver = | 172 network_session_params.host_resolver = |
| 171 url_request_context_->host_resolver(); | 173 url_request_context_->host_resolver(); |
| 172 | 174 |
| 173 storage_->set_http_network_session( | 175 storage_->set_http_network_session( |
| 174 base::WrapUnique(new net::HttpNetworkSession(network_session_params))); | 176 base::WrapUnique(new net::HttpNetworkSession(network_session_params))); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 HeadlessURLRequestContextGetter::GetNetworkTaskRunner() const { | 214 HeadlessURLRequestContextGetter::GetNetworkTaskRunner() const { |
| 213 return content::BrowserThread::GetMessageLoopProxyForThread( | 215 return content::BrowserThread::GetMessageLoopProxyForThread( |
| 214 content::BrowserThread::IO); | 216 content::BrowserThread::IO); |
| 215 } | 217 } |
| 216 | 218 |
| 217 net::HostResolver* HeadlessURLRequestContextGetter::host_resolver() const { | 219 net::HostResolver* HeadlessURLRequestContextGetter::host_resolver() const { |
| 218 return url_request_context_->host_resolver(); | 220 return url_request_context_->host_resolver(); |
| 219 } | 221 } |
| 220 | 222 |
| 221 } // namespace headless | 223 } // namespace headless |
| OLD | NEW |