Index: net/url_request/url_request_http_job.cc |
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc |
index 6565a8dcb8608e759f08b56c6a0b0c033b7e81cc..47a0666e3fc7ad50225110e7f394da8adf08c83c 100644 |
--- a/net/url_request/url_request_http_job.cc |
+++ b/net/url_request/url_request_http_job.cc |
@@ -603,30 +603,37 @@ void URLRequestHttpJob::AddExtraHeaders() { |
} |
} |
+ // Advertise "br" encoding only if transferred data is opaque to proxy. |
+ bool advertise_brotli = false; |
+ const HttpNetworkSession::Params* network_session_params = |
+ request()->context()->GetNetworkSessionParams(); |
+ if (network_session_params && network_session_params->enable_brotli) |
+ advertise_brotli = request()->url().SchemeIsCryptographic(); |
+ |
// Supply Accept-Encoding headers first so that it is more likely that they |
// will be in the first transmitted packet. This can sometimes make it |
// easier to filter and analyze the streams to assure that a proxy has not |
// damaged these headers. Some proxies deliberately corrupt Accept-Encoding |
// headers. |
- if (!advertise_sdch) { |
- // Tell the server what compression formats we support (other than SDCH). |
- request_info_.extra_headers.SetHeader( |
- HttpRequestHeaders::kAcceptEncoding, "gzip, deflate"); |
- } else { |
- // Include SDCH in acceptable list. |
+ std::string advertised_encodings = "gzip, deflate"; |
+ if (advertise_sdch) |
+ advertised_encodings += ", sdch"; |
+ if (advertise_brotli) |
+ advertised_encodings += ", br"; |
+ // Tell the server what compression formats are supported. |
+ request_info_.extra_headers.SetHeader(HttpRequestHeaders::kAcceptEncoding, |
+ advertised_encodings); |
+ |
+ if (dictionaries_advertised_) { |
request_info_.extra_headers.SetHeader( |
- HttpRequestHeaders::kAcceptEncoding, "gzip, deflate, sdch"); |
- if (dictionaries_advertised_) { |
- request_info_.extra_headers.SetHeader( |
- kAvailDictionaryHeader, |
- dictionaries_advertised_->GetDictionaryClientHashList()); |
- // Since we're tagging this transaction as advertising a dictionary, |
- // we'll definitely employ an SDCH filter (or tentative sdch filter) |
- // when we get a response. When done, we'll record histograms via |
- // SDCH_DECODE or SDCH_PASSTHROUGH. Hence we need to record packet |
- // arrival times. |
- packet_timing_enabled_ = true; |
- } |
+ kAvailDictionaryHeader, |
+ dictionaries_advertised_->GetDictionaryClientHashList()); |
+ // Since we're tagging this transaction as advertising a dictionary, |
+ // we'll definitely employ an SDCH filter (or tentative sdch filter) |
+ // when we get a response. When done, we'll record histograms via |
+ // SDCH_DECODE or SDCH_PASSTHROUGH. Hence we need to record packet |
+ // arrival times. |
+ packet_timing_enabled_ = true; |
} |
} |