| Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
|
| diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
|
| index a6fa327ebc7a8fa126a65d6f6b510fd9283df16d..f289b43b26ed05937054f71be8af93c1c4982f09 100644
|
| --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
|
| +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
|
| @@ -127,14 +127,14 @@ int64_t ScaleByteCountByRatio(int64_t byte_count,
|
|
|
| // Calculates the effective original content length of the |request|, accounting
|
| // for partial responses if necessary.
|
| -int64_t CalculateEffectiveOCL(const net::URLRequest& request) {
|
| +int64_t CalculateEffectiveOCL(const net::URLRequest& request, int net_error) {
|
| int64_t original_content_length_from_header =
|
| request.response_headers()->GetInt64HeaderValue(
|
| "x-original-content-length");
|
|
|
| if (original_content_length_from_header < 0)
|
| return request.received_response_content_length();
|
| - if (request.status().is_success())
|
| + if (net_error == net::OK)
|
| return original_content_length_from_header;
|
|
|
| int64_t content_length_from_header =
|
| @@ -154,14 +154,15 @@ int64_t CalculateEffectiveOCL(const net::URLRequest& request) {
|
| // estimates how many bytes would have been received if the response had been
|
| // received directly from the origin using HTTP/1.1 with a content length of
|
| // |adjusted_original_content_length|.
|
| -int64_t EstimateOriginalReceivedBytes(const net::URLRequest& request) {
|
| +int64_t EstimateOriginalReceivedBytes(const net::URLRequest& request,
|
| + int net_error) {
|
| if (request.was_cached() || !request.response_headers())
|
| return request.GetTotalReceivedBytes();
|
|
|
| // TODO(sclittle): Remove headers added by Data Reduction Proxy when computing
|
| // original size. http://crbug/535701.
|
| return request.response_headers()->raw_headers().size() +
|
| - CalculateEffectiveOCL(request);
|
| + CalculateEffectiveOCL(request, net_error);
|
| }
|
|
|
| } // namespace
|
| @@ -298,8 +299,13 @@ void DataReductionProxyNetworkDelegate::OnCompletedInternal(
|
| net::URLRequest* request,
|
| bool started) {
|
| DCHECK(request);
|
| + // TODO(maksims): remove this once OnCompletedInternal() has net_error in
|
| + // arguments.
|
| + int net_error = request->status().error();
|
| + DCHECK_NE(net::ERR_IO_PENDING, net_error);
|
| if (data_reduction_proxy_bypass_stats_)
|
| - data_reduction_proxy_bypass_stats_->OnUrlRequestCompleted(request, started);
|
| + data_reduction_proxy_bypass_stats_->OnUrlRequestCompleted(request, started,
|
| + net_error);
|
|
|
| net::HttpRequestHeaders request_headers;
|
| if (data_reduction_proxy_io_data_ && request->response_headers() &&
|
| @@ -340,7 +346,8 @@ void DataReductionProxyNetworkDelegate::OnCompletedInternal(
|
| "x-original-content-length")
|
| : -1;
|
|
|
| - CalculateAndRecordDataUsage(*request, request_type, original_content_length);
|
| + CalculateAndRecordDataUsage(*request, request_type, original_content_length,
|
| + net_error);
|
|
|
| RecordContentLength(*request, request_type, original_content_length);
|
| }
|
| @@ -348,7 +355,8 @@ void DataReductionProxyNetworkDelegate::OnCompletedInternal(
|
| void DataReductionProxyNetworkDelegate::CalculateAndRecordDataUsage(
|
| const net::URLRequest& request,
|
| DataReductionProxyRequestType request_type,
|
| - int64_t original_content_length) {
|
| + int64_t original_content_length,
|
| + int net_error) {
|
| DCHECK_LE(-1, original_content_length);
|
| int64_t data_used = request.GetTotalReceivedBytes();
|
|
|
| @@ -357,7 +365,7 @@ void DataReductionProxyNetworkDelegate::CalculateAndRecordDataUsage(
|
| int64_t original_size = data_used;
|
|
|
| if (request_type == VIA_DATA_REDUCTION_PROXY)
|
| - original_size = EstimateOriginalReceivedBytes(request);
|
| + original_size = EstimateOriginalReceivedBytes(request, net_error);
|
|
|
| std::string mime_type;
|
| if (request.response_headers())
|
|
|