| Index: net/url_request/url_fetcher_response_writer.cc
|
| diff --git a/net/url_request/url_fetcher_response_writer.cc b/net/url_request/url_fetcher_response_writer.cc
|
| index efbff40d338db82ddda839d4f6654f869a223d14..fcf6075fcc844c167cd8685e55d4fb473be79a4e 100644
|
| --- a/net/url_request/url_fetcher_response_writer.cc
|
| +++ b/net/url_request/url_fetcher_response_writer.cc
|
| @@ -91,8 +91,15 @@ int URLFetcherFileWriter::Write(IOBuffer* buffer,
|
| DCHECK(file_stream_);
|
| DCHECK(owns_file_);
|
|
|
| - ContinueWrite(new DrainableIOBuffer(buffer, num_bytes), callback, OK);
|
| - return ERR_IO_PENDING;
|
| + int result = file_stream_->Write(buffer, num_bytes,
|
| + base::Bind(&URLFetcherFileWriter::DidWrite,
|
| + weak_factory_.GetWeakPtr(),
|
| + callback));
|
| + if (result < 0 && result != ERR_IO_PENDING) {
|
| + error_code_ = result;
|
| + CloseAndDeleteFile();
|
| + }
|
| + return result;
|
| }
|
|
|
| int URLFetcherFileWriter::Finish(const CompletionCallback& callback) {
|
| @@ -100,33 +107,13 @@ int URLFetcherFileWriter::Finish(const CompletionCallback& callback) {
|
| return OK;
|
| }
|
|
|
| -void URLFetcherFileWriter::ContinueWrite(
|
| - scoped_refptr<DrainableIOBuffer> buffer,
|
| - const CompletionCallback& callback,
|
| - int result) {
|
| - // |file_stream_| should be alive when write is in progress.
|
| - DCHECK(file_stream_);
|
| -
|
| +void URLFetcherFileWriter::DidWrite(const CompletionCallback& callback,
|
| + int result) {
|
| if (result < 0) {
|
| error_code_ = result;
|
| CloseAndDeleteFile();
|
| - callback.Run(result);
|
| - return;
|
| - }
|
| -
|
| - total_bytes_written_ += result;
|
| - buffer->DidConsume(result);
|
| -
|
| - if (buffer->BytesRemaining() > 0) {
|
| - file_stream_->Write(buffer, buffer->BytesRemaining(),
|
| - base::Bind(&URLFetcherFileWriter::ContinueWrite,
|
| - weak_factory_.GetWeakPtr(),
|
| - buffer,
|
| - callback));
|
| - } else {
|
| - // Finished writing buffer to the file.
|
| - callback.Run(buffer->size());
|
| }
|
| + callback.Run(result);
|
| }
|
|
|
| void URLFetcherFileWriter::DisownFile() {
|
|
|