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); |