diff options
Diffstat (limited to 'storage/browser/blob/blob_url_request_job.cc')
-rw-r--r-- | storage/browser/blob/blob_url_request_job.cc | 42 |
1 files changed, 14 insertions, 28 deletions
diff --git a/storage/browser/blob/blob_url_request_job.cc b/storage/browser/blob/blob_url_request_job.cc index 6ec2fe5..deea300 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 blob_reader_->net_error(); 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 { @@ -222,13 +218,7 @@ void BlobURLRequestJob::DidCalculateSize(int result) { void BlobURLRequestJob::DidReadRawData(int result) { TRACE_EVENT_ASYNC_END1("Blob", "BlobRequest::ReadRawData", this, "uuid", blob_handle_ ? blob_handle_->uuid() : "NotFound"); - if (result < 0) { - NotifyFailure(result); - return; - } - // Clear the IO_PENDING status - SetStatus(net::URLRequestStatus()); - NotifyReadComplete(result); + ReadRawDataComplete(result); } void BlobURLRequestJob::NotifyFailure(int error_code) { @@ -236,11 +226,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) { |