url_request_context_getter.cc 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. #include "remoting/base/url_request_context_getter.h"
  5. #include <utility>
  6. #include "base/task/single_thread_task_runner.h"
  7. #include "build/build_config.h"
  8. #include "net/cert/cert_verifier.h"
  9. #include "net/proxy_resolution/configured_proxy_resolution_service.h"
  10. #include "net/proxy_resolution/proxy_config_service.h"
  11. #include "net/url_request/url_request_context.h"
  12. #include "net/url_request/url_request_context_builder.h"
  13. #include "remoting/base/vlog_net_log.h"
  14. #if BUILDFLAG(IS_WIN)
  15. #include "base/win/windows_version.h"
  16. #include "net/log/net_log.h"
  17. #endif // BUILDFLAG(IS_WIN)
  18. namespace remoting {
  19. URLRequestContextGetter::URLRequestContextGetter(
  20. scoped_refptr<base::SingleThreadTaskRunner> network_task_runner)
  21. : network_task_runner_(network_task_runner),
  22. proxy_config_service_(
  23. net::ProxyConfigService::CreateSystemProxyConfigService(
  24. network_task_runner)) {}
  25. net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() {
  26. if (!url_request_context_.get()) {
  27. CreateVlogNetLogObserver();
  28. net::URLRequestContextBuilder builder;
  29. builder.DisableHttpCache();
  30. #if BUILDFLAG(IS_WIN)
  31. if (base::win::GetVersion() <= base::win::Version::WIN7) {
  32. // The network stack of Windows 7 and older systems has a bug such that
  33. // proxy resolution always fails and blocks each request for ~10-30
  34. // seconds. We don't support proxied connection right now, so just disable
  35. // it on Windows 7 HTTP requests.
  36. auto proxy_resolution_service =
  37. net::ConfiguredProxyResolutionService::CreateWithoutProxyResolver(
  38. std::move(proxy_config_service_), net::NetLog::Get());
  39. builder.set_proxy_resolution_service(std::move(proxy_resolution_service));
  40. }
  41. #endif // BUILDFLAG(IS_WIN)
  42. if (proxy_config_service_) {
  43. builder.set_proxy_config_service(std::move(proxy_config_service_));
  44. }
  45. cert_net_fetcher_ = base::MakeRefCounted<net::CertNetFetcherURLRequest>();
  46. auto cert_verifier = net::CertVerifier::CreateDefault(cert_net_fetcher_);
  47. builder.SetCertVerifier(std::move(cert_verifier));
  48. url_request_context_ = builder.Build();
  49. cert_net_fetcher_->SetURLRequestContext(url_request_context_.get());
  50. }
  51. return url_request_context_.get();
  52. }
  53. scoped_refptr<base::SingleThreadTaskRunner>
  54. URLRequestContextGetter::GetNetworkTaskRunner() const {
  55. return network_task_runner_;
  56. }
  57. URLRequestContextGetter::~URLRequestContextGetter() {
  58. if (cert_net_fetcher_) {
  59. cert_net_fetcher_->Shutdown();
  60. }
  61. }
  62. } // namespace remoting