Index: net/url_request/url_request_job.cc |
diff --git a/net/url_request/url_request_job.cc b/net/url_request/url_request_job.cc |
index 3073414d421426aa7e3b086300840e6069007db1..c87e7615157107c19fbd91e28e626c759f96b849 100644 |
--- a/net/url_request/url_request_job.cc |
+++ b/net/url_request/url_request_job.cc |
@@ -306,12 +306,14 @@ void URLRequestJob::NotifyReadComplete(int bytes_read) { |
return; |
// When notifying the delegate, the delegate can release the request |
- // (and thus release 'this'). After calling to the delgate, we must |
+ // (and thus release 'this'). After calling to the delegate, we must |
// check the request pointer to see if it still exists, and return |
// immediately if it has been destroyed. self_preservation ensures our |
// survival until we can get out of this method. |
scoped_refptr<URLRequestJob> self_preservation(this); |
+ // If we get here, |prefilter_bytes_read_| was not updated in |
+ // |ReadRawDataHelper()|. |
prefilter_bytes_read_ += bytes_read; |
if (filter_.get()) { |
// Tell the filter that it has more data |
@@ -320,13 +322,19 @@ void URLRequestJob::NotifyReadComplete(int bytes_read) { |
// Filter the data. |
int filter_bytes_read = 0; |
if (ReadFilteredData(&filter_bytes_read)) { |
- postfilter_bytes_read_ += filter_bytes_read; |
request_->delegate()->OnReadCompleted(request_, filter_bytes_read); |
} |
} else { |
+ // If we get here, |postfilter_bytes_read_| was not updated in |
+ // |ReadRawDataHelper()|. |
postfilter_bytes_read_ += bytes_read; |
request_->delegate()->OnReadCompleted(request_, bytes_read); |
} |
+ VLOG(21) << __FUNCTION__ << "() " |
+ << "\"" << (request_ ? request_->url().spec() : "???") << "\"" |
+ << " pre bytes read = " << bytes_read |
+ << " pre total = " << prefilter_bytes_read_ |
+ << " post total = " << postfilter_bytes_read_; |
} |
void URLRequestJob::NotifyStartError(const URLRequestStatus &status) { |
@@ -468,6 +476,7 @@ bool URLRequestJob::ReadFilteredData(int* bytes_read) { |
case Filter::FILTER_DONE: { |
filter_needs_more_output_space_ = false; |
*bytes_read = filtered_data_len; |
+ postfilter_bytes_read_ += filtered_data_len; |
rv = true; |
break; |
} |
@@ -482,6 +491,7 @@ bool URLRequestJob::ReadFilteredData(int* bytes_read) { |
// We can revisit this issue if there is a real perf need. |
if (filtered_data_len > 0) { |
*bytes_read = filtered_data_len; |
+ postfilter_bytes_read_ += filtered_data_len; |
rv = true; |
} else { |
// Read again since we haven't received enough data yet (e.g., we may |
@@ -494,6 +504,7 @@ bool URLRequestJob::ReadFilteredData(int* bytes_read) { |
filter_needs_more_output_space_ = |
(filtered_data_len == output_buffer_size); |
*bytes_read = filtered_data_len; |
+ postfilter_bytes_read_ += filtered_data_len; |
rv = true; |
break; |
} |
@@ -511,6 +522,13 @@ bool URLRequestJob::ReadFilteredData(int* bytes_read) { |
break; |
} |
} |
+ VLOG(21) << __FUNCTION__ << "() " |
+ << "\"" << (request_ ? request_->url().spec() : "???") << "\"" |
+ << " rv = " << rv |
+ << " post bytes read = " << filtered_data_len |
+ << " pre total = " << prefilter_bytes_read_ |
+ << " post total = " |
+ << postfilter_bytes_read_; |
} else { |
// we are done, or there is no data left. |
rv = true; |
@@ -568,6 +586,24 @@ bool URLRequestJob::ReadRawDataHelper(IOBuffer* buf, int buf_size, |
raw_read_buffer_ = buf; |
bool rv = ReadRawData(buf, buf_size, bytes_read); |
+ // If |*bytes_read == 0|, that means we have data pending, so we will need to |
+ // update |prefilter_bytes_read_| in |NotifyReadComplete()|. |
+ if (*bytes_read > 0) { |
rvargas (doing something else)
2011/05/19 19:30:36
You cannot evaluate bytes_read without first looki
ahendrickson
2011/05/19 22:29:34
Done.
|
+ prefilter_bytes_read_ += *bytes_read; |
+ if (!filter_.get()) |
+ postfilter_bytes_read_ += *bytes_read; |
+ VLOG(21) << __FUNCTION__ << "() " |
+ << "\"" << (request_ ? request_->url().spec() : "???") << "\"" |
+ << " pre bytes read = " << *bytes_read |
+ << " pre total = " << prefilter_bytes_read_ |
+ << " post total = " << postfilter_bytes_read_; |
+ } else { |
+ VLOG(21) << __FUNCTION__ << "() " |
+ << "\"" << (request_ ? request_->url().spec() : "???") << "\"" |
+ << " error code = " << *bytes_read |
+ << " io pending = " << request_->status().is_io_pending(); |
+ } |
+ |
if (!request_->status().is_io_pending()) { |
// If the read completes synchronously, either success or failure, |
// invoke the OnRawReadComplete callback so we can account for the |