Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(379)

Unified Diff: net/url_request/url_request_http_job.cc

Issue 6909033: Allow server to indicate a non-SDCH encoding (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/url_request/url_request_http_job.cc
===================================================================
--- net/url_request/url_request_http_job.cc (revision 83675)
+++ net/url_request/url_request_http_job.cc (working copy)
@@ -106,6 +106,10 @@
virtual int GetResponseCode() const;
virtual void RecordPacketStats(StatisticSelector statistic) const;
+ // Method to allow us to reset filter context for a response that should have
+ // been SDCH encoded when there is an update due to an explicit HTTP header.
+ void ResetSdchResponseToFalse();
+
private:
URLRequestHttpJob* job_;
@@ -144,6 +148,11 @@
return (job_->request_info_.load_flags & LOAD_IS_DOWNLOAD) != 0;
}
+void URLRequestHttpJob::HttpFilterContext::ResetSdchResponseToFalse() {
+ DCHECK(job_->sdch_dictionary_advertised_);
+ job_->sdch_dictionary_advertised_ = false;
+}
+
bool URLRequestHttpJob::HttpFilterContext::IsSdchResponse() const {
return job_->sdch_dictionary_advertised_;
}
@@ -387,7 +396,7 @@
avail_dictionaries);
sdch_dictionary_advertised_ = true;
// Since we're tagging this transaction as advertising a dictionary, we'll
- // definately employ an SDCH filter (or tentative sdch filter) when we get
+ // 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;
@@ -866,6 +875,23 @@
encoding_types.push_back(Filter::ConvertEncodingToType(encoding_type));
}
+ if (filter_context_->IsSdchResponse()) {
+ // We are wary of proxies that discard or damage SDCH encoding. If a server
+ // explicitly states that this is not SDCH content, then we can correct our
+ // assumption that this is an SDCH response, and avoid the need to recover
+ // as though the content is corrupted (when we discover it is not SDCH
+ // encoded).
+ std::string sdch_response_status;
+ iter = NULL;
+ while (response_info_->headers->EnumerateHeader(&iter, "X-Sdch-Encode",
+ &sdch_response_status)) {
+ if (sdch_response_status == "0") {
+ filter_context_->ResetSdchResponseToFalse();
+ break;
+ }
+ }
+ }
+
// Even if encoding types are empty, there is a chance that we need to add
// some decoding, as some proxies strip encoding completely. In such cases,
// we may need to add (for example) SDCH filtering (when the context suggests
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698