Chromium Code Reviews| Index: net/url_request/url_request_http_job.cc |
| =================================================================== |
| --- net/url_request/url_request_http_job.cc (revision 88518) |
| +++ net/url_request/url_request_http_job.cc (working copy) |
| @@ -398,56 +398,62 @@ |
| } |
| void URLRequestHttpJob::AddExtraHeaders() { |
| - // TODO(jar): Consider optimizing away SDCH advertising bytes when the URL is |
| - // probably an img or such (and SDCH encoding is not likely). |
| - bool advertise_sdch = SdchManager::Global() && |
| - SdchManager::Global()->IsInSupportedDomain(request_->url()); |
| - std::string avail_dictionaries; |
| - if (advertise_sdch) { |
| - SdchManager::Global()->GetAvailDictionaryList(request_->url(), |
| - &avail_dictionaries); |
| + // Supply Accept-Encoding field only if it is not already supplied. |
| + if (!request_info_.extra_headers.HasHeader( |
| + HttpRequestHeaders::kAcceptEncoding)) { |
| + // TODO(jar): Consider optimizing away SDCH advertising bytes when the URL |
| + // is probably an img or such (and SDCH encoding is not likely). |
|
jar (doing other things)
2011/06/09 21:24:37
Do you think this Todo() is satisfied? Perhaps it
enal
2011/06/09 21:55:03
Done.
|
| + bool advertise_sdch = SdchManager::Global() && |
| + SdchManager::Global()->IsInSupportedDomain(request_->url()); |
| + std::string avail_dictionaries; |
| + if (advertise_sdch) { |
| + SdchManager::Global()->GetAvailDictionaryList(request_->url(), |
| + &avail_dictionaries); |
| - // The AllowLatencyExperiment() is only true if we've successfully done a |
| - // full SDCH compression recently in this browser session for this host. |
| - // Note that for this path, there might be no applicable dictionaries, and |
| - // hence we can't participate in the experiment. |
| - if (!avail_dictionaries.empty() && |
| - SdchManager::Global()->AllowLatencyExperiment(request_->url())) { |
| - // We are participating in the test (or control), and hence we'll |
| - // eventually record statistics via either SDCH_EXPERIMENT_DECODE or |
| - // SDCH_EXPERIMENT_HOLDBACK, and we'll need some packet timing data. |
| - packet_timing_enabled_ = true; |
| - if (base::RandDouble() < .01) { |
| - sdch_test_control_ = true; // 1% probability. |
| - advertise_sdch = false; |
| - } else { |
| - sdch_test_activated_ = true; |
| + // The AllowLatencyExperiment() is only true if we've successfully done a |
| + // full SDCH compression recently in this browser session for this host. |
| + // Note that for this path, there might be no applicable dictionaries, |
| + // and hence we can't participate in the experiment. |
| + if (!avail_dictionaries.empty() && |
| + SdchManager::Global()->AllowLatencyExperiment(request_->url())) { |
| + // We are participating in the test (or control), and hence we'll |
| + // eventually record statistics via either SDCH_EXPERIMENT_DECODE or |
| + // SDCH_EXPERIMENT_HOLDBACK, and we'll need some packet timing data. |
| + packet_timing_enabled_ = true; |
| + if (base::RandDouble() < .01) { |
| + sdch_test_control_ = true; // 1% probability. |
| + advertise_sdch = false; |
| + } else { |
| + sdch_test_activated_ = true; |
| + } |
| } |
| } |
| - } |
| - // 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. |
| - request_info_.extra_headers.SetHeader( |
| - HttpRequestHeaders::kAcceptEncoding, "gzip,deflate,sdch"); |
| - if (!avail_dictionaries.empty()) { |
| + // 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( |
| - kAvailDictionaryHeader, |
| - avail_dictionaries); |
| - sdch_dictionary_advertised_ = true; |
| - // 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; |
| + HttpRequestHeaders::kAcceptEncoding, "gzip,deflate"); |
| + } else { |
| + // Include SDCH in acceptable list. |
| + request_info_.extra_headers.SetHeader( |
| + HttpRequestHeaders::kAcceptEncoding, "gzip,deflate,sdch"); |
| + if (!avail_dictionaries.empty()) { |
| + request_info_.extra_headers.SetHeader( |
| + kAvailDictionaryHeader, |
| + avail_dictionaries); |
| + sdch_dictionary_advertised_ = true; |
| + // 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; |
| + } |
| } |
| } |