From 4dfffb8d0a039c8644087093c91b09df3b689eee Mon Sep 17 00:00:00 2001 From: klzgrad Date: Mon, 22 Jul 2024 00:21:45 +0800 Subject: [PATCH] net: Allow http proxies in proxy chains --- src/net/base/proxy_chain.cc | 2 +- src/net/http/http_proxy_connect_job.cc | 14 +++++++++++--- src/net/http/http_proxy_connect_job.h | 7 +++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/net/base/proxy_chain.cc b/src/net/base/proxy_chain.cc index 0c5ad9bd5a..def04b87b6 100644 --- a/src/net/base/proxy_chain.cc +++ b/src/net/base/proxy_chain.cc @@ -246,7 +246,7 @@ bool ProxyChain::IsValidInternal() const { return false; } seen_quic = true; - } else if (proxy_server.is_https()) { + } else if (proxy_server.is_https() || proxy_server.is_http()) { seen_https = true; } else { return false; diff --git a/src/net/http/http_proxy_connect_job.cc b/src/net/http/http_proxy_connect_job.cc index 8a8e5befc9..3afa41f661 100644 --- a/src/net/http/http_proxy_connect_job.cc +++ b/src/net/http/http_proxy_connect_job.cc @@ -496,9 +496,17 @@ int HttpProxyConnectJob::DoBeginConnect() { int HttpProxyConnectJob::DoTransportConnect() { ProxyServer::Scheme scheme = GetProxyServerScheme(); if (scheme == ProxyServer::SCHEME_HTTP) { - nested_connect_job_ = TransportConnectJob::Factory::CreateJob( - priority(), socket_tag(), common_connect_job_params(), - params_->transport_params(), this, &net_log()); + if (params_->is_over_transport()) { + nested_connect_job_ = TransportConnectJob::Factory::CreateJob( + priority(), socket_tag(), common_connect_job_params(), + params_->transport_params(), this, &net_log()); + } else if (params_->is_over_http()) { + nested_connect_job_ = std::make_unique( + priority(), socket_tag(), common_connect_job_params(), + params_->http_params(), this, &net_log()); + } else { + CHECK(false) << "Invalid nested connect job"; + } } else { DCHECK_EQ(scheme, ProxyServer::SCHEME_HTTPS); DCHECK(params_->is_over_ssl()); diff --git a/src/net/http/http_proxy_connect_job.h b/src/net/http/http_proxy_connect_job.h index c422cb81c9..546ba9b685 100644 --- a/src/net/http/http_proxy_connect_job.h +++ b/src/net/http/http_proxy_connect_job.h @@ -101,6 +101,13 @@ class NET_EXPORT_PRIVATE HttpProxySocketParams return quic_ssl_config_; } + bool is_over_http() const { + return nested_params_ && nested_params_->is_http_proxy(); + } + const scoped_refptr& http_params() const { + return nested_params_->http_proxy(); + } + const HostPortPair& endpoint() const { return endpoint_; } const ProxyChain& proxy_chain() const { return proxy_chain_; } const ProxyServer& proxy_server() const {