net: Allow http proxies in proxy chains

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

View File

@@ -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;

View File

@@ -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<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

@@ -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<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 {