net: Allow http proxies in proxy chains

This commit is contained in:
klzgrad 2024-07-22 00:21:45 +08:00
parent bd79f7b3f9
commit 327f6995ca
3 changed files with 19 additions and 4 deletions

View File

@ -178,7 +178,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;

View File

@ -487,9 +487,17 @@ int HttpProxyConnectJob::DoBeginConnect() {
int HttpProxyConnectJob::DoTransportConnect() {
ProxyServer::Scheme scheme = GetProxyServerScheme();
if (scheme == ProxyServer::SCHEME_HTTP) {
nested_connect_job_ = std::make_unique<TransportConnectJob>(
priority(), socket_tag(), common_connect_job_params(),
params_->transport_params(), this, &net_log());
if (params_->is_over_transport()) {
nested_connect_job_ = std::make_unique<TransportConnectJob>(
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<HttpProxyConnectJob>(
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());

View File

@ -99,6 +99,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<HttpProxySocketParams>& 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 {