Chromium Code Reviews| Index: storage/browser/blob/blob_url_request_job.cc |
| diff --git a/storage/browser/blob/blob_url_request_job.cc b/storage/browser/blob/blob_url_request_job.cc |
| index 6ec2fe57ae7ca706b53171c9d8e1f8a24f1d3d3f..657098ddfc3a62745c4e27c9b004db7810ebab4b 100644 |
| --- a/storage/browser/blob/blob_url_request_job.cc |
| +++ b/storage/browser/blob/blob_url_request_job.cc |
| @@ -75,41 +75,37 @@ void BlobURLRequestJob::Kill() { |
| weak_factory_.InvalidateWeakPtrs(); |
| } |
| -bool BlobURLRequestJob::ReadRawData(net::IOBuffer* dest, |
| - int dest_size, |
| - int* bytes_read) { |
| +int BlobURLRequestJob::ReadRawData(net::IOBuffer* dest, int dest_size) { |
| TRACE_EVENT_ASYNC_BEGIN1("Blob", "BlobRequest::ReadRawData", this, "uuid", |
| blob_handle_ ? blob_handle_->uuid() : "NotFound"); |
| DCHECK_NE(dest_size, 0); |
| - DCHECK(bytes_read); |
| - // Bail out immediately if we encounter an error. |
| - if (error_) { |
| - *bytes_read = 0; |
| - return true; |
| - } |
| + // Bail out immediately if we encounter an error. This happens if a previous |
| + // ReadRawData signalled an error to its caller but the caller called |
| + // ReadRawData again anyway. |
| + if (error_) |
| + return 0; |
| + int bytes_read = 0; |
| BlobReader::Status read_status = |
| - blob_reader_->Read(dest, dest_size, bytes_read, |
| + blob_reader_->Read(dest, dest_size, &bytes_read, |
| base::Bind(&BlobURLRequestJob::DidReadRawData, |
| weak_factory_.GetWeakPtr())); |
| switch (read_status) { |
| case BlobReader::Status::NET_ERROR: |
| - NotifyFailure(blob_reader_->net_error()); |
| TRACE_EVENT_ASYNC_END1("Blob", "BlobRequest::ReadRawData", this, "uuid", |
| blob_handle_ ? blob_handle_->uuid() : "NotFound"); |
| - return false; |
| + return 0; |
| case BlobReader::Status::IO_PENDING: |
| - SetStatus(net::URLRequestStatus(net::URLRequestStatus::IO_PENDING, 0)); |
| - return false; |
| + return net::ERR_IO_PENDING; |
| case BlobReader::Status::DONE: |
| TRACE_EVENT_ASYNC_END1("Blob", "BlobRequest::ReadRawData", this, "uuid", |
| blob_handle_ ? blob_handle_->uuid() : "NotFound"); |
| - return true; |
| + return bytes_read; |
| } |
| NOTREACHED(); |
| - return true; |
| + return 0; |
| } |
| bool BlobURLRequestJob::GetMimeType(std::string* mime_type) const { |
| @@ -223,12 +219,11 @@ void BlobURLRequestJob::DidReadRawData(int result) { |
| TRACE_EVENT_ASYNC_END1("Blob", "BlobRequest::ReadRawData", this, "uuid", |
| blob_handle_ ? blob_handle_->uuid() : "NotFound"); |
| if (result < 0) { |
|
Randy Smith (Not in Mondays)
2015/10/22 20:38:45
I don't think this conditional is needed anymore;
xunjieli
2015/10/23 13:43:08
Done.
|
| - NotifyFailure(result); |
| + ReadRawDataComplete(result); |
| return; |
| } |
| // Clear the IO_PENDING status |
|
Randy Smith (Not in Mondays)
2015/10/22 20:38:45
nit: I think this comment is out of date now?
xunjieli
2015/10/23 13:43:08
Done.
|
| - SetStatus(net::URLRequestStatus()); |
| - NotifyReadComplete(result); |
| + ReadRawDataComplete(result); |
| } |
| void BlobURLRequestJob::NotifyFailure(int error_code) { |
| @@ -236,11 +231,7 @@ void BlobURLRequestJob::NotifyFailure(int error_code) { |
| // If we already return the headers on success, we can't change the headers |
| // now. Instead, we just error out. |
| - if (response_info_) { |
| - NotifyDone( |
| - net::URLRequestStatus(net::URLRequestStatus::FAILED, error_code)); |
| - return; |
| - } |
| + DCHECK(!response_info_) << "Cannot NotifyFailure after headers."; |
| net::HttpStatusCode status_code = net::HTTP_INTERNAL_SERVER_ERROR; |
| switch (error_code) { |