| Index: webkit/tools/test_shell/simple_file_writer.cc
|
| diff --git a/webkit/tools/test_shell/simple_file_writer.cc b/webkit/tools/test_shell/simple_file_writer.cc
|
| index bb4758f3f5323aadaf36b050b74abc7070e60032..d33d75dc0543175311f61d7f8d8982f6c5b43c2d 100644
|
| --- a/webkit/tools/test_shell/simple_file_writer.cc
|
| +++ b/webkit/tools/test_shell/simple_file_writer.cc
|
| @@ -28,7 +28,8 @@ class SimpleFileWriter::IOThreadProxy
|
| : public base::RefCountedThreadSafe<SimpleFileWriter::IOThreadProxy> {
|
| public:
|
| explicit IOThreadProxy(const base::WeakPtr<SimpleFileWriter>& simple_writer)
|
| - : simple_writer_(simple_writer) {
|
| + : simple_writer_(simple_writer),
|
| + operation_(NULL) {
|
| // The IO thread needs to be running for this class to work.
|
| SimpleResourceLoaderBridge::EnsureIOThread();
|
| io_thread_ = SimpleResourceLoaderBridge::GetIoThread();
|
| @@ -44,8 +45,8 @@ class SimpleFileWriter::IOThreadProxy
|
| this, &IOThreadProxy::Truncate, path, offset));
|
| return;
|
| }
|
| - DCHECK(!operation_.get());
|
| - operation_.reset(GetNewOperation());
|
| + DCHECK(!operation_);
|
| + operation_ = GetNewOperation();
|
| operation_->Truncate(path, offset);
|
| }
|
|
|
| @@ -56,8 +57,8 @@ class SimpleFileWriter::IOThreadProxy
|
| return;
|
| }
|
| DCHECK(request_context_);
|
| - DCHECK(!operation_.get());
|
| - operation_.reset(GetNewOperation());
|
| + DCHECK(!operation_);
|
| + operation_ = GetNewOperation();
|
| operation_->Write(request_context_, path, blob_url, offset);
|
| }
|
|
|
| @@ -67,12 +68,11 @@ class SimpleFileWriter::IOThreadProxy
|
| this, &IOThreadProxy::Cancel));
|
| return;
|
| }
|
| - if (!operation_.get()) {
|
| + if (!operation_) {
|
| DidFail(base::PLATFORM_FILE_ERROR_INVALID_OPERATION);
|
| return;
|
| }
|
| - cancel_operation_.reset(GetNewOperation());
|
| - operation_->Cancel(cancel_operation_.get());
|
| + operation_->Cancel(GetNewOperation());
|
| }
|
|
|
| private:
|
| @@ -82,6 +82,10 @@ class SimpleFileWriter::IOThreadProxy
|
| explicit CallbackDispatcher(IOThreadProxy* proxy) : proxy_(proxy) {
|
| }
|
|
|
| + ~CallbackDispatcher() {
|
| + proxy_->ClearOperation();
|
| + }
|
| +
|
| virtual void DidSucceed() {
|
| proxy_->DidSucceed();
|
| }
|
| @@ -119,7 +123,6 @@ class SimpleFileWriter::IOThreadProxy
|
|
|
| void DidSucceed() {
|
| if (!main_thread_->BelongsToCurrentThread()) {
|
| - operation_.reset();
|
| main_thread_->PostTask(FROM_HERE, NewRunnableMethod(
|
| this, &IOThreadProxy::DidSucceed));
|
| return;
|
| @@ -130,7 +133,6 @@ class SimpleFileWriter::IOThreadProxy
|
|
|
| void DidFail(base::PlatformFileError error_code) {
|
| if (!main_thread_->BelongsToCurrentThread()) {
|
| - operation_.reset();
|
| main_thread_->PostTask(FROM_HERE, NewRunnableMethod(
|
| this, &IOThreadProxy::DidFail, error_code));
|
| return;
|
| @@ -141,8 +143,6 @@ class SimpleFileWriter::IOThreadProxy
|
|
|
| void DidWrite(int64 bytes, bool complete) {
|
| if (!main_thread_->BelongsToCurrentThread()) {
|
| - if (complete)
|
| - operation_.reset();
|
| main_thread_->PostTask(FROM_HERE, NewRunnableMethod(
|
| this, &IOThreadProxy::DidWrite, bytes, complete));
|
| return;
|
| @@ -151,6 +151,10 @@ class SimpleFileWriter::IOThreadProxy
|
| simple_writer_->DidWrite(bytes, complete);
|
| }
|
|
|
| + void ClearOperation() {
|
| + operation_ = NULL;
|
| + }
|
| +
|
| scoped_refptr<base::MessageLoopProxy> io_thread_;
|
| scoped_refptr<base::MessageLoopProxy> main_thread_;
|
|
|
| @@ -158,8 +162,7 @@ class SimpleFileWriter::IOThreadProxy
|
| base::WeakPtr<SimpleFileWriter> simple_writer_;
|
|
|
| // Only used on the io thread.
|
| - scoped_ptr<FileSystemOperation> operation_;
|
| - scoped_ptr<FileSystemOperation> cancel_operation_;
|
| + FileSystemOperation* operation_;
|
| };
|
|
|
|
|
|
|