| 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 d22cff78035be33dcce419f1e85aaa501b786744..1d0fbf5f3231f88183d9004d77b731e4627f192c 100644
|
| --- a/net/url_request/url_request_http_job.cc
|
| +++ b/net/url_request/url_request_http_job.cc
|
| @@ -319,7 +319,28 @@ void URLRequestHttpJob::NotifyHeadersComplete() {
|
| URLRequestJob::NotifyHeadersComplete();
|
| }
|
|
|
| -void URLRequestHttpJob::NotifyDone(const URLRequestStatus& status) {
|
| +void URLRequestHttpJob::NotifyDone(const URLRequestStatus& original_status) {
|
| + URLRequestStatus status(original_status);
|
| + // Some servers send the body compressed, but specify the content length as
|
| + // the uncompressed size. Although this violates the HTTP spec we want to
|
| + // support it (as IE and FireFox do), but *only* for an exact match.
|
| + // See http://crbug.com/79694.
|
| + if (status.os_error() == net::ERR_CONNECTION_CLOSED) {
|
| + if (request_ && request_->response_headers()) {
|
| + int64 expected_length = request_->response_headers()->GetContentLength();
|
| + VLOG(1) << __FUNCTION__ << "() "
|
| + << "\"" << request_->url().spec() << "\""
|
| + << " content-length = " << expected_length
|
| + << " pre total = " << prefilter_bytes_read()
|
| + << " post total = " << postfilter_bytes_read();
|
| + if (postfilter_bytes_read() == expected_length) {
|
| + // Clear the error.
|
| + status.set_status(URLRequestStatus::SUCCESS);
|
| + status.set_os_error(0);
|
| + }
|
| + }
|
| + }
|
| +
|
| RecordCompressionHistograms();
|
| URLRequestJob::NotifyDone(status);
|
| }
|
|
|