From d732ea4a07cd3c63f67feb3e6cc110e3442e6093 Mon Sep 17 00:00:00 2001 From: Matt Menke Date: Fri, 8 Mar 2019 12:05:00 +0000 Subject: [PATCH] Remove custom per-request user-agent to HTTP proxies for CONNECTs. When establishing an HTTPS connection over an HTTP/HTTPS/H2/QUIC proxy, used the global User-Agent headers with the CONNECT request, instead of using the custom User-Agent string associated with the original request. Because of late binding, preconnects, and socket reuse, we could never guarantee we'd actually use a tunnel creating using a particular request's User-Agent header, and it's also a bit weird to have a side channel between websites and the proxy. The intent to deprecate and remove thread has some more details: https://groups.google.com/a/chromium.org/forum/?utm_medium=email&utm_source=footer#!msg/blink-dev/Bm40gPAv4RE/Yt6r27pOBQAJ TBR=seantopping@chromium.org Bug: 934325 Change-Id: I54b41a965b28df3a70bbe0c4c6ede3e709f7d548 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1487890 Reviewed-by: Matt Menke Reviewed-by: Tarun Bansal Reviewed-by: David Roger Reviewed-by: Misha Efimov Reviewed-by: Richard Coles Reviewed-by: Eric Roman Commit-Queue: Matt Menke Cr-Commit-Position: refs/heads/master@{#638981} --- .../browser/net/aw_http_user_agent_settings.h | 2 +- .../browser/cast_http_user_agent_settings.h | 2 +- .../cronet_bidirectional_stream_adapter.cc | 2 +- components/cronet/ios/cronet_environment.mm | 2 +- .../url_request_context_config_unittest.cc | 2 +- .../browser/data_reduction_proxy_io_data.cc | 2 - .../grpc_support/bidirectional_stream.cc | 2 +- .../grpc_support/bidirectional_stream_c.cc | 1 - .../browser/net/reporting_service_proxy.cc | 1 - .../net/ios_chrome_http_user_agent_settings.h | 2 +- net/BUILD.gn | 2 +- .../http_user_agent_settings.h | 6 +- net/http/http_network_session.cc | 4 +- net/http/http_network_session.h | 2 + net/http/http_network_transaction_unittest.cc | 101 ++++++++++++------ .../http_proxy_client_socket_pool_unittest.cc | 4 +- net/http/http_proxy_client_socket_wrapper.cc | 24 +++-- net/http/http_proxy_client_socket_wrapper.h | 6 +- net/http/http_proxy_connect_job.cc | 3 - net/http/http_proxy_connect_job.h | 3 - net/http/http_proxy_connect_job_unittest.cc | 4 +- net/http/http_stream_factory_job.cc | 22 ++-- net/http/http_stream_factory_unittest.cc | 1 + net/quic/quic_network_transaction_unittest.cc | 10 +- .../client_socket_pool_base_unittest.cc | 1 + net/socket/client_socket_pool_manager.cc | 69 +++++------- net/socket/client_socket_pool_manager.h | 4 - net/socket/client_socket_pool_manager_impl.cc | 25 +++-- net/socket/client_socket_pool_manager_impl.h | 3 + net/socket/connect_job.cc | 2 + net/socket/connect_job.h | 3 + net/socket/connect_job_unittest.cc | 1 + net/socket/socket_test_util.cc | 1 + net/socket/socks_connect_job_unittest.cc | 1 + net/socket/ssl_connect_job_unittest.cc | 28 +---- net/socket/transport_client_socket_pool.cc | 4 + net/socket/transport_client_socket_pool.h | 3 + .../transport_client_socket_pool_unittest.cc | 17 +-- net/socket/transport_connect_job_unittest.cc | 1 + .../websocket_transport_client_socket_pool.cc | 3 + .../websocket_transport_client_socket_pool.h | 2 + ...t_transport_client_socket_pool_unittest.cc | 46 ++++---- net/spdy/spdy_proxy_client_socket_unittest.cc | 1 + net/spdy/spdy_test_util_common.cc | 3 + net/spdy/spdy_test_util_common.h | 2 + .../static_http_user_agent_settings.h | 2 +- net/url_request/url_request_context.cc | 2 +- .../url_request_context_builder.cc | 2 + .../url_request_context_storage.cc | 2 +- net/url_request/url_request_http_job.cc | 2 +- net/url_request/url_request_test_util.cc | 11 +- .../websocket_basic_stream_adapters_test.cc | 1 + services/network/network_context.cc | 2 +- services/network/network_context_unittest.cc | 2 +- 54 files changed, 250 insertions(+), 206 deletions(-) rename net/{url_request => base}/http_user_agent_settings.h (82%) diff --git a/android_webview/browser/net/aw_http_user_agent_settings.h b/android_webview/browser/net/aw_http_user_agent_settings.h index bdbfe3e990f111..50c3a25eef7b73 100644 --- a/android_webview/browser/net/aw_http_user_agent_settings.h +++ b/android_webview/browser/net/aw_http_user_agent_settings.h @@ -9,7 +9,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" -#include "net/url_request/http_user_agent_settings.h" +#include "net/base/http_user_agent_settings.h" namespace android_webview { diff --git a/chromecast/browser/cast_http_user_agent_settings.h b/chromecast/browser/cast_http_user_agent_settings.h index 97f9a6b24d022b..47885941f7bba2 100644 --- a/chromecast/browser/cast_http_user_agent_settings.h +++ b/chromecast/browser/cast_http_user_agent_settings.h @@ -9,7 +9,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" -#include "net/url_request/http_user_agent_settings.h" +#include "net/base/http_user_agent_settings.h" namespace chromecast { namespace shell { diff --git a/components/cronet/android/cronet_bidirectional_stream_adapter.cc b/components/cronet/android/cronet_bidirectional_stream_adapter.cc index 17570231b433ad..557c5f8c7e16e8 100644 --- a/components/cronet/android/cronet_bidirectional_stream_adapter.cc +++ b/components/cronet/android/cronet_bidirectional_stream_adapter.cc @@ -17,6 +17,7 @@ #include "components/cronet/android/url_request_error.h" #include "components/cronet/metrics_util.h" #include "jni/CronetBidirectionalStream_jni.h" +#include "net/base/http_user_agent_settings.h" #include "net/base/net_errors.h" #include "net/base/request_priority.h" #include "net/http/bidirectional_stream_request_info.h" @@ -28,7 +29,6 @@ #include "net/ssl/ssl_info.h" #include "net/third_party/quic/core/quic_packets.h" #include "net/third_party/quiche/src/spdy/core/spdy_header_block.h" -#include "net/url_request/http_user_agent_settings.h" #include "net/url_request/url_request_context.h" #include "url/gurl.h" diff --git a/components/cronet/ios/cronet_environment.mm b/components/cronet/ios/cronet_environment.mm index 49bda283f8d295..044f37a2253173 100644 --- a/components/cronet/ios/cronet_environment.mm +++ b/components/cronet/ios/cronet_environment.mm @@ -30,6 +30,7 @@ #include "ios/web/public/global_state/ios_global_state.h" #include "ios/web/public/global_state/ios_global_state_configuration.h" #include "ios/web/public/user_agent.h" +#include "net/base/http_user_agent_settings.h" #include "net/base/network_change_notifier.h" #include "net/base/url_util.h" #include "net/cert/cert_verifier.h" @@ -48,7 +49,6 @@ #include "net/ssl/channel_id_service.h" #include "net/ssl/ssl_key_logger_impl.h" #include "net/third_party/quic/core/quic_versions.h" -#include "net/url_request/http_user_agent_settings.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_builder.h" #include "net/url_request/url_request_context_storage.h" diff --git a/components/cronet/url_request_context_config_unittest.cc b/components/cronet/url_request_context_config_unittest.cc index 6e4916ec48ac37..2b094f7f5446bd 100644 --- a/components/cronet/url_request_context_config_unittest.cc +++ b/components/cronet/url_request_context_config_unittest.cc @@ -15,6 +15,7 @@ #include "base/values.h" #include "build/build_config.h" #include "net/base/host_port_pair.h" +#include "net/base/http_user_agent_settings.h" #include "net/base/net_errors.h" #include "net/cert/cert_verifier.h" #include "net/dns/host_resolver.h" @@ -23,7 +24,6 @@ #include "net/log/net_log_with_source.h" #include "net/proxy_resolution/proxy_config.h" #include "net/proxy_resolution/proxy_config_service_fixed.h" -#include "net/url_request/http_user_agent_settings.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_builder.h" #include "testing/gtest/include/gtest/gtest.h" diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc index 50175ff1b28a3e..4b3a1d12031d61 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc @@ -31,8 +31,6 @@ #include "components/data_reduction_proxy/core/common/data_reduction_proxy_throttle_manager.h" #include "net/base/load_flags.h" #include "net/http/http_request_headers.h" -#include "net/url_request/http_user_agent_settings.h" -#include "net/url_request/static_http_user_agent_settings.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_builder.h" #include "net/url_request/url_request_context_getter.h" diff --git a/components/grpc_support/bidirectional_stream.cc b/components/grpc_support/bidirectional_stream.cc index 1d13e638cc5c20..44808d8121442a 100644 --- a/components/grpc_support/bidirectional_stream.cc +++ b/components/grpc_support/bidirectional_stream.cc @@ -15,6 +15,7 @@ #include "base/memory/ref_counted.h" #include "base/single_thread_task_runner.h" #include "base/strings/string_number_conversions.h" +#include "net/base/http_user_agent_settings.h" #include "net/base/io_buffer.h" #include "net/base/net_errors.h" #include "net/base/request_priority.h" @@ -27,7 +28,6 @@ #include "net/http/http_util.h" #include "net/ssl/ssl_info.h" #include "net/third_party/quiche/src/spdy/core/spdy_header_block.h" -#include "net/url_request/http_user_agent_settings.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_getter.h" #include "url/gurl.h" diff --git a/components/grpc_support/bidirectional_stream_c.cc b/components/grpc_support/bidirectional_stream_c.cc index 8b739a4ccdc8df..a64b5977c4c98f 100644 --- a/components/grpc_support/bidirectional_stream_c.cc +++ b/components/grpc_support/bidirectional_stream_c.cc @@ -31,7 +31,6 @@ #include "net/http/http_util.h" #include "net/ssl/ssl_info.h" #include "net/third_party/quiche/src/spdy/core/spdy_header_block.h" -#include "net/url_request/http_user_agent_settings.h" #include "net/url_request/url_request_context.h" #include "url/gurl.h" diff --git a/content/browser/net/reporting_service_proxy.cc b/content/browser/net/reporting_service_proxy.cc index 1e59afac0b51f8..a2523069ed1000 100644 --- a/content/browser/net/reporting_service_proxy.cc +++ b/content/browser/net/reporting_service_proxy.cc @@ -18,7 +18,6 @@ #include "mojo/public/cpp/bindings/strong_binding.h" #include "net/reporting/reporting_report.h" #include "net/reporting/reporting_service.h" -#include "net/url_request/http_user_agent_settings.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_getter.h" #include "services/network/public/mojom/network_context.mojom.h" diff --git a/ios/chrome/browser/net/ios_chrome_http_user_agent_settings.h b/ios/chrome/browser/net/ios_chrome_http_user_agent_settings.h index 707ea00bc04b10..1a26c38fa66980 100644 --- a/ios/chrome/browser/net/ios_chrome_http_user_agent_settings.h +++ b/ios/chrome/browser/net/ios_chrome_http_user_agent_settings.h @@ -10,7 +10,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" #include "components/prefs/pref_member.h" -#include "net/url_request/http_user_agent_settings.h" +#include "net/base/http_user_agent_settings.h" class PrefService; diff --git a/net/BUILD.gn b/net/BUILD.gn index b038c7f8dc18b1..5d7a8bfd8c166c 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn @@ -454,6 +454,7 @@ component("net") { "base/hex_utils.h", "base/host_mapping_rules.cc", "base/host_mapping_rules.h", + "base/http_user_agent_settings.h", "base/ip_pattern.cc", "base/ip_pattern.h", "base/layered_network_delegate.cc", @@ -1719,7 +1720,6 @@ component("net") { "third_party/quiche/src/spdy/platform/api/spdy_unsafe_arena.h", "url_request/data_protocol_handler.cc", "url_request/data_protocol_handler.h", - "url_request/http_user_agent_settings.h", "url_request/redirect_info.cc", "url_request/redirect_info.h", "url_request/redirect_util.cc", diff --git a/net/url_request/http_user_agent_settings.h b/net/base/http_user_agent_settings.h similarity index 82% rename from net/url_request/http_user_agent_settings.h rename to net/base/http_user_agent_settings.h index 487f235c2e2923..eb3b2d00f59ee7 100644 --- a/net/url_request/http_user_agent_settings.h +++ b/net/base/http_user_agent_settings.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef NET_URL_REQUEST_HTTP_USER_AGENT_SETTINGS_H_ -#define NET_URL_REQUEST_HTTP_USER_AGENT_SETTINGS_H_ +#ifndef NET_BASE_HTTP_USER_AGENT_SETTINGS_H_ +#define NET_BASE_HTTP_USER_AGENT_SETTINGS_H_ #include @@ -31,4 +31,4 @@ class NET_EXPORT HttpUserAgentSettings { } // namespace net -#endif // NET_URL_REQUEST_HTTP_USER_AGENT_SETTINGS_H_ +#endif // NET_BASE_HTTP_USER_AGENT_SETTINGS_H_ diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc index 2cf4002a052588..a8a025074db4ac 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc @@ -59,7 +59,8 @@ std::unique_ptr CreateSocketPoolManager( context.transport_security_state, context.cert_transparency_verifier, context.ct_policy_enforcer, ssl_client_session_cache, ssl_client_session_cache_privacy_mode, context.ssl_config_service, - websocket_endpoint_lock_manager, context.proxy_delegate, pool_type); + websocket_endpoint_lock_manager, context.proxy_delegate, + context.http_user_agent_settings, pool_type); } } // unnamed namespace @@ -165,6 +166,7 @@ HttpNetworkSession::Context::Context() ct_policy_enforcer(nullptr), proxy_resolution_service(nullptr), proxy_delegate(nullptr), + http_user_agent_settings(nullptr), ssl_config_service(nullptr), http_auth_handler_factory(nullptr), net_log(nullptr), diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h index 3b0bc86a269799..9fe908a0c593fd 100644 --- a/net/http/http_network_session.h +++ b/net/http/http_network_session.h @@ -61,6 +61,7 @@ class HttpAuthHandlerFactory; class HttpNetworkSessionPeer; class HttpResponseBodyDrainer; class HttpServerProperties; +class HttpUserAgentSettings; class NetLog; #if BUILDFLAG(ENABLE_REPORTING) class NetworkErrorLoggingService; @@ -257,6 +258,7 @@ class NET_EXPORT HttpNetworkSession { CTPolicyEnforcer* ct_policy_enforcer; ProxyResolutionService* proxy_resolution_service; ProxyDelegate* proxy_delegate; + const HttpUserAgentSettings* http_user_agent_settings; SSLConfigService* ssl_config_service; HttpAuthHandlerFactory* http_auth_handler_factory; HttpServerProperties* http_server_properties; diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index 06726c2f2ce374..7a60a672d01208 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc @@ -27,6 +27,7 @@ #include "base/stl_util.h" #include "base/strings/string_piece.h" #include "base/strings/string_util.h" +#include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_task_environment.h" @@ -103,6 +104,7 @@ #include "net/test/test_with_scoped_task_environment.h" #include "net/third_party/quiche/src/spdy/core/spdy_framer.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" +#include "net/url_request/static_http_user_agent_settings.h" #include "net/websockets/websocket_handshake_stream_base.h" #include "net/websockets/websocket_test_util.h" #include "testing/gmock/include/gmock/gmock.h" @@ -708,6 +710,7 @@ CaptureGroupNameSocketPool::CaptureGroupNameSocketPool( NULL, NULL, NULL, + NULL, NULL) {} //----------------------------------------------------------------------------- @@ -10482,43 +10485,73 @@ TEST_F(HttpNetworkTransactionTest, BuildRequest_UserAgent) { } TEST_F(HttpNetworkTransactionTest, BuildRequest_UserAgentOverTunnel) { - HttpRequestInfo request; - request.method = "GET"; - request.url = GURL("https://www.example.org/"); - request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, - "Chromium Ultra Awesome X Edition"); - request.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); + // Test user agent values, used both for the request header of the original + // request, and the value returned by the HttpUserAgentSettings. nullptr means + // no request header / no HttpUserAgentSettings object. + const char* kTestUserAgents[] = {nullptr, "", "Foopy"}; + + for (const char* setting_user_agent : kTestUserAgents) { + if (!setting_user_agent) { + session_deps_.http_user_agent_settings.reset(); + } else { + session_deps_.http_user_agent_settings = + std::make_unique( + std::string() /* accept-language */, setting_user_agent); + } + session_deps_.proxy_resolution_service = + ProxyResolutionService::CreateFixed("myproxy:70", + TRAFFIC_ANNOTATION_FOR_TESTS); + std::unique_ptr session(CreateSession(&session_deps_)); + for (const char* request_user_agent : kTestUserAgents) { + HttpRequestInfo request; + request.method = "GET"; + request.url = GURL("https://www.example.org/"); + if (request_user_agent) { + request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, + request_user_agent); + } + request.traffic_annotation = + net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - session_deps_.proxy_resolution_service = ProxyResolutionService::CreateFixed( - "myproxy:70", TRAFFIC_ANNOTATION_FOR_TESTS); - std::unique_ptr session(CreateSession(&session_deps_)); - HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); + HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); - MockWrite data_writes[] = { - MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" - "Host: www.example.org:443\r\n" - "Proxy-Connection: keep-alive\r\n" - "User-Agent: Chromium Ultra Awesome X Edition\r\n\r\n"), - }; - MockRead data_reads[] = { - // Return an error, so the transaction stops here (this test isn't - // interested in the rest). - MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), - MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), - MockRead("Proxy-Connection: close\r\n\r\n"), - }; - - StaticSocketDataProvider data(data_reads, data_writes); - session_deps_.socket_factory->AddSocketDataProvider(&data); + std::string expected_request; + if (!setting_user_agent || strlen(setting_user_agent) == 0) { + expected_request = + "CONNECT www.example.org:443 HTTP/1.1\r\n" + "Host: www.example.org:443\r\n" + "Proxy-Connection: keep-alive\r\n\r\n"; + } else { + expected_request = base::StringPrintf( + "CONNECT www.example.org:443 HTTP/1.1\r\n" + "Host: www.example.org:443\r\n" + "Proxy-Connection: keep-alive\r\n" + "User-Agent: %s\r\n\r\n", + setting_user_agent); + } + MockWrite data_writes[] = { + MockWrite(expected_request.c_str()), + }; + MockRead data_reads[] = { + // Return an error, so the transaction stops here (this test isn't + // interested in the rest). + MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), + MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), + MockRead("Proxy-Connection: close\r\n\r\n"), + }; + + StaticSocketDataProvider data(data_reads, data_writes); + session_deps_.socket_factory->AddSocketDataProvider(&data); - TestCompletionCallback callback; + TestCompletionCallback callback; - int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); + int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); + EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - rv = callback.WaitForResult(); - EXPECT_THAT(rv, IsOk()); + rv = callback.WaitForResult(); + EXPECT_THAT(rv, IsOk()); + } + } } TEST_F(HttpNetworkTransactionTest, BuildRequest_Referer) { @@ -14374,8 +14407,8 @@ TEST_F(HttpNetworkTransactionTest, MultiRoundAuth) { 1, // Max sockets per group base::TimeDelta::FromSeconds(10), // unused_idle_socket_timeout session_deps_.socket_factory.get(), session_deps_.host_resolver.get(), - nullptr /* proxy_delegate */, session_deps_.cert_verifier.get(), - session_deps_.channel_id_service.get(), + nullptr /* proxy_delegate */, nullptr /* http_user_agent_settings */, + session_deps_.cert_verifier.get(), session_deps_.channel_id_service.get(), session_deps_.transport_security_state.get(), session_deps_.cert_transparency_verifier.get(), session_deps_.ct_policy_enforcer.get(), diff --git a/net/http/http_proxy_client_socket_pool_unittest.cc b/net/http/http_proxy_client_socket_pool_unittest.cc index f3344d521db497..47558d33511f70 100644 --- a/net/http/http_proxy_client_socket_pool_unittest.cc +++ b/net/http/http_proxy_client_socket_pool_unittest.cc @@ -79,6 +79,7 @@ class HttpProxyClientSocketPoolTest &socket_factory_, session_deps_.host_resolver.get(), nullptr /* proxy_delegate */, + nullptr /* http_user_agent_settings */, session_deps_.cert_verifier.get(), session_deps_.channel_id_service.get(), session_deps_.transport_security_state.get(), @@ -100,6 +101,7 @@ class HttpProxyClientSocketPoolTest pool_ = std::make_unique( kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, &socket_factory_, session_deps_.host_resolver.get(), proxy_delegate, + nullptr /* http_user_agent_settings */, session_deps_.cert_verifier.get(), session_deps_.channel_id_service.get(), session_deps_.transport_security_state.get(), @@ -151,7 +153,7 @@ class HttpProxyClientSocketPoolTest CreateFromHttpProxySocketParams( base::MakeRefCounted( CreateHttpProxyParams(), CreateHttpsProxyParams(), - quic::QUIC_VERSION_UNSUPPORTED, std::string(), + quic::QUIC_VERSION_UNSUPPORTED, HostPortPair("www.google.com", tunnel ? 443 : 80), session_->http_auth_cache(), session_->http_auth_handler_factory(), diff --git a/net/http/http_proxy_client_socket_wrapper.cc b/net/http/http_proxy_client_socket_wrapper.cc index 461398208d0ef8..28177f16a91e12 100644 --- a/net/http/http_proxy_client_socket_wrapper.cc +++ b/net/http/http_proxy_client_socket_wrapper.cc @@ -14,6 +14,7 @@ #include "base/metrics/histogram_macros.h" #include "base/threading/thread_task_runner_handle.h" #include "base/values.h" +#include "net/base/http_user_agent_settings.h" #include "net/base/proxy_delegate.h" #include "net/http/http_proxy_client_socket.h" #include "net/http/http_response_info.h" @@ -47,7 +48,6 @@ HttpProxyClientSocketWrapper::HttpProxyClientSocketWrapper( const scoped_refptr& transport_params, const scoped_refptr& ssl_params, quic::QuicTransportVersion quic_version, - const std::string& user_agent, const HostPortPair& endpoint, HttpAuthCache* http_auth_cache, HttpAuthHandlerFactory* http_auth_handler_factory, @@ -57,8 +57,8 @@ HttpProxyClientSocketWrapper::HttpProxyClientSocketWrapper( bool tunnel, const NetworkTrafficAnnotationTag& traffic_annotation, const NetLogWithSource& net_log) - : on_proxy_auth_callback_(on_proxy_auth_callback), - next_state_(STATE_NONE), + : next_state_(STATE_NONE), + on_proxy_auth_callback_(on_proxy_auth_callback), priority_(priority), socket_tag_(socket_tag), connect_timeout_duration_(connect_timeout_duration), @@ -66,7 +66,6 @@ HttpProxyClientSocketWrapper::HttpProxyClientSocketWrapper( transport_params_(transport_params), ssl_params_(ssl_params), quic_version_(quic_version), - user_agent_(user_agent), endpoint_(endpoint), spdy_session_pool_(spdy_session_pool), has_restarted_(false), @@ -654,7 +653,7 @@ int HttpProxyClientSocketWrapper::DoHttpProxyConnect() { transport_socket_ = common_connect_job_params_->client_socket_factory ->CreateProxyClientSocket( - nested_connect_job_->PassSocket(), user_agent_, endpoint_, + nested_connect_job_->PassSocket(), GetUserAgent(), endpoint_, ProxyServer(GetProxyServerScheme(), GetDestination()), http_auth_controller_.get(), tunnel_, using_spdy_, negotiated_protocol_, common_connect_job_params_->proxy_delegate, @@ -725,8 +724,9 @@ int HttpProxyClientSocketWrapper::DoSpdyProxyCreateStreamComplete(int result) { spdy_stream_request_.reset(); DCHECK(stream.get()); // |transport_socket_| will set itself as |stream|'s delegate. - transport_socket_.reset(new SpdyProxyClientSocket( - stream, user_agent_, endpoint_, net_log_, http_auth_controller_.get())); + transport_socket_.reset( + new SpdyProxyClientSocket(stream, GetUserAgent(), endpoint_, net_log_, + http_auth_controller_.get())); return transport_socket_->Connect(base::Bind( &HttpProxyClientSocketWrapper::OnIOComplete, base::Unretained(this))); } @@ -779,8 +779,8 @@ int HttpProxyClientSocketWrapper::DoQuicProxyCreateStreamComplete(int result) { quic_stream->SetPriority(spdy_priority); transport_socket_.reset(new QuicProxyClientSocket( - std::move(quic_stream), std::move(quic_session_), user_agent_, endpoint_, - net_log_, http_auth_controller_.get())); + std::move(quic_stream), std::move(quic_session_), GetUserAgent(), + endpoint_, net_log_, http_auth_controller_.get())); return transport_socket_->Connect(base::Bind( &HttpProxyClientSocketWrapper::OnIOComplete, base::Unretained(this))); } @@ -882,4 +882,10 @@ const HostPortPair& HttpProxyClientSocketWrapper::GetDestination() { } } +std::string HttpProxyClientSocketWrapper::GetUserAgent() const { + if (!common_connect_job_params_->http_user_agent_settings) + return std::string(); + return common_connect_job_params_->http_user_agent_settings->GetUserAgent(); +} + } // namespace net diff --git a/net/http/http_proxy_client_socket_wrapper.h b/net/http/http_proxy_client_socket_wrapper.h index 2882f002621863..dbc56af87f9cef 100644 --- a/net/http/http_proxy_client_socket_wrapper.h +++ b/net/http/http_proxy_client_socket_wrapper.h @@ -72,7 +72,6 @@ class NET_EXPORT_PRIVATE HttpProxyClientSocketWrapper const scoped_refptr& transport_params, const scoped_refptr& ssl_params, quic::QuicTransportVersion quic_version, - const std::string& user_agent, const HostPortPair& endpoint, HttpAuthCache* http_auth_cache, HttpAuthHandlerFactory* http_auth_handler_factory, @@ -202,10 +201,12 @@ class NET_EXPORT_PRIVATE HttpProxyClientSocketWrapper const HostPortPair& GetDestination(); - const OnProxyAuthChallengeCallback on_proxy_auth_callback_; + std::string GetUserAgent() const; State next_state_; + const OnProxyAuthChallengeCallback on_proxy_auth_callback_; + RequestPriority priority_; const SocketTag socket_tag_; const base::TimeDelta connect_timeout_duration_; @@ -216,7 +217,6 @@ class NET_EXPORT_PRIVATE HttpProxyClientSocketWrapper quic::QuicTransportVersion quic_version_; - const std::string user_agent_; const HostPortPair endpoint_; SpdySessionPool* const spdy_session_pool_; diff --git a/net/http/http_proxy_connect_job.cc b/net/http/http_proxy_connect_job.cc index 6e1ed3d4eb3333..4ca558745d4aea 100644 --- a/net/http/http_proxy_connect_job.cc +++ b/net/http/http_proxy_connect_job.cc @@ -128,7 +128,6 @@ HttpProxySocketParams::HttpProxySocketParams( const scoped_refptr& transport_params, const scoped_refptr& ssl_params, quic::QuicTransportVersion quic_version, - const std::string& user_agent, const HostPortPair& endpoint, HttpAuthCache* http_auth_cache, HttpAuthHandlerFactory* http_auth_handler_factory, @@ -142,7 +141,6 @@ HttpProxySocketParams::HttpProxySocketParams( quic_version_(quic_version), spdy_session_pool_(spdy_session_pool), quic_stream_factory_(quic_stream_factory), - user_agent_(user_agent), endpoint_(endpoint), http_auth_cache_(tunnel ? http_auth_cache : NULL), http_auth_handler_factory_(tunnel ? http_auth_handler_factory : NULL), @@ -192,7 +190,6 @@ HttpProxyConnectJob::HttpProxyConnectJob( params->transport_params(), params->ssl_params(), params->quic_version(), - params->user_agent(), params->endpoint(), params->http_auth_cache(), params->http_auth_handler_factory(), diff --git a/net/http/http_proxy_connect_job.h b/net/http/http_proxy_connect_job.h index 60827297719276..2f3743a969a058 100644 --- a/net/http/http_proxy_connect_job.h +++ b/net/http/http_proxy_connect_job.h @@ -45,7 +45,6 @@ class NET_EXPORT_PRIVATE HttpProxySocketParams const scoped_refptr& transport_params, const scoped_refptr& ssl_params, quic::QuicTransportVersion quic_version, - const std::string& user_agent, const HostPortPair& endpoint, HttpAuthCache* http_auth_cache, HttpAuthHandlerFactory* http_auth_handler_factory, @@ -62,7 +61,6 @@ class NET_EXPORT_PRIVATE HttpProxySocketParams return ssl_params_; } quic::QuicTransportVersion quic_version() const { return quic_version_; } - const std::string& user_agent() const { return user_agent_; } const HostPortPair& endpoint() const { return endpoint_; } HttpAuthCache* http_auth_cache() const { return http_auth_cache_; } HttpAuthHandlerFactory* http_auth_handler_factory() const { @@ -87,7 +85,6 @@ class NET_EXPORT_PRIVATE HttpProxySocketParams quic::QuicTransportVersion quic_version_; SpdySessionPool* spdy_session_pool_; QuicStreamFactory* quic_stream_factory_; - const std::string user_agent_; const HostPortPair endpoint_; HttpAuthCache* const http_auth_cache_; HttpAuthHandlerFactory* const http_auth_handler_factory_; diff --git a/net/http/http_proxy_connect_job_unittest.cc b/net/http/http_proxy_connect_job_unittest.cc index 4000f8a9fde222..0c6b62fc70f5c8 100644 --- a/net/http/http_proxy_connect_job_unittest.cc +++ b/net/http/http_proxy_connect_job_unittest.cc @@ -133,7 +133,7 @@ class HttpProxyConnectJobTest : public ::testing::TestWithParam, scoped_refptr CreateParams(bool tunnel) { return base::MakeRefCounted( CreateHttpProxyParams(), CreateHttpsProxyParams(), - quic::QUIC_VERSION_UNSUPPORTED, std::string(), + quic::QUIC_VERSION_UNSUPPORTED, HostPortPair(kEndpointHost, tunnel ? 443 : 80), session_->http_auth_cache(), session_->http_auth_handler_factory(), session_->spdy_session_pool(), session_->quic_stream_factory(), @@ -175,7 +175,7 @@ class HttpProxyConnectJobTest : public ::testing::TestWithParam, void InitCommonConnectJobParams() { common_connect_job_params_ = std::make_unique( &socket_factory_, session_deps_.host_resolver.get(), - proxy_delegate_.get(), + proxy_delegate_.get(), nullptr /* http_user_agent_settings */, SSLClientSocketContext(session_deps_.cert_verifier.get(), session_deps_.channel_id_service.get(), session_deps_.transport_security_state.get(), diff --git a/net/http/http_stream_factory_job.cc b/net/http/http_stream_factory_job.cc index 8de407ea25d7e1..aafd478aec45b5 100644 --- a/net/http/http_stream_factory_job.cc +++ b/net/http/http_stream_factory_job.cc @@ -954,10 +954,9 @@ int HttpStreamFactory::Job::DoInitConnectionImpl() { DCHECK(!is_websocket_); DCHECK(request_info_.socket_tag == SocketTag()); return PreconnectSocketsForHttpRequest( - GetSocketGroup(), destination_, request_info_.extra_headers, - request_info_.load_flags, priority_, session_, proxy_info_, - server_ssl_config_, proxy_ssl_config_, request_info_.privacy_mode, - net_log_, num_streams_); + GetSocketGroup(), destination_, request_info_.load_flags, priority_, + session_, proxy_info_, server_ssl_config_, proxy_ssl_config_, + request_info_.privacy_mode, net_log_, num_streams_); } // If we can't use a HTTP/2 session, don't bother checking for one after @@ -977,19 +976,18 @@ int HttpStreamFactory::Job::DoInitConnectionImpl() { SSLConfig websocket_server_ssl_config = server_ssl_config_; websocket_server_ssl_config.alpn_protos.clear(); return InitSocketHandleForWebSocketRequest( - GetSocketGroup(), destination_, request_info_.extra_headers, - request_info_.load_flags, priority_, session_, proxy_info_, - websocket_server_ssl_config, proxy_ssl_config_, + GetSocketGroup(), destination_, request_info_.load_flags, priority_, + session_, proxy_info_, websocket_server_ssl_config, proxy_ssl_config_, request_info_.privacy_mode, net_log_, connection_.get(), resolution_callback, io_callback_, proxy_auth_callback); } return InitSocketHandleForHttpRequest( - GetSocketGroup(), destination_, request_info_.extra_headers, - request_info_.load_flags, priority_, session_, proxy_info_, quic_version_, - server_ssl_config_, proxy_ssl_config_, request_info_.privacy_mode, - request_info_.socket_tag, net_log_, connection_.get(), - resolution_callback, io_callback_, proxy_auth_callback); + GetSocketGroup(), destination_, request_info_.load_flags, priority_, + session_, proxy_info_, quic_version_, server_ssl_config_, + proxy_ssl_config_, request_info_.privacy_mode, request_info_.socket_tag, + net_log_, connection_.get(), resolution_callback, io_callback_, + proxy_auth_callback); } void HttpStreamFactory::Job::OnQuicHostResolution(int result) { diff --git a/net/http/http_stream_factory_unittest.cc b/net/http/http_stream_factory_unittest.cc index 716137431c81eb..19c3ce506d47a1 100644 --- a/net/http/http_stream_factory_unittest.cc +++ b/net/http/http_stream_factory_unittest.cc @@ -476,6 +476,7 @@ CapturePreconnectsSocketPool::CapturePreconnectsSocketPool( nullptr /* socket_factory */, host_resolver, nullptr /* proxy_delegate */, + nullptr /* http_user_agent_settings */, nullptr /* cert_verifier */, nullptr /* channel_id_server */, nullptr /* transport_security_state */, diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc index fd6265112630a4..5fc84d177ffae5 100644 --- a/net/quic/quic_network_transaction_unittest.cc +++ b/net/quic/quic_network_transaction_unittest.cc @@ -78,6 +78,7 @@ #include "net/third_party/quiche/src/spdy/core/spdy_frame_builder.h" #include "net/third_party/quiche/src/spdy/core/spdy_framer.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" +#include "net/url_request/static_http_user_agent_settings.h" #include "net/url_request/url_request.h" #include "net/url_request/url_request_job_factory_impl.h" #include "net/url_request/url_request_test_util.h" @@ -8143,6 +8144,8 @@ TEST_P(QuicNetworkTransactionTest, QuicProxyConnectBadCertificate) { // Checks if a request's specified "user-agent" header shows up correctly in the // CONNECT request to a QUIC proxy. TEST_P(QuicNetworkTransactionTest, QuicProxyUserAgent) { + const char kConfiguredUserAgent[] = "Configured User-Agent"; + const char kRequestUserAgent[] = "Request User-Agent"; session_params_.enable_quic = true; session_params_.enable_quic_proxies_for_https_urls = true; proxy_resolution_service_ = ProxyResolutionService::CreateFixedFromPacResult( @@ -8154,7 +8157,7 @@ TEST_P(QuicNetworkTransactionTest, QuicProxyUserAgent) { SYNCHRONOUS, ConstructInitialSettingsPacket(1, &header_stream_offset)); spdy::SpdyHeaderBlock headers = ConnectRequestHeaders("mail.example.org:443"); - headers["user-agent"] = "Chromium Ultra Awesome X Edition"; + headers["user-agent"] = kConfiguredUserAgent; mock_quic_data.AddWrite( SYNCHRONOUS, ConstructClientRequestHeadersPacket( 2, GetNthClientInitiatedBidirectionalStreamId(0), true, @@ -8165,11 +8168,14 @@ TEST_P(QuicNetworkTransactionTest, QuicProxyUserAgent) { mock_quic_data.AddSocketDataToFactory(&socket_factory_); + StaticHttpUserAgentSettings http_user_agent_settings( + std::string() /* accept_language */, kConfiguredUserAgent); + session_context_.http_user_agent_settings = &http_user_agent_settings; CreateSession(); request_.url = GURL("https://mail.example.org/"); request_.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, - "Chromium Ultra Awesome X Edition"); + kRequestUserAgent); HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get()); HeadersHandler headers_handler; trans.SetBeforeHeadersSentCallback( diff --git a/net/socket/client_socket_pool_base_unittest.cc b/net/socket/client_socket_pool_base_unittest.cc index b753e4cdca06a7..dba6485e8b63bd 100644 --- a/net/socket/client_socket_pool_base_unittest.cc +++ b/net/socket/client_socket_pool_base_unittest.cc @@ -529,6 +529,7 @@ class TestConnectJobFactory nullptr /* client_socket_factory */, nullptr /* host_resolver */, nullptr /* proxy_delegate */, + nullptr /* http_user_agent_settings */, SSLClientSocketContext(), SSLClientSocketContext(), nullptr /* socket_performance_watcher_factory */, diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc index b3367890c543dd..99943a35d88dfc 100644 --- a/net/socket/client_socket_pool_manager.cc +++ b/net/socket/client_socket_pool_manager.cc @@ -11,7 +11,6 @@ #include "base/strings/stringprintf.h" #include "net/base/load_flags.h" #include "net/http/http_proxy_connect_job.h" -#include "net/http/http_request_info.h" #include "net/http/http_stream_factory.h" #include "net/proxy_resolution/proxy_info.h" #include "net/socket/client_socket_handle.h" @@ -72,7 +71,6 @@ scoped_refptr CreateSocketParamsAndGetGroupName( ClientSocketPoolManager::SocketGroupType group_type, const HostPortPair& endpoint, - const HttpRequestHeaders& request_extra_headers, int request_load_flags, HttpNetworkSession* session, const ProxyInfo& proxy_info, @@ -132,9 +130,6 @@ CreateSocketParamsAndGetGroupName( *connection_group = "https_proxy/" + *connection_group; } - std::string user_agent; - request_extra_headers.GetHeader(HttpRequestHeaders::kUserAgent, - &user_agent); scoped_refptr ssl_params; if (!proxy_info.is_http()) { proxy_tcp_params = new TransportSocketParams( @@ -152,11 +147,10 @@ CreateSocketParamsAndGetGroupName( } http_proxy_params = new HttpProxySocketParams( - proxy_tcp_params, ssl_params, quic_version, user_agent, - origin_host_port, session->http_auth_cache(), - session->http_auth_handler_factory(), session->spdy_session_pool(), - session->quic_stream_factory(), proxy_server.is_trusted_proxy(), - force_tunnel || using_ssl, + proxy_tcp_params, ssl_params, quic_version, origin_host_port, + session->http_auth_cache(), session->http_auth_handler_factory(), + session->spdy_session_pool(), session->quic_stream_factory(), + proxy_server.is_trusted_proxy(), force_tunnel || using_ssl, NetworkTrafficAnnotationTag(proxy_info.traffic_annotation())); } else { DCHECK(proxy_info.is_socks()); @@ -213,7 +207,6 @@ CreateSocketParamsAndGetGroupName( int InitSocketPoolHelper( ClientSocketPoolManager::SocketGroupType group_type, const HostPortPair& endpoint, - const HttpRequestHeaders& request_extra_headers, int request_load_flags, RequestPriority request_priority, HttpNetworkSession* session, @@ -234,10 +227,9 @@ int InitSocketPoolHelper( std::string connection_group; scoped_refptr socket_params = CreateSocketParamsAndGetGroupName( - group_type, endpoint, request_extra_headers, request_load_flags, - session, proxy_info, quic_version, ssl_config_for_origin, - ssl_config_for_proxy, force_tunnel, privacy_mode, resolution_callback, - &connection_group); + group_type, endpoint, request_load_flags, session, proxy_info, + quic_version, ssl_config_for_origin, ssl_config_for_proxy, + force_tunnel, privacy_mode, resolution_callback, &connection_group); TransportClientSocketPool* pool = session->GetSocketPool(socket_pool_type, proxy_info.proxy_server()); @@ -340,7 +332,6 @@ void ClientSocketPoolManager::set_unused_idle_socket_timeout( int InitSocketHandleForHttpRequest( ClientSocketPoolManager::SocketGroupType group_type, const HostPortPair& endpoint, - const HttpRequestHeaders& request_extra_headers, int request_load_flags, RequestPriority request_priority, HttpNetworkSession* session, @@ -357,18 +348,16 @@ int InitSocketHandleForHttpRequest( const ClientSocketPool::ProxyAuthCallback& proxy_auth_callback) { DCHECK(socket_handle); return InitSocketPoolHelper( - group_type, endpoint, request_extra_headers, request_load_flags, - request_priority, session, proxy_info, quic_version, - ssl_config_for_origin, ssl_config_for_proxy, /*force_tunnel=*/false, - privacy_mode, socket_tag, net_log, 0, socket_handle, - HttpNetworkSession::NORMAL_SOCKET_POOL, resolution_callback, - std::move(callback), proxy_auth_callback); + group_type, endpoint, request_load_flags, request_priority, session, + proxy_info, quic_version, ssl_config_for_origin, ssl_config_for_proxy, + /*force_tunnel=*/false, privacy_mode, socket_tag, net_log, 0, + socket_handle, HttpNetworkSession::NORMAL_SOCKET_POOL, + resolution_callback, std::move(callback), proxy_auth_callback); } int InitSocketHandleForWebSocketRequest( ClientSocketPoolManager::SocketGroupType group_type, const HostPortPair& endpoint, - const HttpRequestHeaders& request_extra_headers, int request_load_flags, RequestPriority request_priority, HttpNetworkSession* session, @@ -383,9 +372,9 @@ int InitSocketHandleForWebSocketRequest( const ClientSocketPool::ProxyAuthCallback& proxy_auth_callback) { DCHECK(socket_handle); return InitSocketPoolHelper( - group_type, endpoint, request_extra_headers, request_load_flags, - request_priority, session, proxy_info, quic::QUIC_VERSION_UNSUPPORTED, - ssl_config_for_origin, ssl_config_for_proxy, + group_type, endpoint, request_load_flags, request_priority, session, + proxy_info, quic::QUIC_VERSION_UNSUPPORTED, ssl_config_for_origin, + ssl_config_for_proxy, /*force_tunnel=*/true, privacy_mode, SocketTag(), net_log, 0, socket_handle, HttpNetworkSession::WEBSOCKET_SOCKET_POOL, resolution_callback, std::move(callback), proxy_auth_callback); @@ -405,14 +394,13 @@ int InitSocketHandleForRawConnect( CompletionOnceCallback callback, const ClientSocketPool::ProxyAuthCallback& proxy_auth_callback) { DCHECK(socket_handle); - HttpRequestHeaders request_extra_headers; return InitSocketPoolHelper( - ClientSocketPoolManager::NORMAL_GROUP, host_port_pair, - request_extra_headers, request_load_flags, request_priority, session, - proxy_info, quic::QUIC_VERSION_UNSUPPORTED, ssl_config_for_origin, - ssl_config_for_proxy, /*force_tunnel=*/true, privacy_mode, SocketTag(), - net_log, 0, socket_handle, HttpNetworkSession::NORMAL_SOCKET_POOL, - OnHostResolutionCallback(), std::move(callback), proxy_auth_callback); + ClientSocketPoolManager::NORMAL_GROUP, host_port_pair, request_load_flags, + request_priority, session, proxy_info, quic::QUIC_VERSION_UNSUPPORTED, + ssl_config_for_origin, ssl_config_for_proxy, /*force_tunnel=*/true, + privacy_mode, SocketTag(), net_log, 0, socket_handle, + HttpNetworkSession::NORMAL_SOCKET_POOL, OnHostResolutionCallback(), + std::move(callback), proxy_auth_callback); } int InitSocketHandleForTlsConnect( @@ -429,12 +417,10 @@ int InitSocketHandleForTlsConnect( CompletionOnceCallback callback, const ClientSocketPool::ProxyAuthCallback& proxy_auth_callback) { DCHECK(socket_handle); - HttpRequestHeaders request_extra_headers; return InitSocketPoolHelper( - ClientSocketPoolManager::SSL_GROUP, endpoint, request_extra_headers, - request_load_flags, request_priority, session, proxy_info, - quic::QUIC_VERSION_UNSUPPORTED, ssl_config_for_origin, - ssl_config_for_proxy, + ClientSocketPoolManager::SSL_GROUP, endpoint, request_load_flags, + request_priority, session, proxy_info, quic::QUIC_VERSION_UNSUPPORTED, + ssl_config_for_origin, ssl_config_for_proxy, /*force_tunnel=*/true, privacy_mode, SocketTag(), net_log, 0, socket_handle, HttpNetworkSession::NORMAL_SOCKET_POOL, OnHostResolutionCallback(), std::move(callback), proxy_auth_callback); @@ -443,7 +429,6 @@ int InitSocketHandleForTlsConnect( int PreconnectSocketsForHttpRequest( ClientSocketPoolManager::SocketGroupType group_type, const HostPortPair& endpoint, - const HttpRequestHeaders& request_extra_headers, int request_load_flags, RequestPriority request_priority, HttpNetworkSession* session, @@ -454,9 +439,9 @@ int PreconnectSocketsForHttpRequest( const NetLogWithSource& net_log, int num_preconnect_streams) { return InitSocketPoolHelper( - group_type, endpoint, request_extra_headers, request_load_flags, - request_priority, session, proxy_info, quic::QUIC_VERSION_UNSUPPORTED, - ssl_config_for_origin, ssl_config_for_proxy, + group_type, endpoint, request_load_flags, request_priority, session, + proxy_info, quic::QUIC_VERSION_UNSUPPORTED, ssl_config_for_origin, + ssl_config_for_proxy, /*force_tunnel=*/false, privacy_mode, SocketTag(), net_log, num_preconnect_streams, NULL, HttpNetworkSession::NORMAL_SOCKET_POOL, OnHostResolutionCallback(), CompletionOnceCallback(), diff --git a/net/socket/client_socket_pool_manager.h b/net/socket/client_socket_pool_manager.h index cb683d37c85170..71aa9a267ab53a 100644 --- a/net/socket/client_socket_pool_manager.h +++ b/net/socket/client_socket_pool_manager.h @@ -32,7 +32,6 @@ typedef base::Callback class ClientSocketHandle; class HostPortPair; class HttpNetworkSession; -class HttpRequestHeaders; class NetLogWithSource; class ProxyInfo; class ProxyServer; @@ -109,7 +108,6 @@ class NET_EXPORT_PRIVATE ClientSocketPoolManager { int InitSocketHandleForHttpRequest( ClientSocketPoolManager::SocketGroupType group_type, const HostPortPair& endpoint, - const HttpRequestHeaders& request_extra_headers, int request_load_flags, RequestPriority request_priority, HttpNetworkSession* session, @@ -137,7 +135,6 @@ int InitSocketHandleForHttpRequest( int InitSocketHandleForWebSocketRequest( ClientSocketPoolManager::SocketGroupType group_type, const HostPortPair& endpoint, - const HttpRequestHeaders& request_extra_headers, int request_load_flags, RequestPriority request_priority, HttpNetworkSession* session, @@ -194,7 +191,6 @@ NET_EXPORT int InitSocketHandleForTlsConnect( int PreconnectSocketsForHttpRequest( ClientSocketPoolManager::SocketGroupType group_type, const HostPortPair& endpoint, - const HttpRequestHeaders& request_extra_headers, int request_load_flags, RequestPriority request_priority, HttpNetworkSession* session, diff --git a/net/socket/client_socket_pool_manager_impl.cc b/net/socket/client_socket_pool_manager_impl.cc index c0de62ac690024..19d97f4a456741 100644 --- a/net/socket/client_socket_pool_manager_impl.cc +++ b/net/socket/client_socket_pool_manager_impl.cc @@ -38,6 +38,7 @@ ClientSocketPoolManagerImpl::ClientSocketPoolManagerImpl( SSLConfigService* ssl_config_service, WebSocketEndpointLockManager* websocket_endpoint_lock_manager, ProxyDelegate* proxy_delegate, + const HttpUserAgentSettings* http_user_agent_settings, HttpNetworkSession::SocketPoolType pool_type) : net_log_(net_log), socket_factory_(socket_factory), @@ -55,6 +56,7 @@ ClientSocketPoolManagerImpl::ClientSocketPoolManagerImpl( ssl_config_service_(ssl_config_service), websocket_endpoint_lock_manager_(websocket_endpoint_lock_manager), proxy_delegate_(proxy_delegate), + http_user_agent_settings_(http_user_agent_settings), pool_type_(pool_type) { CertDatabase::GetInstance()->AddObserver(this); } @@ -101,21 +103,22 @@ TransportClientSocketPool* ClientSocketPoolManagerImpl::GetSocketPool( new_pool = std::make_unique( sockets_per_proxy_server, sockets_per_group, unused_idle_socket_timeout(pool_type_), socket_factory_, host_resolver_, - proxy_delegate_, cert_verifier_, channel_id_service_, - transport_security_state_, cert_transparency_verifier_, - ct_policy_enforcer_, ssl_client_session_cache_, - ssl_client_session_cache_privacy_mode_, ssl_config_service_, - network_quality_estimator_, websocket_endpoint_lock_manager_, net_log_); + proxy_delegate_, http_user_agent_settings_, cert_verifier_, + channel_id_service_, transport_security_state_, + cert_transparency_verifier_, ct_policy_enforcer_, + ssl_client_session_cache_, ssl_client_session_cache_privacy_mode_, + ssl_config_service_, network_quality_estimator_, + websocket_endpoint_lock_manager_, net_log_); } else { new_pool = std::make_unique( sockets_per_proxy_server, sockets_per_group, unused_idle_socket_timeout(pool_type_), socket_factory_, host_resolver_, - proxy_delegate_, cert_verifier_, channel_id_service_, - transport_security_state_, cert_transparency_verifier_, - ct_policy_enforcer_, ssl_client_session_cache_, - ssl_client_session_cache_privacy_mode_, ssl_config_service_, - socket_performance_watcher_factory_, network_quality_estimator_, - net_log_); + proxy_delegate_, http_user_agent_settings_, cert_verifier_, + channel_id_service_, transport_security_state_, + cert_transparency_verifier_, ct_policy_enforcer_, + ssl_client_session_cache_, ssl_client_session_cache_privacy_mode_, + ssl_config_service_, socket_performance_watcher_factory_, + network_quality_estimator_, net_log_); } std::pair ret = diff --git a/net/socket/client_socket_pool_manager_impl.h b/net/socket/client_socket_pool_manager_impl.h index 8568410be5c343..446ce2a9746229 100644 --- a/net/socket/client_socket_pool_manager_impl.h +++ b/net/socket/client_socket_pool_manager_impl.h @@ -32,6 +32,7 @@ class ChannelIDService; class ClientSocketFactory; class CTVerifier; class HostResolver; +class HttpUserAgentSettings; class NetLog; class NetworkQualityEstimator; class ProxyDelegate; @@ -63,6 +64,7 @@ class NET_EXPORT_PRIVATE ClientSocketPoolManagerImpl SSLConfigService* ssl_config_service, WebSocketEndpointLockManager* websocket_endpoint_lock_manager, ProxyDelegate* proxy_delegate, + const HttpUserAgentSettings* http_user_agent_settings, HttpNetworkSession::SocketPoolType pool_type); ~ClientSocketPoolManagerImpl() override; @@ -102,6 +104,7 @@ class NET_EXPORT_PRIVATE ClientSocketPoolManagerImpl SSLConfigService* const ssl_config_service_; WebSocketEndpointLockManager* const websocket_endpoint_lock_manager_; ProxyDelegate* const proxy_delegate_; + const HttpUserAgentSettings* const http_user_agent_settings_; const HttpNetworkSession::SocketPoolType pool_type_; TransportSocketPoolMap socket_pools_; diff --git a/net/socket/connect_job.cc b/net/socket/connect_job.cc index 10ba19bda71dac..f35a8656c526c2 100644 --- a/net/socket/connect_job.cc +++ b/net/socket/connect_job.cc @@ -21,6 +21,7 @@ CommonConnectJobParams::CommonConnectJobParams( ClientSocketFactory* client_socket_factory, HostResolver* host_resolver, ProxyDelegate* proxy_delegate, + const HttpUserAgentSettings* http_user_agent_settings, const SSLClientSocketContext& ssl_client_socket_context, const SSLClientSocketContext& ssl_client_socket_context_privacy_mode, SocketPerformanceWatcherFactory* socket_performance_watcher_factory, @@ -30,6 +31,7 @@ CommonConnectJobParams::CommonConnectJobParams( : client_socket_factory(client_socket_factory), host_resolver(host_resolver), proxy_delegate(proxy_delegate), + http_user_agent_settings(http_user_agent_settings), ssl_client_socket_context(ssl_client_socket_context), ssl_client_socket_context_privacy_mode( ssl_client_socket_context_privacy_mode), diff --git a/net/socket/connect_job.h b/net/socket/connect_job.h index 49dedfbf0720e8..65dc78b98a4811 100644 --- a/net/socket/connect_job.h +++ b/net/socket/connect_job.h @@ -29,6 +29,7 @@ class ClientSocketHandle; class HostResolver; class HttpAuthController; class HttpResponseInfo; +class HttpUserAgentSettings; class NetLog; class NetworkQualityEstimator; class ProxyDelegate; @@ -46,6 +47,7 @@ struct NET_EXPORT_PRIVATE CommonConnectJobParams { ClientSocketFactory* client_socket_factory, HostResolver* host_resolver, ProxyDelegate* proxy_delegate, + const HttpUserAgentSettings* http_user_agent_settings, const SSLClientSocketContext& ssl_client_socket_context, const SSLClientSocketContext& ssl_client_socket_context_privacy_mode, SocketPerformanceWatcherFactory* socket_performance_watcher_factory, @@ -60,6 +62,7 @@ struct NET_EXPORT_PRIVATE CommonConnectJobParams { ClientSocketFactory* client_socket_factory; HostResolver* host_resolver; ProxyDelegate* proxy_delegate; + const HttpUserAgentSettings* http_user_agent_settings; SSLClientSocketContext ssl_client_socket_context; SSLClientSocketContext ssl_client_socket_context_privacy_mode; SocketPerformanceWatcherFactory* socket_performance_watcher_factory; diff --git a/net/socket/connect_job_unittest.cc b/net/socket/connect_job_unittest.cc index 915d02b767e611..cfd1c5882cfe9b 100644 --- a/net/socket/connect_job_unittest.cc +++ b/net/socket/connect_job_unittest.cc @@ -95,6 +95,7 @@ class ConnectJobTest : public testing::Test { nullptr /* client_socket_factory */, nullptr /* host_resolver */, nullptr /* proxy_delegate */, + nullptr /* http_user_agent_settings */, SSLClientSocketContext(), SSLClientSocketContext(), nullptr /* socket_performance_watcher_factory */, diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc index 90ede3197e762a..7ecb940d58c898 100644 --- a/net/socket/socket_test_util.cc +++ b/net/socket/socket_test_util.cc @@ -2078,6 +2078,7 @@ MockTransportClientSocketPool::MockTransportClientSocketPool( socket_factory, nullptr /* host_resolver */, nullptr /* proxy_delegate */, + nullptr /* http_user_agent_settings */, nullptr /* cert_verifier */, nullptr /* channel_id_server */, nullptr /* transport_security_state */, diff --git a/net/socket/socks_connect_job_unittest.cc b/net/socket/socks_connect_job_unittest.cc index 12d6d3ae69cb3f..a0c86a77f807e6 100644 --- a/net/socket/socks_connect_job_unittest.cc +++ b/net/socket/socks_connect_job_unittest.cc @@ -54,6 +54,7 @@ class SOCKSConnectJobTest : public testing::Test, &client_socket_factory_, &host_resolver_, nullptr /* proxy_delegate */, + nullptr /* http_user_agent_settings */, SSLClientSocketContext(), SSLClientSocketContext(), nullptr /* socket_performance_watcher_factory */, diff --git a/net/socket/ssl_connect_job_unittest.cc b/net/socket/ssl_connect_job_unittest.cc index 7c31bcd17305ba..bd0b41186ecb3b 100644 --- a/net/socket/ssl_connect_job_unittest.cc +++ b/net/socket/ssl_connect_job_unittest.cc @@ -37,7 +37,6 @@ #include "net/socket/socket_tag.h" #include "net/socket/socket_test_util.h" #include "net/socket/socks_connect_job.h" -#include "net/socket/transport_client_socket_pool.h" #include "net/socket/transport_connect_job.h" #include "net/ssl/ssl_config_service_defaults.h" #include "net/test/gtest_util.h" @@ -49,11 +48,6 @@ namespace net { namespace { -const int kMaxSockets = 32; -const int kMaxSocketsPerGroup = 6; -constexpr base::TimeDelta kUnusedIdleSocketTimeout = - base::TimeDelta::FromSeconds(10); - // Just check that all connect times are set to base::TimeTicks::Now(), for // tests that don't update the mocked out time. void CheckConnectTimesSet(const LoadTimingInfo::ConnectTiming& connect_timing) { @@ -113,7 +107,6 @@ class SSLConnectJobTest : public WithScopedTaskEnvironment, new HttpProxySocketParams(proxy_transport_socket_params_, nullptr /* ssl_params */, quic::QUIC_VERSION_UNSUPPORTED, - std::string(), HostPortPair("host", 80), session_->http_auth_cache(), session_->http_auth_handler_factory(), @@ -122,28 +115,11 @@ class SSLConnectJobTest : public WithScopedTaskEnvironment, /*is_trusted_proxy=*/false, /*tunnel=*/true, TRAFFIC_ANNOTATION_FOR_TESTS)), - http_proxy_socket_pool_( - kMaxSockets, - kMaxSocketsPerGroup, - kUnusedIdleSocketTimeout, - &socket_factory_, - &host_resolver_, - nullptr /* proxy_delegate */, - nullptr /* cert_verifier */, - nullptr /* channel_id_server */, - nullptr /* transport_security_state */, - nullptr /* cert_transparency_verifier */, - nullptr /* ct_policy_enforcer */, - nullptr /* ssl_client_session_cache */, - nullptr /* ssl_client_session_cache_privacy_mode */, - nullptr /* ssl_config_service */, - nullptr /* socket_performance_watcher_factory */, - nullptr /* network_quality_estimator */, - nullptr /* net_log */), common_connect_job_params_( &socket_factory_, &host_resolver_, nullptr /* proxy_delegate */, + nullptr /* http_user_agent_settings */, ssl_client_socket_context_, ssl_client_socket_context_, nullptr /* socket_performance_watcher */, @@ -222,8 +198,6 @@ class SSLConnectJobTest : public WithScopedTaskEnvironment, scoped_refptr socks_socket_params_; scoped_refptr http_proxy_socket_params_; - TransportClientSocketPool http_proxy_socket_pool_; - SSLConfig ssl_config_; const CommonConnectJobParams common_connect_job_params_; }; diff --git a/net/socket/transport_client_socket_pool.cc b/net/socket/transport_client_socket_pool.cc index 2c00e22cad09a3..69b9224f7af072 100644 --- a/net/socket/transport_client_socket_pool.cc +++ b/net/socket/transport_client_socket_pool.cc @@ -122,6 +122,7 @@ TransportClientSocketPool::TransportConnectJobFactory:: ClientSocketFactory* client_socket_factory, HostResolver* host_resolver, ProxyDelegate* proxy_delegate, + const HttpUserAgentSettings* http_user_agent_settings, const SSLClientSocketContext& ssl_client_socket_context, const SSLClientSocketContext& ssl_client_socket_context_privacy_mode, SocketPerformanceWatcherFactory* socket_performance_watcher_factory, @@ -131,6 +132,7 @@ TransportClientSocketPool::TransportConnectJobFactory:: client_socket_factory, host_resolver, proxy_delegate, + http_user_agent_settings, ssl_client_socket_context, ssl_client_socket_context_privacy_mode, socket_performance_watcher_factory, @@ -157,6 +159,7 @@ TransportClientSocketPool::TransportClientSocketPool( ClientSocketFactory* client_socket_factory, HostResolver* host_resolver, ProxyDelegate* proxy_delegate, + const HttpUserAgentSettings* http_user_agent_settings, CertVerifier* cert_verifier, ChannelIDService* channel_id_service, TransportSecurityState* transport_security_state, @@ -176,6 +179,7 @@ TransportClientSocketPool::TransportClientSocketPool( client_socket_factory, host_resolver, proxy_delegate, + http_user_agent_settings, SSLClientSocketContext(cert_verifier, channel_id_service, transport_security_state, diff --git a/net/socket/transport_client_socket_pool.h b/net/socket/transport_client_socket_pool.h index e8aa4873d1dc95..eda35d443a07dc 100644 --- a/net/socket/transport_client_socket_pool.h +++ b/net/socket/transport_client_socket_pool.h @@ -29,6 +29,7 @@ class CTVerifier; class CTPolicyEnforcer; class HostResolver; class HttpProxySocketParams; +class HttpUserAgentSettings; class NetLog; class NetLogWithSource; class NetworkQualityEstimator; @@ -98,6 +99,7 @@ class NET_EXPORT_PRIVATE TransportClientSocketPool ClientSocketFactory* client_socket_factory, HostResolver* host_resolver, ProxyDelegate* proxy_delegate, + const HttpUserAgentSettings* http_user_agent_settings, CertVerifier* cert_verifier, ChannelIDService* channel_id_service, TransportSecurityState* transport_security_state, @@ -173,6 +175,7 @@ class NET_EXPORT_PRIVATE TransportClientSocketPool ClientSocketFactory* client_socket_factory, HostResolver* host_resolver, ProxyDelegate* proxy_delegate, + const HttpUserAgentSettings* http_user_agent_settings, const SSLClientSocketContext& ssl_client_socket_context, const SSLClientSocketContext& ssl_client_socket_context_privacy_mode, SocketPerformanceWatcherFactory* socket_performance_watcher_factory, diff --git a/net/socket/transport_client_socket_pool_unittest.cc b/net/socket/transport_client_socket_pool_unittest.cc index 2e8aa5e1fc6107..64255afb841192 100644 --- a/net/socket/transport_client_socket_pool_unittest.cc +++ b/net/socket/transport_client_socket_pool_unittest.cc @@ -104,8 +104,8 @@ class TransportClientSocketPoolTest : public TestWithScopedTaskEnvironment { pool_ = std::make_unique( kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, &client_socket_factory_, session_deps_.host_resolver.get(), - nullptr /* proxy_delegate */, session_deps_.cert_verifier.get(), - nullptr /* channel_id_server */, + nullptr /* proxy_delegate */, nullptr /* http_user_agent_settings */, + session_deps_.cert_verifier.get(), nullptr /* channel_id_server */, session_deps_.transport_security_state.get(), session_deps_.cert_transparency_verifier.get(), session_deps_.ct_policy_enforcer.get(), @@ -118,8 +118,8 @@ class TransportClientSocketPoolTest : public TestWithScopedTaskEnvironment { tagging_pool_ = std::make_unique( kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, &tagging_client_socket_factory_, session_deps_.host_resolver.get(), - nullptr /* proxy_delegate */, session_deps_.cert_verifier.get(), - nullptr /* channel_id_server */, + nullptr /* proxy_delegate */, nullptr /* http_user_agent_settings */, + session_deps_.cert_verifier.get(), nullptr /* channel_id_server */, session_deps_.transport_security_state.get(), session_deps_.cert_transparency_verifier.get(), session_deps_.ct_policy_enforcer.get(), @@ -133,6 +133,7 @@ class TransportClientSocketPoolTest : public TestWithScopedTaskEnvironment { kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, ClientSocketFactory::GetDefaultFactory(), session_deps_.host_resolver.get(), nullptr /* proxy_delegate */, + nullptr /* http_user_agent_settings */, session_deps_.cert_verifier.get(), nullptr /* channel_id_server */, session_deps_.transport_security_state.get(), session_deps_.cert_transparency_verifier.get(), @@ -490,8 +491,8 @@ TEST_F(TransportClientSocketPoolTest, RequestIgnoringLimitsIsReprioritized) { TransportClientSocketPool pool( kMaxSockets, 1, kUnusedIdleSocketTimeout, &client_socket_factory_, session_deps_.host_resolver.get(), nullptr /* proxy_delegate */, - nullptr /* cert_verifier */, nullptr /* channel_id_server */, - nullptr /* transport_security_state */, + nullptr /* http_user_agent_settings */, nullptr /* cert_verifier */, + nullptr /* channel_id_server */, nullptr /* transport_security_state */, nullptr /* cert_transparency_verifier */, nullptr /* ct_policy_enforcer */, nullptr /* ssl_client_session_cache */, nullptr /* ssl_client_session_cache_privacy_mode */, @@ -1755,7 +1756,7 @@ TEST_F(TransportClientSocketPoolTest, TagHttpProxyNoTunnel) { HostPortPair("http.proxy.host", 80), false, OnHostResolutionCallback()), nullptr /* ssl_params */, quic::QUIC_VERSION_UNSUPPORTED, - std::string(), HostPortPair("www.google.com", 80), + HostPortPair("www.google.com", 80), http_network_session_->http_auth_cache(), http_network_session_->http_auth_handler_factory(), http_network_session_->spdy_session_pool(), @@ -1824,7 +1825,7 @@ TEST_F(TransportClientSocketPoolTest, TagHttpProxyTunnel) { HostPortPair("http.proxy.host", 80), false, OnHostResolutionCallback()), nullptr /* ssl_params */, quic::QUIC_VERSION_UNSUPPORTED, - std::string(), HostPortPair("www.google.com", 443), + HostPortPair("www.google.com", 443), http_network_session_->http_auth_cache(), http_network_session_->http_auth_handler_factory(), http_network_session_->spdy_session_pool(), diff --git a/net/socket/transport_connect_job_unittest.cc b/net/socket/transport_connect_job_unittest.cc index 0fbc0a6931621b..decfde563df74a 100644 --- a/net/socket/transport_connect_job_unittest.cc +++ b/net/socket/transport_connect_job_unittest.cc @@ -37,6 +37,7 @@ class TransportConnectJobTest : public TestWithScopedTaskEnvironment { &client_socket_factory_, &host_resolver_, nullptr /* proxy_delegate */, + nullptr /* http_user_agent_settings */, SSLClientSocketContext(), SSLClientSocketContext(), nullptr /* socket_performance_watcher_factory */, diff --git a/net/socket/websocket_transport_client_socket_pool.cc b/net/socket/websocket_transport_client_socket_pool.cc index 4a5c6d0f4aa71d..87914b78365b7d 100644 --- a/net/socket/websocket_transport_client_socket_pool.cc +++ b/net/socket/websocket_transport_client_socket_pool.cc @@ -33,6 +33,7 @@ WebSocketTransportClientSocketPool::WebSocketTransportClientSocketPool( ClientSocketFactory* client_socket_factory, HostResolver* host_resolver, ProxyDelegate* proxy_delegate, + const HttpUserAgentSettings* http_user_agent_settings, CertVerifier* cert_verifier, ChannelIDService* channel_id_service, TransportSecurityState* transport_security_state, @@ -51,6 +52,7 @@ WebSocketTransportClientSocketPool::WebSocketTransportClientSocketPool( client_socket_factory, host_resolver, proxy_delegate, + http_user_agent_settings, cert_verifier, channel_id_service, transport_security_state, @@ -66,6 +68,7 @@ WebSocketTransportClientSocketPool::WebSocketTransportClientSocketPool( client_socket_factory, host_resolver, proxy_delegate, + http_user_agent_settings, SSLClientSocketContext(cert_verifier, channel_id_service, transport_security_state, diff --git a/net/socket/websocket_transport_client_socket_pool.h b/net/socket/websocket_transport_client_socket_pool.h index 4fe02529501772..9a4b401da8c4cf 100644 --- a/net/socket/websocket_transport_client_socket_pool.h +++ b/net/socket/websocket_transport_client_socket_pool.h @@ -33,6 +33,7 @@ namespace net { class ClientSocketFactory; class HostResolver; +class HttpUserAgentSettings; class NetLog; class NetworkQualityEstimator; class ProxyDelegate; @@ -50,6 +51,7 @@ class NET_EXPORT_PRIVATE WebSocketTransportClientSocketPool ClientSocketFactory* client_socket_factory, HostResolver* host_resolver, ProxyDelegate* proxy_delegate, + const HttpUserAgentSettings* http_user_agent_settings, CertVerifier* cert_verifier, ChannelIDService* channel_id_service, TransportSecurityState* transport_security_state, diff --git a/net/socket/websocket_transport_client_socket_pool_unittest.cc b/net/socket/websocket_transport_client_socket_pool_unittest.cc index 13d66789f42bb7..bc01f6858e6273 100644 --- a/net/socket/websocket_transport_client_socket_pool_unittest.cc +++ b/net/socket/websocket_transport_client_socket_pool_unittest.cc @@ -75,6 +75,7 @@ class WebSocketTransportClientSocketPoolTest &client_socket_factory_, host_resolver_.get(), nullptr /* proxy_delegate */, + nullptr /* http_user_agent_settings */, nullptr /* cert_verifier */, nullptr /* channel_id_server */, nullptr /* transport_security_state */, @@ -565,8 +566,9 @@ TEST_F(WebSocketTransportClientSocketPoolTest, WebSocketTransportClientSocketPool pool( kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, &client_socket_factory_, host_resolver_.get(), - nullptr /* proxy_delegate */, nullptr /* cert_verifier */, - nullptr /* channel_id_server */, nullptr /* transport_security_state */, + nullptr /* proxy_delegate */, nullptr /* http_user_agent_settings */, + nullptr /* cert_verifier */, nullptr /* channel_id_server */, + nullptr /* transport_security_state */, nullptr /* cert_transparency_verifier */, nullptr /* ct_policy_enforcer */, nullptr /* ssl_client_session_cache */, nullptr /* ssl_client_session_cache_privacy_mode */, @@ -612,8 +614,9 @@ TEST_F(WebSocketTransportClientSocketPoolTest, WebSocketTransportClientSocketPool pool( kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, &client_socket_factory_, host_resolver_.get(), - nullptr /* proxy_delegate */, nullptr /* cert_verifier */, - nullptr /* channel_id_server */, nullptr /* transport_security_state */, + nullptr /* proxy_delegate */, nullptr /* http_user_agent_settings */, + nullptr /* cert_verifier */, nullptr /* channel_id_server */, + nullptr /* transport_security_state */, nullptr /* cert_transparency_verifier */, nullptr /* ct_policy_enforcer */, nullptr /* ssl_client_session_cache */, nullptr /* ssl_client_session_cache_privacy_mode */, @@ -658,8 +661,9 @@ TEST_F(WebSocketTransportClientSocketPoolTest, WebSocketTransportClientSocketPool pool( kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, &client_socket_factory_, host_resolver_.get(), - nullptr /* proxy_delegate */, nullptr /* cert_verifier */, - nullptr /* channel_id_server */, nullptr /* transport_security_state */, + nullptr /* proxy_delegate */, nullptr /* http_user_agent_settings */, + nullptr /* cert_verifier */, nullptr /* channel_id_server */, + nullptr /* transport_security_state */, nullptr /* cert_transparency_verifier */, nullptr /* ct_policy_enforcer */, nullptr /* ssl_client_session_cache */, nullptr /* ssl_client_session_cache_privacy_mode */, @@ -696,8 +700,9 @@ TEST_F(WebSocketTransportClientSocketPoolTest, IPv4HasNoFallback) { WebSocketTransportClientSocketPool pool( kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, &client_socket_factory_, host_resolver_.get(), - nullptr /* proxy_delegate */, nullptr /* cert_verifier */, - nullptr /* channel_id_server */, nullptr /* transport_security_state */, + nullptr /* proxy_delegate */, nullptr /* http_user_agent_settings */, + nullptr /* cert_verifier */, nullptr /* channel_id_server */, + nullptr /* transport_security_state */, nullptr /* cert_transparency_verifier */, nullptr /* ct_policy_enforcer */, nullptr /* ssl_client_session_cache */, nullptr /* ssl_client_session_cache_privacy_mode */, @@ -735,8 +740,9 @@ TEST_F(WebSocketTransportClientSocketPoolTest, IPv6InstantFail) { WebSocketTransportClientSocketPool pool( kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, &client_socket_factory_, host_resolver_.get(), - nullptr /* proxy_delegate */, nullptr /* cert_verifier */, - nullptr /* channel_id_server */, nullptr /* transport_security_state */, + nullptr /* proxy_delegate */, nullptr /* http_user_agent_settings */, + nullptr /* cert_verifier */, nullptr /* channel_id_server */, + nullptr /* transport_security_state */, nullptr /* cert_transparency_verifier */, nullptr /* ct_policy_enforcer */, nullptr /* ssl_client_session_cache */, nullptr /* ssl_client_session_cache_privacy_mode */, @@ -778,8 +784,9 @@ TEST_F(WebSocketTransportClientSocketPoolTest, IPv6RapidFail) { WebSocketTransportClientSocketPool pool( kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, &client_socket_factory_, host_resolver_.get(), - nullptr /* proxy_delegate */, nullptr /* cert_verifier */, - nullptr /* channel_id_server */, nullptr /* transport_security_state */, + nullptr /* proxy_delegate */, nullptr /* http_user_agent_settings */, + nullptr /* cert_verifier */, nullptr /* channel_id_server */, + nullptr /* transport_security_state */, nullptr /* cert_transparency_verifier */, nullptr /* ct_policy_enforcer */, nullptr /* ssl_client_session_cache */, nullptr /* ssl_client_session_cache_privacy_mode */, @@ -829,8 +836,9 @@ TEST_F(WebSocketTransportClientSocketPoolTest, FirstSuccessWins) { WebSocketTransportClientSocketPool pool( kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, &client_socket_factory_, host_resolver_.get(), - nullptr /* proxy_delegate */, nullptr /* cert_verifier */, - nullptr /* channel_id_server */, nullptr /* transport_security_state */, + nullptr /* proxy_delegate */, nullptr /* http_user_agent_settings */, + nullptr /* cert_verifier */, nullptr /* channel_id_server */, + nullptr /* transport_security_state */, nullptr /* cert_transparency_verifier */, nullptr /* ct_policy_enforcer */, nullptr /* ssl_client_session_cache */, nullptr /* ssl_client_session_cache_privacy_mode */, @@ -874,8 +882,9 @@ TEST_F(WebSocketTransportClientSocketPoolTest, LastFailureWins) { WebSocketTransportClientSocketPool pool( kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, &client_socket_factory_, host_resolver_.get(), - nullptr /* proxy_delegate */, nullptr /* cert_verifier */, - nullptr /* channel_id_server */, nullptr /* transport_security_state */, + nullptr /* proxy_delegate */, nullptr /* http_user_agent_settings */, + nullptr /* cert_verifier */, nullptr /* channel_id_server */, + nullptr /* transport_security_state */, nullptr /* cert_transparency_verifier */, nullptr /* ct_policy_enforcer */, nullptr /* ssl_client_session_cache */, nullptr /* ssl_client_session_cache_privacy_mode */, @@ -923,8 +932,9 @@ TEST_F(WebSocketTransportClientSocketPoolTest, DISABLED_OverallTimeoutApplies) { WebSocketTransportClientSocketPool pool( kMaxSockets, kMaxSocketsPerGroup, kUnusedIdleSocketTimeout, &client_socket_factory_, host_resolver_.get(), - nullptr /* proxy_delegate */, nullptr /* cert_verifier */, - nullptr /* channel_id_server */, nullptr /* transport_security_state */, + nullptr /* proxy_delegate */, nullptr /* http_user_agent_settings */, + nullptr /* cert_verifier */, nullptr /* channel_id_server */, + nullptr /* transport_security_state */, nullptr /* cert_transparency_verifier */, nullptr /* ct_policy_enforcer */, nullptr /* ssl_client_session_cache */, nullptr /* ssl_client_session_cache_privacy_mode */, diff --git a/net/spdy/spdy_proxy_client_socket_unittest.cc b/net/spdy/spdy_proxy_client_socket_unittest.cc index 7115c81293086e..f4103f150e9242 100644 --- a/net/spdy/spdy_proxy_client_socket_unittest.cc +++ b/net/spdy/spdy_proxy_client_socket_unittest.cc @@ -221,6 +221,7 @@ SpdyProxyClientSocketTest::SpdyProxyClientSocketTest() session_deps_.socket_factory.get(), session_deps_.host_resolver.get(), nullptr /* proxy_delegate */, + nullptr /* http_user_agent_settings */, SSLClientSocketContext(session_deps_.cert_verifier.get(), session_deps_.channel_id_service.get(), session_deps_.transport_security_state.get(), diff --git a/net/spdy/spdy_test_util_common.cc b/net/spdy/spdy_test_util_common.cc index 570805fa3820e7..c3dec2e2f15cfc 100644 --- a/net/spdy/spdy_test_util_common.cc +++ b/net/spdy/spdy_test_util_common.cc @@ -14,6 +14,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" #include "net/base/host_port_pair.h" +#include "net/base/http_user_agent_settings.h" #include "net/cert/ct_policy_enforcer.h" #include "net/cert/ct_policy_status.h" #include "net/cert/do_nothing_ct_verifier.h" @@ -412,6 +413,8 @@ HttpNetworkSession::Context SpdySessionDependencies::CreateSessionContext( context.ct_policy_enforcer = session_deps->ct_policy_enforcer.get(); context.proxy_resolution_service = session_deps->proxy_resolution_service.get(); + context.http_user_agent_settings = + session_deps->http_user_agent_settings.get(); context.ssl_config_service = session_deps->ssl_config_service.get(); context.http_auth_handler_factory = session_deps->http_auth_handler_factory.get(); diff --git a/net/spdy/spdy_test_util_common.h b/net/spdy/spdy_test_util_common.h index a15d79ea05208c..25797eb6463c0a 100644 --- a/net/spdy/spdy_test_util_common.h +++ b/net/spdy/spdy_test_util_common.h @@ -53,6 +53,7 @@ class CTPolicyEnforcer; class HashValue; class HostPortPair; class HostResolver; +class HttpUserAgentSettings; class NetLogWithSource; class SpdySessionKey; class SpdyStream; @@ -212,6 +213,7 @@ struct SpdySessionDependencies { std::unique_ptr cert_transparency_verifier; std::unique_ptr ct_policy_enforcer; std::unique_ptr proxy_resolution_service; + std::unique_ptr http_user_agent_settings; std::unique_ptr ssl_config_service; std::unique_ptr socket_factory; std::unique_ptr http_auth_handler_factory; diff --git a/net/url_request/static_http_user_agent_settings.h b/net/url_request/static_http_user_agent_settings.h index eda424096ca0d3..0ccfe130f00ec3 100644 --- a/net/url_request/static_http_user_agent_settings.h +++ b/net/url_request/static_http_user_agent_settings.h @@ -9,8 +9,8 @@ #include "base/compiler_specific.h" #include "base/macros.h" +#include "net/base/http_user_agent_settings.h" #include "net/base/net_export.h" -#include "net/url_request/http_user_agent_settings.h" namespace net { diff --git a/net/url_request/url_request_context.cc b/net/url_request/url_request_context.cc index f4fe7c404144e4..70a21380049d06 100644 --- a/net/url_request/url_request_context.cc +++ b/net/url_request/url_request_context.cc @@ -18,12 +18,12 @@ #include "base/trace_event/memory_dump_manager.h" #include "base/trace_event/memory_dump_request_args.h" #include "base/trace_event/process_memory_dump.h" +#include "net/base/http_user_agent_settings.h" #include "net/cookies/cookie_store.h" #include "net/dns/host_resolver.h" #include "net/http/http_cache.h" #include "net/http/http_transaction_factory.h" #include "net/socket/ssl_client_socket_impl.h" -#include "net/url_request/http_user_agent_settings.h" #include "net/url_request/url_request.h" namespace net { diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc index 28d0e680e40085..0207f8c7f1242b 100644 --- a/net/url_request/url_request_context_builder.cc +++ b/net/url_request/url_request_context_builder.cc @@ -213,6 +213,8 @@ void URLRequestContextBuilder::SetHttpNetworkSessionComponents( session_context->proxy_resolution_service = request_context->proxy_resolution_service(); session_context->proxy_delegate = request_context->proxy_delegate(); + session_context->http_user_agent_settings = + request_context->http_user_agent_settings(); session_context->ssl_config_service = request_context->ssl_config_service(); session_context->http_auth_handler_factory = request_context->http_auth_handler_factory(); diff --git a/net/url_request/url_request_context_storage.cc b/net/url_request/url_request_context_storage.cc index ab7bb7cde906e6..74fb1a4c805396 100644 --- a/net/url_request/url_request_context_storage.cc +++ b/net/url_request/url_request_context_storage.cc @@ -7,6 +7,7 @@ #include #include "base/logging.h" +#include "net/base/http_user_agent_settings.h" #include "net/base/network_delegate.h" #include "net/base/proxy_delegate.h" #include "net/cert/cert_verifier.h" @@ -20,7 +21,6 @@ #include "net/log/net_log.h" #include "net/proxy_resolution/proxy_resolution_service.h" #include "net/ssl/channel_id_service.h" -#include "net/url_request/http_user_agent_settings.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_job_factory.h" #include "net/url_request/url_request_throttler_manager.h" diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc index d853324ef64d21..5d55790cd09c3b 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc @@ -26,6 +26,7 @@ #include "base/trace_event/trace_event.h" #include "base/values.h" #include "net/base/host_port_pair.h" +#include "net/base/http_user_agent_settings.h" #include "net/base/load_flags.h" #include "net/base/net_errors.h" #include "net/base/network_delegate.h" @@ -61,7 +62,6 @@ #include "net/ssl/channel_id_service.h" #include "net/ssl/ssl_cert_request_info.h" #include "net/ssl/ssl_config_service.h" -#include "net/url_request/http_user_agent_settings.h" #include "net/url_request/url_request.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_error_job.h" diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc index 2c5d63ea32ae97..5a016a7ad8b329 100644 --- a/net/url_request/url_request_test_util.cc +++ b/net/url_request/url_request_test_util.cc @@ -113,6 +113,11 @@ void TestURLRequestContext::Init() { context_storage_.set_channel_id_service( std::make_unique(new DefaultChannelIDStore(nullptr))); } + if (!http_user_agent_settings() && create_default_http_user_agent_settings_) { + context_storage_.set_http_user_agent_settings( + std::make_unique("en-us,fr", + std::string())); + } if (http_transaction_factory()) { // Make sure we haven't been passed an object we're not going to use. EXPECT_FALSE(client_socket_factory_); @@ -132,6 +137,7 @@ void TestURLRequestContext::Init() { session_context.transport_security_state = transport_security_state(); session_context.proxy_resolution_service = proxy_resolution_service(); session_context.proxy_delegate = proxy_delegate(); + session_context.http_user_agent_settings = http_user_agent_settings(); session_context.ssl_config_service = ssl_config_service(); session_context.http_auth_handler_factory = http_auth_handler_factory(); session_context.http_server_properties = http_server_properties(); @@ -147,11 +153,6 @@ void TestURLRequestContext::Init() { context_storage_.http_network_session(), HttpCache::DefaultBackend::InMemory(0), true /* is_main_cache */)); } - if (!http_user_agent_settings() && create_default_http_user_agent_settings_) { - context_storage_.set_http_user_agent_settings( - std::make_unique("en-us,fr", - std::string())); - } if (!job_factory()) { context_storage_.set_job_factory( std::make_unique()); diff --git a/net/websockets/websocket_basic_stream_adapters_test.cc b/net/websockets/websocket_basic_stream_adapters_test.cc index 5a2d5c249818d3..c1144c9bf2e2d7 100644 --- a/net/websockets/websocket_basic_stream_adapters_test.cc +++ b/net/websockets/websocket_basic_stream_adapters_test.cc @@ -75,6 +75,7 @@ class WebSocketClientSocketHandleAdapterTest nullptr, &websocket_endpoint_lock_manager_, nullptr, + nullptr, HttpNetworkSession::NORMAL_SOCKET_POOL)), transport_params_(base::MakeRefCounted( host_port_pair_, diff --git a/services/network/network_context.cc b/services/network/network_context.cc index f00b2da4a6e1aa..c9cd1803402000 100644 --- a/services/network/network_context.cc +++ b/services/network/network_context.cc @@ -116,12 +116,12 @@ #endif // !defined(OS_IOS) #if BUILDFLAG(ENABLE_REPORTING) +#include "net/base/http_user_agent_settings.h" #include "net/network_error_logging/network_error_logging_service.h" #include "net/reporting/reporting_browsing_data_remover.h" #include "net/reporting/reporting_policy.h" #include "net/reporting/reporting_report.h" #include "net/reporting/reporting_service.h" -#include "net/url_request/http_user_agent_settings.h" #endif // BUILDFLAG(ENABLE_REPORTING) #if BUILDFLAG(ENABLE_MDNS) diff --git a/services/network/network_context_unittest.cc b/services/network/network_context_unittest.cc index 79425af0705421..d6f22f666f43f5 100644 --- a/services/network/network_context_unittest.cc +++ b/services/network/network_context_unittest.cc @@ -47,6 +47,7 @@ #include "net/base/features.h" #include "net/base/hash_value.h" #include "net/base/host_port_pair.h" +#include "net/base/http_user_agent_settings.h" #include "net/base/ip_endpoint.h" #include "net/base/net_errors.h" #include "net/base/network_change_notifier.h" @@ -86,7 +87,6 @@ #include "net/test/gtest_util.h" #include "net/test/test_data_directory.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "net/url_request/http_user_agent_settings.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_builder.h" #include "net/url_request/url_request_job_factory.h"