Chromium Code Reviews| Index: net/url_request/url_request_http_job.cc |
| =================================================================== |
| --- net/url_request/url_request_http_job.cc (revision 88659) |
| +++ net/url_request/url_request_http_job.cc (working copy) |
| @@ -398,56 +398,69 @@ |
| } |
| 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 provided. |
| + // It should be provided IF the content is known to have restrictions on |
| + // potential encoding, such as streaming multi-media. |
| + // For details see bug 47381 -- customer misconfigured server so it would |
|
rvargas (doing something else)
2011/06/16 01:39:40
Nit: I would just mention the bug number and leave
|
| + // compress multimedia content, and it was extremely hard to figure out |
| + // why Chrome doesn't display the mopvie, because Safari 4 and Firefox 3.x |
| + // displayed it perfectly. |
| + // TODO(jar, enal): jpeg files etc. should set up a request header if |
| + // possible. Right now it is done only by buffered_resource_loader and |
| + // simple_data_source. |
| + if (!request_info_.extra_headers.HasHeader( |
| + HttpRequestHeaders::kAcceptEncoding)) { |
| + 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; |
| + } |
| } |
| } |