diff options
Diffstat (limited to 'net/url_request/url_request_http_job.cc')
-rw-r--r-- | net/url_request/url_request_http_job.cc | 102 |
1 files changed, 56 insertions, 46 deletions
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc index 4872792..c63aa0e 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc @@ -398,56 +398,66 @@ void URLRequestHttpJob::StartTransaction() { } 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); - - // 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 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. + // 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; + } } } - } - // 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; + } } } |