Index: content/browser/loader/async_resource_handler.cc |
diff --git a/content/browser/loader/async_resource_handler.cc b/content/browser/loader/async_resource_handler.cc |
index 321b0de619bf68d689a4476e6487286ff235210e..6908304be1e4a03d52227fd6c12c7058f2ab9eb6 100644 |
--- a/content/browser/loader/async_resource_handler.cc |
+++ b/content/browser/loader/async_resource_handler.cc |
@@ -72,6 +72,14 @@ void InitializeResourceBufferConstants() { |
GetNumericArg("resource-buffer-max-allocation-size", &kMaxAllocationSize); |
} |
+// Returns the value of new_length - *cached_length, also updating |
+// *cached_length to new_length. |
Mike West
2016/06/24 10:49:20
"length" is a weird-looking word. Especially when
Adam Rice
2016/07/07 06:50:09
You could try filing a bug against the English lan
|
+int CalculateLengthDifference(int64_t new_length, int64_t* cached_length) { |
+ int length_difference = new_length - *cached_length; |
+ *cached_length = new_length; |
+ return length_difference; |
+} |
+ |
} // namespace |
// Used when kOptimizeLoadingIPCForSmallResources is enabled. |
@@ -117,6 +125,7 @@ class AsyncResourceHandler::InliningHelper { |
// Returns true if the received data is sent to the consumer. |
bool SendInlinedDataIfApplicable(int bytes_read, |
int encoded_data_length, |
+ int encoded_body_length, |
IPC::Sender* sender, |
int request_id) { |
DCHECK(sender); |
@@ -129,7 +138,7 @@ class AsyncResourceHandler::InliningHelper { |
leading_chunk_buffer_ = nullptr; |
sender->Send(new ResourceMsg_InlinedDataChunkReceived( |
- request_id, data, encoded_data_length)); |
+ request_id, data, encoded_data_length, encoded_body_length)); |
return true; |
} |
@@ -206,7 +215,8 @@ AsyncResourceHandler::AsyncResourceHandler( |
inlining_helper_(new InliningHelper), |
last_upload_position_(0), |
waiting_for_upload_progress_ack_(false), |
- reported_transfer_size_(0) { |
+ reported_transfer_size_(0), |
+ reported_encoded_body_length_(0) { |
InitializeResourceBufferConstants(); |
} |
@@ -440,10 +450,12 @@ bool AsyncResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { |
return false; |
int encoded_data_length = CalculateEncodedDataLengthToReport(); |
+ int encoded_body_length = CalculateEncodedBodyLengthToReport(); |
// Return early if InliningHelper handled the received data. |
if (inlining_helper_->SendInlinedDataIfApplicable( |
- bytes_read, encoded_data_length, filter, GetRequestID())) |
+ bytes_read, encoded_data_length, encoded_body_length, filter, |
+ GetRequestID())) |
return true; |
buffer_->ShrinkLastAllocation(bytes_read); |
@@ -461,8 +473,9 @@ bool AsyncResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { |
int data_offset = buffer_->GetLastAllocationOffset(); |
- filter->Send(new ResourceMsg_DataReceived( |
- GetRequestID(), data_offset, bytes_read, encoded_data_length)); |
+ filter->Send(new ResourceMsg_DataReceived(GetRequestID(), data_offset, |
+ bytes_read, encoded_data_length, |
+ encoded_body_length)); |
++pending_data_count_; |
if (!buffer_->CanAllocate()) { |
@@ -576,10 +589,13 @@ bool AsyncResourceHandler::CheckForSufficientResource() { |
} |
int AsyncResourceHandler::CalculateEncodedDataLengthToReport() { |
- int64_t current_transfer_size = request()->GetTotalReceivedBytes(); |
- int encoded_data_length = current_transfer_size - reported_transfer_size_; |
- reported_transfer_size_ = current_transfer_size; |
- return encoded_data_length; |
+ return CalculateLengthDifference(request()->GetTotalReceivedBytes(), |
+ &reported_transfer_size_); |
+} |
+ |
+int AsyncResourceHandler::CalculateEncodedBodyLengthToReport() { |
+ return CalculateLengthDifference(request()->GetRawBodyBytes(), |
+ &reported_encoded_body_length_); |
} |
void AsyncResourceHandler::RecordHistogram() { |