Index: webkit/fileapi/local_file_stream_writer.cc |
=================================================================== |
--- webkit/fileapi/local_file_stream_writer.cc (revision 160294) |
+++ webkit/fileapi/local_file_stream_writer.cc (working copy) |
@@ -64,6 +64,21 @@ |
return net::ERR_IO_PENDING; |
} |
+int LocalFileStreamWriter::Flush(const net::CompletionCallback& callback) { |
+ DCHECK(!has_pending_operation_); |
+ DCHECK(cancel_callback_.is_null()); |
+ |
+ // Write() is not called yet, so there's nothing to flush. |
+ if (!stream_impl_.get()) |
+ return net::OK; |
+ |
+ has_pending_operation_ = true; |
+ int result = InitiateFlush(callback); |
+ if (result != net::ERR_IO_PENDING) |
+ has_pending_operation_ = false; |
+ return result; |
+} |
+ |
int LocalFileStreamWriter::InitiateOpen( |
const net::CompletionCallback& error_callback, |
const base::Closure& main_operation) { |
@@ -179,6 +194,26 @@ |
callback.Run(result); |
} |
+int LocalFileStreamWriter::InitiateFlush( |
+ const net::CompletionCallback& callback) { |
+ DCHECK(has_pending_operation_); |
+ DCHECK(stream_impl_.get()); |
+ |
+ return stream_impl_->Flush(base::Bind(&LocalFileStreamWriter::DidFlush, |
+ weak_factory_.GetWeakPtr(), |
+ callback)); |
+} |
+ |
+void LocalFileStreamWriter::DidFlush(const net::CompletionCallback& callback, |
+ int result) { |
+ DCHECK(has_pending_operation_); |
+ |
+ if (CancelIfRequested()) |
+ return; |
+ has_pending_operation_ = false; |
+ callback.Run(result); |
+} |
+ |
bool LocalFileStreamWriter::CancelIfRequested() { |
DCHECK(has_pending_operation_); |