url_request_context_builder_mojo.cc 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // Copyright 2017 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 "services/network/url_request_context_builder_mojo.h"
  5. #include "base/check.h"
  6. #include "build/build_config.h"
  7. #include "build/chromeos_buildflags.h"
  8. #include "net/proxy_resolution/configured_proxy_resolution_service.h"
  9. #include "net/proxy_resolution/pac_file_fetcher_impl.h"
  10. #include "net/proxy_resolution/proxy_config_service.h"
  11. #include "services/network/network_context.h"
  12. #include "services/network/proxy_service_mojo.h"
  13. #include "services/network/public/cpp/features.h"
  14. #if BUILDFLAG(IS_WIN)
  15. #include "net/proxy_resolution/win/dhcp_pac_file_fetcher_win.h"
  16. #include "net/proxy_resolution/win/windows_system_proxy_resolution_service.h"
  17. #include "services/network/windows_system_proxy_resolver_mojo.h"
  18. #elif BUILDFLAG(IS_CHROMEOS_ASH)
  19. #include "services/network/dhcp_pac_file_fetcher_mojo.h"
  20. #endif
  21. namespace network {
  22. URLRequestContextBuilderMojo::URLRequestContextBuilderMojo() = default;
  23. URLRequestContextBuilderMojo::~URLRequestContextBuilderMojo() = default;
  24. void URLRequestContextBuilderMojo::SetMojoProxyResolverFactory(
  25. mojo::PendingRemote<proxy_resolver::mojom::ProxyResolverFactory>
  26. mojo_proxy_resolver_factory) {
  27. mojo_proxy_resolver_factory_ = std::move(mojo_proxy_resolver_factory);
  28. }
  29. #if BUILDFLAG(IS_WIN)
  30. void URLRequestContextBuilderMojo::SetMojoWindowsSystemProxyResolver(
  31. mojo::PendingRemote<proxy_resolver_win::mojom::WindowsSystemProxyResolver>
  32. mojo_windows_system_proxy_resolver) {
  33. mojo_windows_system_proxy_resolver_ =
  34. std::move(mojo_windows_system_proxy_resolver);
  35. }
  36. #endif
  37. #if BUILDFLAG(IS_CHROMEOS_ASH)
  38. void URLRequestContextBuilderMojo::SetDhcpWpadUrlClient(
  39. mojo::PendingRemote<network::mojom::DhcpWpadUrlClient>
  40. dhcp_wpad_url_client) {
  41. dhcp_wpad_url_client_ = std::move(dhcp_wpad_url_client);
  42. }
  43. #endif // BUILDFLAG(IS_CHROMEOS_ASH)
  44. std::unique_ptr<net::DhcpPacFileFetcher>
  45. URLRequestContextBuilderMojo::CreateDhcpPacFileFetcher(
  46. net::URLRequestContext* context) {
  47. #if BUILDFLAG(IS_WIN)
  48. return std::make_unique<net::DhcpPacFileFetcherWin>(context);
  49. #elif BUILDFLAG(IS_CHROMEOS_ASH)
  50. return std::make_unique<DhcpPacFileFetcherMojo>(
  51. context, std::move(dhcp_wpad_url_client_));
  52. #else
  53. return std::make_unique<net::DoNothingDhcpPacFileFetcher>();
  54. #endif
  55. }
  56. std::unique_ptr<net::ProxyResolutionService>
  57. URLRequestContextBuilderMojo::CreateProxyResolutionService(
  58. std::unique_ptr<net::ProxyConfigService> proxy_config_service,
  59. net::URLRequestContext* url_request_context,
  60. net::HostResolver* host_resolver,
  61. net::NetworkDelegate* network_delegate,
  62. net::NetLog* net_log,
  63. bool pac_quick_check_enabled) {
  64. DCHECK(url_request_context);
  65. DCHECK(host_resolver);
  66. #if BUILDFLAG(IS_WIN)
  67. // TODO(crbug.com/1032820): Support both ProxyResolutionService
  68. // implementations so that they can be swapped around at runtime based on
  69. // proxy config.
  70. if (mojo_windows_system_proxy_resolver_) {
  71. std::unique_ptr<net::ProxyResolutionService> proxy_resolution_service =
  72. net::WindowsSystemProxyResolutionService::Create(
  73. std::make_unique<WindowsSystemProxyResolverMojo>(
  74. std::move(mojo_windows_system_proxy_resolver_)),
  75. net_log);
  76. if (proxy_resolution_service)
  77. return proxy_resolution_service;
  78. }
  79. #endif
  80. if (mojo_proxy_resolver_factory_) {
  81. std::unique_ptr<net::DhcpPacFileFetcher> dhcp_pac_file_fetcher =
  82. CreateDhcpPacFileFetcher(url_request_context);
  83. std::unique_ptr<net::PacFileFetcherImpl> pac_file_fetcher;
  84. pac_file_fetcher = net::PacFileFetcherImpl::Create(url_request_context);
  85. return CreateConfiguredProxyResolutionServiceUsingMojoFactory(
  86. std::move(mojo_proxy_resolver_factory_),
  87. std::move(proxy_config_service), std::move(pac_file_fetcher),
  88. std::move(dhcp_pac_file_fetcher), host_resolver, net_log,
  89. pac_quick_check_enabled, network_delegate);
  90. }
  91. return net::URLRequestContextBuilder::CreateProxyResolutionService(
  92. std::move(proxy_config_service), url_request_context, host_resolver,
  93. network_delegate, net_log, pac_quick_check_enabled);
  94. }
  95. } // namespace network