| Index: net/filter/filter_source_stream.cc
|
| diff --git a/net/filter/filter_source_stream.cc b/net/filter/filter_source_stream.cc
|
| index 39cf9c1a978c0335843b13ada9a03e8f4214cb00..43bd67d424c72dc3824ca9e74ea6a8c27309c22d 100644
|
| --- a/net/filter/filter_source_stream.cc
|
| +++ b/net/filter/filter_source_stream.cc
|
| @@ -126,9 +126,15 @@ int FilterSourceStream::DoFilterData() {
|
| DCHECK(output_buffer_);
|
| DCHECK(drainable_input_buffer_);
|
|
|
| - int bytes_output =
|
| - FilterData(output_buffer_.get(), output_buffer_size_,
|
| - drainable_input_buffer_.get(), upstream_end_reached_);
|
| + int consumed_bytes = 0;
|
| + int bytes_output = FilterData(output_buffer_.get(), output_buffer_size_,
|
| + drainable_input_buffer_.get(),
|
| + drainable_input_buffer_->BytesRemaining(),
|
| + &consumed_bytes, upstream_end_reached_);
|
| + DCHECK_LE(consumed_bytes, drainable_input_buffer_->BytesRemaining());
|
| + DCHECK(bytes_output != 0 ||
|
| + consumed_bytes == drainable_input_buffer_->BytesRemaining());
|
| +
|
| if (bytes_output == ERR_CONTENT_DECODING_FAILED) {
|
| UMA_HISTOGRAM_ENUMERATION("Net.ContentDecodingFailed.FilterType", type(),
|
| TYPE_MAX);
|
| @@ -136,6 +142,9 @@ int FilterSourceStream::DoFilterData() {
|
| // FilterData() is not allowed to return ERR_IO_PENDING.
|
| DCHECK_NE(ERR_IO_PENDING, bytes_output);
|
|
|
| + if (consumed_bytes > 0)
|
| + drainable_input_buffer_->DidConsume(consumed_bytes);
|
| +
|
| // Received data or encountered an error.
|
| if (bytes_output != 0)
|
| return bytes_output;
|
|
|