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

Side by Side Diff: components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc

Issue 2261103002: Use modified URLRequest::Read() and delegate methods in components/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@URLRequestRead
Patch Set: comments Created 4 years, 3 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 unified diff | Download patch
« no previous file with comments | « components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_netw ork_delegate.h" 5 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_netw ork_delegate.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 // If this ever triggers, then byte counts can no longer be safely stored in 120 // If this ever triggers, then byte counts can no longer be safely stored in
121 // 64-bit ints. 121 // 64-bit ints.
122 NOTREACHED(); 122 NOTREACHED();
123 return byte_count; 123 return byte_count;
124 } 124 }
125 return static_cast<int64_t>(scaled_byte_count); 125 return static_cast<int64_t>(scaled_byte_count);
126 } 126 }
127 127
128 // Calculates the effective original content length of the |request|, accounting 128 // Calculates the effective original content length of the |request|, accounting
129 // for partial responses if necessary. 129 // for partial responses if necessary.
130 int64_t CalculateEffectiveOCL(const net::URLRequest& request) { 130 int64_t CalculateEffectiveOCL(const net::URLRequest& request, int net_error) {
131 int64_t original_content_length_from_header = 131 int64_t original_content_length_from_header =
132 request.response_headers()->GetInt64HeaderValue( 132 request.response_headers()->GetInt64HeaderValue(
133 "x-original-content-length"); 133 "x-original-content-length");
134 134
135 if (original_content_length_from_header < 0) 135 if (original_content_length_from_header < 0)
136 return request.received_response_content_length(); 136 return request.received_response_content_length();
137 if (request.status().is_success()) 137 if (net_error == net::OK)
138 return original_content_length_from_header; 138 return original_content_length_from_header;
139 139
140 int64_t content_length_from_header = 140 int64_t content_length_from_header =
141 request.response_headers()->GetContentLength(); 141 request.response_headers()->GetContentLength();
142 142
143 if (content_length_from_header < 0) 143 if (content_length_from_header < 0)
144 return request.received_response_content_length(); 144 return request.received_response_content_length();
145 if (content_length_from_header == 0) 145 if (content_length_from_header == 0)
146 return original_content_length_from_header; 146 return original_content_length_from_header;
147 147
148 return ScaleByteCountByRatio(request.received_response_content_length(), 148 return ScaleByteCountByRatio(request.received_response_content_length(),
149 original_content_length_from_header, 149 original_content_length_from_header,
150 content_length_from_header); 150 content_length_from_header);
151 } 151 }
152 152
153 // Given a |request| that went through the Data Reduction Proxy, this function 153 // Given a |request| that went through the Data Reduction Proxy, this function
154 // estimates how many bytes would have been received if the response had been 154 // estimates how many bytes would have been received if the response had been
155 // received directly from the origin using HTTP/1.1 with a content length of 155 // received directly from the origin using HTTP/1.1 with a content length of
156 // |adjusted_original_content_length|. 156 // |adjusted_original_content_length|.
157 int64_t EstimateOriginalReceivedBytes(const net::URLRequest& request) { 157 int64_t EstimateOriginalReceivedBytes(const net::URLRequest& request,
158 int net_error) {
158 if (request.was_cached() || !request.response_headers()) 159 if (request.was_cached() || !request.response_headers())
159 return request.GetTotalReceivedBytes(); 160 return request.GetTotalReceivedBytes();
160 161
161 // TODO(sclittle): Remove headers added by Data Reduction Proxy when computing 162 // TODO(sclittle): Remove headers added by Data Reduction Proxy when computing
162 // original size. http://crbug/535701. 163 // original size. http://crbug/535701.
163 return request.response_headers()->raw_headers().size() + 164 return request.response_headers()->raw_headers().size() +
164 CalculateEffectiveOCL(request); 165 CalculateEffectiveOCL(request, net_error);
165 } 166 }
166 167
167 } // namespace 168 } // namespace
168 169
169 namespace data_reduction_proxy { 170 namespace data_reduction_proxy {
170 171
171 DataReductionProxyNetworkDelegate::DataReductionProxyNetworkDelegate( 172 DataReductionProxyNetworkDelegate::DataReductionProxyNetworkDelegate(
172 std::unique_ptr<net::NetworkDelegate> network_delegate, 173 std::unique_ptr<net::NetworkDelegate> network_delegate,
173 DataReductionProxyConfig* config, 174 DataReductionProxyConfig* config,
174 DataReductionProxyRequestOptions* request_options, 175 DataReductionProxyRequestOptions* request_options,
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 292
292 if (data_reduction_proxy_request_options_) { 293 if (data_reduction_proxy_request_options_) {
293 data_reduction_proxy_request_options_->AddRequestHeader(headers); 294 data_reduction_proxy_request_options_->AddRequestHeader(headers);
294 } 295 }
295 } 296 }
296 297
297 void DataReductionProxyNetworkDelegate::OnCompletedInternal( 298 void DataReductionProxyNetworkDelegate::OnCompletedInternal(
298 net::URLRequest* request, 299 net::URLRequest* request,
299 bool started) { 300 bool started) {
300 DCHECK(request); 301 DCHECK(request);
302 // TODO(maksims): remove this once OnCompletedInternal() has net_error in
303 // arguments.
304 int net_error = request->status().error();
305 DCHECK_NE(net::ERR_IO_PENDING, net_error);
301 if (data_reduction_proxy_bypass_stats_) 306 if (data_reduction_proxy_bypass_stats_)
302 data_reduction_proxy_bypass_stats_->OnUrlRequestCompleted(request, started); 307 data_reduction_proxy_bypass_stats_->OnUrlRequestCompleted(request, started,
308 net_error);
303 309
304 net::HttpRequestHeaders request_headers; 310 net::HttpRequestHeaders request_headers;
305 if (data_reduction_proxy_io_data_ && request->response_headers() && 311 if (data_reduction_proxy_io_data_ && request->response_headers() &&
306 request->response_headers()->HasHeaderValue( 312 request->response_headers()->HasHeaderValue(
307 chrome_proxy_header(), chrome_proxy_lo_fi_directive())) { 313 chrome_proxy_header(), chrome_proxy_lo_fi_directive())) {
308 data_reduction_proxy_io_data_->lofi_ui_service()->OnLoFiReponseReceived( 314 data_reduction_proxy_io_data_->lofi_ui_service()->OnLoFiReponseReceived(
309 *request, false); 315 *request, false);
310 } else if (data_reduction_proxy_io_data_ && request->response_headers() && 316 } else if (data_reduction_proxy_io_data_ && request->response_headers() &&
311 request->response_headers()->HasHeaderValue( 317 request->response_headers()->HasHeaderValue(
312 chrome_proxy_header(), 318 chrome_proxy_header(),
(...skipping 20 matching lines...) Expand all
333 DataReductionProxyRequestType request_type = GetDataReductionProxyRequestType( 339 DataReductionProxyRequestType request_type = GetDataReductionProxyRequestType(
334 *request, configurator_->GetProxyConfig(), *data_reduction_proxy_config_); 340 *request, configurator_->GetProxyConfig(), *data_reduction_proxy_config_);
335 341
336 // Determine the original content length if present. 342 // Determine the original content length if present.
337 int64_t original_content_length = 343 int64_t original_content_length =
338 request->response_headers() 344 request->response_headers()
339 ? request->response_headers()->GetInt64HeaderValue( 345 ? request->response_headers()->GetInt64HeaderValue(
340 "x-original-content-length") 346 "x-original-content-length")
341 : -1; 347 : -1;
342 348
343 CalculateAndRecordDataUsage(*request, request_type, original_content_length); 349 CalculateAndRecordDataUsage(*request, request_type, original_content_length,
350 net_error);
344 351
345 RecordContentLength(*request, request_type, original_content_length); 352 RecordContentLength(*request, request_type, original_content_length);
346 } 353 }
347 354
348 void DataReductionProxyNetworkDelegate::CalculateAndRecordDataUsage( 355 void DataReductionProxyNetworkDelegate::CalculateAndRecordDataUsage(
349 const net::URLRequest& request, 356 const net::URLRequest& request,
350 DataReductionProxyRequestType request_type, 357 DataReductionProxyRequestType request_type,
351 int64_t original_content_length) { 358 int64_t original_content_length,
359 int net_error) {
352 DCHECK_LE(-1, original_content_length); 360 DCHECK_LE(-1, original_content_length);
353 int64_t data_used = request.GetTotalReceivedBytes(); 361 int64_t data_used = request.GetTotalReceivedBytes();
354 362
355 // Estimate how many bytes would have been used if the DataReductionProxy was 363 // Estimate how many bytes would have been used if the DataReductionProxy was
356 // not used, and record the data usage. 364 // not used, and record the data usage.
357 int64_t original_size = data_used; 365 int64_t original_size = data_used;
358 366
359 if (request_type == VIA_DATA_REDUCTION_PROXY) 367 if (request_type == VIA_DATA_REDUCTION_PROXY)
360 original_size = EstimateOriginalReceivedBytes(request); 368 original_size = EstimateOriginalReceivedBytes(request, net_error);
361 369
362 std::string mime_type; 370 std::string mime_type;
363 if (request.response_headers()) 371 if (request.response_headers())
364 request.response_headers()->GetMimeType(&mime_type); 372 request.response_headers()->GetMimeType(&mime_type);
365 373
366 scoped_refptr<DataUseGroup> data_use_group = 374 scoped_refptr<DataUseGroup> data_use_group =
367 data_use_group_provider_ 375 data_use_group_provider_
368 ? data_use_group_provider_->GetDataUseGroup(&request) 376 ? data_use_group_provider_->GetDataUseGroup(&request)
369 : nullptr; 377 : nullptr;
370 AccumulateDataUsage(data_used, original_size, request_type, data_use_group, 378 AccumulateDataUsage(data_used, original_size, request_type, data_use_group,
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 request.url(), 453 request.url(),
446 &data_reduction_proxy_info); 454 &data_reduction_proxy_info);
447 } 455 }
448 456
449 void DataReductionProxyNetworkDelegate::SetDataUseGroupProvider( 457 void DataReductionProxyNetworkDelegate::SetDataUseGroupProvider(
450 std::unique_ptr<DataUseGroupProvider> data_use_group_provider) { 458 std::unique_ptr<DataUseGroupProvider> data_use_group_provider) {
451 data_use_group_provider_.reset(data_use_group_provider.release()); 459 data_use_group_provider_.reset(data_use_group_provider.release());
452 } 460 }
453 461
454 } // namespace data_reduction_proxy 462 } // namespace data_reduction_proxy
OLDNEW
« no previous file with comments | « components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698