From 80d7fe42c179602150c274ab43f4c916f82487f6 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 fb4dc71663..60611d2e32 100644 --- a/src/net/base/proxy_chain.cc +++ b/src/net/base/proxy_chain.cc @@ -192,7 +192,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 88f2d2c4f4..12e32bc15c 100644 --- a/src/net/http/http_proxy_connect_job.cc +++ b/src/net/http/http_proxy_connect_job.cc @@ -488,9 +488,17 @@ int HttpProxyConnectJob::DoBeginConnect() { int HttpProxyConnectJob::DoTransportConnect() { ProxyServer::Scheme scheme = GetProxyServerScheme(); if (scheme == ProxyServer::SCHEME_HTTP) { - nested_connect_job_ = std::make_unique( - priority(), socket_tag(), common_connect_job_params(), - params_->transport_params(), this, &net_log()); + if (params_->is_over_transport()) { + nested_connect_job_ = std::make_unique( + 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 2a5be52a0a..2827fa618e 100644 --- a/src/net/http/http_proxy_connect_job.h +++ b/src/net/http/http_proxy_connect_job.h @@ -100,6 +100,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 {