| Index: webkit/browser/fileapi/file_writer_delegate.cc
|
| diff --git a/webkit/browser/fileapi/file_writer_delegate.cc b/webkit/browser/fileapi/file_writer_delegate.cc
|
| index 3c7b7816cffbaa222e4630fab7cb1361798f44b6..1d307e0ec4829d9f3a1f9ecb863db9095e7be464 100644
|
| --- a/webkit/browser/fileapi/file_writer_delegate.cc
|
| +++ b/webkit/browser/fileapi/file_writer_delegate.cc
|
| @@ -48,8 +48,7 @@ FileWriterDelegate::FileWriterDelegate(
|
| bytes_written_backlog_(0),
|
| bytes_written_(0),
|
| bytes_read_(0),
|
| - io_buffer_(new net::IOBufferWithSize(kReadBufSize)),
|
| - weak_factory_(this) {
|
| + io_buffer_(new net::IOBufferWithSize(kReadBufSize)) {
|
| }
|
|
|
| FileWriterDelegate::~FileWriterDelegate() {
|
| @@ -60,7 +59,7 @@ void FileWriterDelegate::Start(scoped_ptr<net::URLRequest> request) {
|
| request_->Start();
|
| }
|
|
|
| -bool FileWriterDelegate::Cancel() {
|
| +void FileWriterDelegate::Cancel() {
|
| if (request_) {
|
| // This halts any callbacks on this delegate.
|
| request_->set_delegate(NULL);
|
| @@ -68,11 +67,13 @@ bool FileWriterDelegate::Cancel() {
|
| }
|
|
|
| const int status = file_stream_writer_->Cancel(
|
| - base::Bind(&FileWriterDelegate::OnWriteCancelled,
|
| - weak_factory_.GetWeakPtr()));
|
| + base::Bind(&FileWriterDelegate::OnWriteCancelled, AsWeakPtr()));
|
| // Return true to finish immediately if we have no pending writes.
|
| // Otherwise we'll do the final cleanup in the Cancel callback.
|
| - return (status != net::ERR_IO_PENDING);
|
| + if (status != net::ERR_IO_PENDING) {
|
| + write_callback_.Run(base::PLATFORM_FILE_ERROR_ABORT, 0,
|
| + GetCompletionStatusOnError());
|
| + }
|
| }
|
|
|
| void FileWriterDelegate::OnReceivedRedirect(net::URLRequest* request,
|
| @@ -128,8 +129,7 @@ void FileWriterDelegate::Read() {
|
| base::MessageLoop::current()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&FileWriterDelegate::OnDataReceived,
|
| - weak_factory_.GetWeakPtr(),
|
| - bytes_read_));
|
| + AsWeakPtr(), bytes_read_));
|
| } else if (!request_->status().is_io_pending()) {
|
| OnError(base::PLATFORM_FILE_ERROR_FAILED);
|
| }
|
| @@ -155,15 +155,15 @@ void FileWriterDelegate::Write() {
|
| file_stream_writer_->Write(cursor_.get(),
|
| static_cast<int>(bytes_to_write),
|
| base::Bind(&FileWriterDelegate::OnDataWritten,
|
| - weak_factory_.GetWeakPtr()));
|
| - if (write_response > 0)
|
| + AsWeakPtr()));
|
| + if (write_response > 0) {
|
| base::MessageLoop::current()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&FileWriterDelegate::OnDataWritten,
|
| - weak_factory_.GetWeakPtr(),
|
| - write_response));
|
| - else if (net::ERR_IO_PENDING != write_response)
|
| + AsWeakPtr(), write_response));
|
| + } else if (net::ERR_IO_PENDING != write_response) {
|
| OnError(NetErrorToPlatformFileError(write_response));
|
| + }
|
| }
|
|
|
| void FileWriterDelegate::OnDataWritten(int write_response) {
|
| @@ -230,8 +230,7 @@ void FileWriterDelegate::FlushForCompletion(
|
| int bytes_written,
|
| WriteProgressStatus progress_status) {
|
| int flush_error = file_stream_writer_->Flush(
|
| - base::Bind(&FileWriterDelegate::OnFlushed,
|
| - weak_factory_.GetWeakPtr(),
|
| + base::Bind(&FileWriterDelegate::OnFlushed, AsWeakPtr(),
|
| error, bytes_written, progress_status));
|
| if (flush_error != net::ERR_IO_PENDING)
|
| OnFlushed(error, bytes_written, progress_status, flush_error);
|
|
|