| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/url_request/url_request_context_builder.h" | 5 #include "net/url_request/url_request_context_builder.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 DISALLOW_COPY_AND_ASSIGN(BasicNetworkDelegate); | 122 DISALLOW_COPY_AND_ASSIGN(BasicNetworkDelegate); |
| 123 }; | 123 }; |
| 124 | 124 |
| 125 // Define a context class that can self-manage the ownership of its components | 125 // Define a context class that can self-manage the ownership of its components |
| 126 // via a UrlRequestContextStorage object. | 126 // via a UrlRequestContextStorage object. |
| 127 class ContainerURLRequestContext : public URLRequestContext { | 127 class ContainerURLRequestContext : public URLRequestContext { |
| 128 public: | 128 public: |
| 129 explicit ContainerURLRequestContext( | 129 explicit ContainerURLRequestContext( |
| 130 const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner) | 130 const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner) |
| 131 : file_task_runner_(file_task_runner), storage_(this) {} | 131 : file_task_runner_(file_task_runner), storage_(this) {} |
| 132 ~ContainerURLRequestContext() override { AssertNoURLRequests(); } |
| 132 | 133 |
| 133 URLRequestContextStorage* storage() { | 134 URLRequestContextStorage* storage() { |
| 134 return &storage_; | 135 return &storage_; |
| 135 } | 136 } |
| 136 | 137 |
| 137 scoped_refptr<base::SingleThreadTaskRunner>& GetFileTaskRunner() { | 138 scoped_refptr<base::SingleThreadTaskRunner>& GetFileTaskRunner() { |
| 138 // Create a new thread to run file tasks, if needed. | 139 // Create a new thread to run file tasks, if needed. |
| 139 if (!file_task_runner_) { | 140 if (!file_task_runner_) { |
| 140 DCHECK(!file_thread_); | 141 DCHECK(!file_thread_); |
| 141 file_thread_.reset(new base::Thread("Network File Thread")); | 142 file_thread_.reset(new base::Thread("Network File Thread")); |
| 142 file_thread_->StartWithOptions( | 143 file_thread_->StartWithOptions( |
| 143 base::Thread::Options(base::MessageLoop::TYPE_DEFAULT, 0)); | 144 base::Thread::Options(base::MessageLoop::TYPE_DEFAULT, 0)); |
| 144 file_task_runner_ = file_thread_->task_runner(); | 145 file_task_runner_ = file_thread_->task_runner(); |
| 145 } | 146 } |
| 146 return file_task_runner_; | 147 return file_task_runner_; |
| 147 } | 148 } |
| 148 | 149 |
| 149 void set_transport_security_persister( | 150 void set_transport_security_persister( |
| 150 scoped_ptr<TransportSecurityPersister> transport_security_persister) { | 151 scoped_ptr<TransportSecurityPersister> transport_security_persister) { |
| 151 transport_security_persister = transport_security_persister.Pass(); | 152 transport_security_persister = transport_security_persister.Pass(); |
| 152 } | 153 } |
| 153 | 154 |
| 154 protected: | |
| 155 ~ContainerURLRequestContext() override { AssertNoURLRequests(); } | |
| 156 | |
| 157 private: | 155 private: |
| 158 // The thread should be torn down last. | 156 // The thread should be torn down last. |
| 159 scoped_ptr<base::Thread> file_thread_; | 157 scoped_ptr<base::Thread> file_thread_; |
| 160 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; | 158 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; |
| 161 | 159 |
| 162 URLRequestContextStorage storage_; | 160 URLRequestContextStorage storage_; |
| 163 scoped_ptr<TransportSecurityPersister> transport_security_persister_; | 161 scoped_ptr<TransportSecurityPersister> transport_security_persister_; |
| 164 | 162 |
| 165 DISALLOW_COPY_AND_ASSIGN(ContainerURLRequestContext); | 163 DISALLOW_COPY_AND_ASSIGN(ContainerURLRequestContext); |
| 166 }; | 164 }; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 : data_enabled_(false), | 196 : data_enabled_(false), |
| 199 #if !defined(DISABLE_FILE_SUPPORT) | 197 #if !defined(DISABLE_FILE_SUPPORT) |
| 200 file_enabled_(false), | 198 file_enabled_(false), |
| 201 #endif | 199 #endif |
| 202 #if !defined(DISABLE_FTP_SUPPORT) | 200 #if !defined(DISABLE_FTP_SUPPORT) |
| 203 ftp_enabled_(false), | 201 ftp_enabled_(false), |
| 204 #endif | 202 #endif |
| 205 http_cache_enabled_(true), | 203 http_cache_enabled_(true), |
| 206 throttling_enabled_(false), | 204 throttling_enabled_(false), |
| 207 backoff_enabled_(false), | 205 backoff_enabled_(false), |
| 208 sdch_enabled_(false) { | 206 sdch_enabled_(false), |
| 207 net_log_(nullptr) { |
| 209 } | 208 } |
| 210 | 209 |
| 211 URLRequestContextBuilder::~URLRequestContextBuilder() {} | 210 URLRequestContextBuilder::~URLRequestContextBuilder() {} |
| 212 | 211 |
| 213 void URLRequestContextBuilder::SetHttpNetworkSessionComponents( | 212 void URLRequestContextBuilder::SetHttpNetworkSessionComponents( |
| 214 const URLRequestContext* context, | 213 const URLRequestContext* context, |
| 215 HttpNetworkSession::Params* params) { | 214 HttpNetworkSession::Params* params) { |
| 216 params->host_resolver = context->host_resolver(); | 215 params->host_resolver = context->host_resolver(); |
| 217 params->cert_verifier = context->cert_verifier(); | 216 params->cert_verifier = context->cert_verifier(); |
| 218 params->transport_security_state = context->transport_security_state(); | 217 params->transport_security_state = context->transport_security_state(); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 void URLRequestContextBuilder::SetFileTaskRunner( | 258 void URLRequestContextBuilder::SetFileTaskRunner( |
| 260 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { | 259 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { |
| 261 file_task_runner_ = task_runner; | 260 file_task_runner_ = task_runner; |
| 262 } | 261 } |
| 263 | 262 |
| 264 void URLRequestContextBuilder::SetHttpServerProperties( | 263 void URLRequestContextBuilder::SetHttpServerProperties( |
| 265 scoped_ptr<HttpServerProperties> http_server_properties) { | 264 scoped_ptr<HttpServerProperties> http_server_properties) { |
| 266 http_server_properties_ = http_server_properties.Pass(); | 265 http_server_properties_ = http_server_properties.Pass(); |
| 267 } | 266 } |
| 268 | 267 |
| 269 URLRequestContext* URLRequestContextBuilder::Build() { | 268 scoped_ptr<URLRequestContext> URLRequestContextBuilder::Build() { |
| 270 ContainerURLRequestContext* context = | 269 scoped_ptr<ContainerURLRequestContext> context( |
| 271 new ContainerURLRequestContext(file_task_runner_); | 270 new ContainerURLRequestContext(file_task_runner_)); |
| 272 URLRequestContextStorage* storage = context->storage(); | 271 URLRequestContextStorage* storage = context->storage(); |
| 273 | 272 |
| 274 storage->set_http_user_agent_settings(new StaticHttpUserAgentSettings( | 273 storage->set_http_user_agent_settings(new StaticHttpUserAgentSettings( |
| 275 accept_language_, user_agent_)); | 274 accept_language_, user_agent_)); |
| 276 | 275 |
| 277 if (!network_delegate_) | 276 if (!network_delegate_) |
| 278 network_delegate_.reset(new BasicNetworkDelegate); | 277 network_delegate_.reset(new BasicNetworkDelegate); |
| 279 NetworkDelegate* network_delegate = network_delegate_.release(); | 278 NetworkDelegate* network_delegate = network_delegate_.release(); |
| 280 storage->set_network_delegate(network_delegate); | 279 storage->set_network_delegate(network_delegate); |
| 281 | 280 |
| 282 if (net_log_) { | 281 if (net_log_) { |
| 283 storage->set_net_log(net_log_.release()); | 282 // Unlike the other builder parameters, |net_log_| is not owned by the |
| 283 // builder or resulting context. |
| 284 context->set_net_log(net_log_); |
| 284 } else { | 285 } else { |
| 285 storage->set_net_log(new NetLog); | 286 storage->set_net_log(new NetLog); |
| 286 } | 287 } |
| 287 | 288 |
| 288 if (!host_resolver_) { | 289 if (!host_resolver_) { |
| 289 host_resolver_ = HostResolver::CreateDefaultResolver(context->net_log()); | 290 host_resolver_ = HostResolver::CreateDefaultResolver(context->net_log()); |
| 290 } | 291 } |
| 291 storage->set_host_resolver(host_resolver_.Pass()); | 292 storage->set_host_resolver(host_resolver_.Pass()); |
| 292 | 293 |
| 293 if (!proxy_service_) { | 294 if (!proxy_service_) { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 | 359 |
| 359 storage->set_cert_verifier(CertVerifier::CreateDefault()); | 360 storage->set_cert_verifier(CertVerifier::CreateDefault()); |
| 360 | 361 |
| 361 if (throttling_enabled_) | 362 if (throttling_enabled_) |
| 362 storage->set_throttler_manager(new URLRequestThrottlerManager()); | 363 storage->set_throttler_manager(new URLRequestThrottlerManager()); |
| 363 | 364 |
| 364 if (backoff_enabled_) | 365 if (backoff_enabled_) |
| 365 storage->set_backoff_manager(new URLRequestBackoffManager()); | 366 storage->set_backoff_manager(new URLRequestBackoffManager()); |
| 366 | 367 |
| 367 HttpNetworkSession::Params network_session_params; | 368 HttpNetworkSession::Params network_session_params; |
| 368 SetHttpNetworkSessionComponents(context, &network_session_params); | 369 SetHttpNetworkSessionComponents(context.get(), &network_session_params); |
| 369 | 370 |
| 370 network_session_params.ignore_certificate_errors = | 371 network_session_params.ignore_certificate_errors = |
| 371 http_network_session_params_.ignore_certificate_errors; | 372 http_network_session_params_.ignore_certificate_errors; |
| 372 network_session_params.host_mapping_rules = | 373 network_session_params.host_mapping_rules = |
| 373 http_network_session_params_.host_mapping_rules; | 374 http_network_session_params_.host_mapping_rules; |
| 374 network_session_params.testing_fixed_http_port = | 375 network_session_params.testing_fixed_http_port = |
| 375 http_network_session_params_.testing_fixed_http_port; | 376 http_network_session_params_.testing_fixed_http_port; |
| 376 network_session_params.testing_fixed_https_port = | 377 network_session_params.testing_fixed_https_port = |
| 377 http_network_session_params_.testing_fixed_https_port; | 378 http_network_session_params_.testing_fixed_https_port; |
| 378 network_session_params.use_alternative_services = | 379 network_session_params.use_alternative_services = |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 url_request_interceptors_.rbegin(); | 440 url_request_interceptors_.rbegin(); |
| 440 i != url_request_interceptors_.rend(); ++i) { | 441 i != url_request_interceptors_.rend(); ++i) { |
| 441 top_job_factory.reset(new net::URLRequestInterceptingJobFactory( | 442 top_job_factory.reset(new net::URLRequestInterceptingJobFactory( |
| 442 top_job_factory.Pass(), make_scoped_ptr(*i))); | 443 top_job_factory.Pass(), make_scoped_ptr(*i))); |
| 443 } | 444 } |
| 444 url_request_interceptors_.weak_clear(); | 445 url_request_interceptors_.weak_clear(); |
| 445 } | 446 } |
| 446 storage->set_job_factory(top_job_factory.release()); | 447 storage->set_job_factory(top_job_factory.release()); |
| 447 // TODO(willchan): Support sdch. | 448 // TODO(willchan): Support sdch. |
| 448 | 449 |
| 449 return context; | 450 return context.Pass(); |
| 450 } | 451 } |
| 451 | 452 |
| 452 } // namespace net | 453 } // namespace net |
| OLD | NEW |