| Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
|
| diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
|
| index f232e945e03ec905fc9263f217c6114737cf8c69..3e79f4a6a98b8f89b3cf574a21d12b2d73c861a1 100644
|
| --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
|
| +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
|
| @@ -19,6 +19,7 @@
|
| #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_request_options.h"
|
| #include "components/data_reduction_proxy/core/browser/data_use_group.h"
|
| #include "components/data_reduction_proxy/core/browser/data_use_group_provider.h"
|
| +#include "components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h"
|
| #include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
|
| #include "components/data_reduction_proxy/core/common/data_reduction_proxy_util.h"
|
| #include "components/data_reduction_proxy/core/common/lofi_decider.h"
|
| @@ -26,6 +27,7 @@
|
| #include "net/base/mime_util.h"
|
| #include "net/http/http_request_headers.h"
|
| #include "net/http/http_response_headers.h"
|
| +#include "net/nqe/effective_connection_type.h"
|
| #include "net/nqe/network_quality_estimator.h"
|
| #include "net/proxy/proxy_info.h"
|
| #include "net/proxy/proxy_server.h"
|
| @@ -136,9 +138,11 @@ void VerifyHttpRequestHeaders(bool via_chrome_proxy,
|
| const net::HttpRequestHeaders& headers) {
|
| if (via_chrome_proxy) {
|
| DCHECK(headers.HasHeader(chrome_proxy_header()));
|
| + DCHECK(headers.HasHeader(chrome_proxy_ect_header()));
|
| } else {
|
| DCHECK(!headers.HasHeader(chrome_proxy_header()));
|
| DCHECK(!headers.HasHeader(chrome_proxy_accept_transform_header()));
|
| + DCHECK(!headers.HasHeader(chrome_proxy_ect_header()));
|
| }
|
| }
|
|
|
| @@ -223,6 +227,8 @@ void DataReductionProxyNetworkDelegate::OnBeforeStartTransactionInternal(
|
| ->MaybeSetAcceptTransformHeader(
|
| *request, data_reduction_proxy_config_->lofi_off(), headers);
|
| }
|
| +
|
| + MaybeAddChromeProxyECTHeader(headers, *request);
|
| }
|
|
|
| void DataReductionProxyNetworkDelegate::OnBeforeSendHeadersInternal(
|
| @@ -281,6 +287,7 @@ void DataReductionProxyNetworkDelegate::OnBeforeSendHeadersInternal(
|
| // Chrome-Proxy-Accept-Transform header.
|
| lofi_decider->RemoveAcceptTransformHeader(headers);
|
| }
|
| + RemoveChromeProxyECTHeader(headers);
|
| VerifyHttpRequestHeaders(false, *headers);
|
| return;
|
| }
|
| @@ -574,4 +581,48 @@ void DataReductionProxyNetworkDelegate::MaybeAddBrotliToAcceptEncodingHeader(
|
| header_value);
|
| }
|
|
|
| +void DataReductionProxyNetworkDelegate::MaybeAddChromeProxyECTHeader(
|
| + net::HttpRequestHeaders* request_headers,
|
| + const net::URLRequest& request) const {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| +
|
| + // This method should be called only when the resolved proxy was a data
|
| + // saver proxy.
|
| + DCHECK(request.url().is_valid());
|
| + DCHECK(!request.url().SchemeIsCryptographic());
|
| + DCHECK(request.url().SchemeIsHTTPOrHTTPS());
|
| +
|
| + if (request_headers->HasHeader(chrome_proxy_ect_header()))
|
| + request_headers->RemoveHeader(chrome_proxy_ect_header());
|
| +
|
| + if (request.context()->network_quality_estimator()) {
|
| + net::EffectiveConnectionType type = request.context()
|
| + ->network_quality_estimator()
|
| + ->GetEffectiveConnectionType();
|
| + if (type > net::EFFECTIVE_CONNECTION_TYPE_OFFLINE) {
|
| + DCHECK_NE(net::EFFECTIVE_CONNECTION_TYPE_LAST, type);
|
| + request_headers->SetHeader(chrome_proxy_ect_header(),
|
| + net::GetNameForEffectiveConnectionType(type));
|
| + return;
|
| + }
|
| + }
|
| + request_headers->SetHeader(chrome_proxy_ect_header(),
|
| + net::GetNameForEffectiveConnectionType(
|
| + net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN));
|
| +
|
| + static_assert(net::EFFECTIVE_CONNECTION_TYPE_OFFLINE + 1 ==
|
| + net::EFFECTIVE_CONNECTION_TYPE_SLOW_2G,
|
| + "ECT enum value is not handled.");
|
| + static_assert(net::EFFECTIVE_CONNECTION_TYPE_4G + 1 ==
|
| + net::EFFECTIVE_CONNECTION_TYPE_LAST,
|
| + "ECT enum value is not handled.");
|
| +}
|
| +
|
| +void DataReductionProxyNetworkDelegate::RemoveChromeProxyECTHeader(
|
| + net::HttpRequestHeaders* request_headers) const {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| +
|
| + request_headers->RemoveHeader(chrome_proxy_ect_header());
|
| +}
|
| +
|
| } // namespace data_reduction_proxy
|
|
|