| Index: webkit/browser/fileapi/file_system_operation_runner.cc
|
| diff --git a/webkit/browser/fileapi/file_system_operation_runner.cc b/webkit/browser/fileapi/file_system_operation_runner.cc
|
| deleted file mode 100644
|
| index 0644b2fdfd7e11958a39f5e4856ad1d8b806a133..0000000000000000000000000000000000000000
|
| --- a/webkit/browser/fileapi/file_system_operation_runner.cc
|
| +++ /dev/null
|
| @@ -1,687 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "webkit/browser/fileapi/file_system_operation_runner.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/message_loop/message_loop_proxy.h"
|
| -#include "base/stl_util.h"
|
| -#include "net/url_request/url_request_context.h"
|
| -#include "webkit/browser/blob/blob_url_request_job_factory.h"
|
| -#include "webkit/browser/fileapi/file_observers.h"
|
| -#include "webkit/browser/fileapi/file_stream_writer.h"
|
| -#include "webkit/browser/fileapi/file_system_context.h"
|
| -#include "webkit/browser/fileapi/file_system_operation.h"
|
| -#include "webkit/browser/fileapi/file_writer_delegate.h"
|
| -#include "webkit/common/blob/shareable_file_reference.h"
|
| -
|
| -namespace storage {
|
| -
|
| -typedef FileSystemOperationRunner::OperationID OperationID;
|
| -
|
| -class FileSystemOperationRunner::BeginOperationScoper
|
| - : public base::SupportsWeakPtr<
|
| - FileSystemOperationRunner::BeginOperationScoper> {
|
| - public:
|
| - BeginOperationScoper() {}
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(BeginOperationScoper);
|
| -};
|
| -
|
| -FileSystemOperationRunner::OperationHandle::OperationHandle() {}
|
| -FileSystemOperationRunner::OperationHandle::~OperationHandle() {}
|
| -
|
| -FileSystemOperationRunner::~FileSystemOperationRunner() {
|
| -}
|
| -
|
| -void FileSystemOperationRunner::Shutdown() {
|
| - operations_.Clear();
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::CreateFile(
|
| - const FileSystemURL& url,
|
| - bool exclusive,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| -
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - PrepareForWrite(handle.id, url);
|
| - operation->CreateFile(
|
| - url, exclusive,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::CreateDirectory(
|
| - const FileSystemURL& url,
|
| - bool exclusive,
|
| - bool recursive,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - PrepareForWrite(handle.id, url);
|
| - operation->CreateDirectory(
|
| - url, exclusive, recursive,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::Copy(
|
| - const FileSystemURL& src_url,
|
| - const FileSystemURL& dest_url,
|
| - CopyOrMoveOption option,
|
| - const CopyProgressCallback& progress_callback,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(dest_url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - PrepareForWrite(handle.id, dest_url);
|
| - PrepareForRead(handle.id, src_url);
|
| - operation->Copy(
|
| - src_url, dest_url, option,
|
| - progress_callback.is_null() ?
|
| - CopyProgressCallback() :
|
| - base::Bind(&FileSystemOperationRunner::OnCopyProgress, AsWeakPtr(),
|
| - handle, progress_callback),
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::Move(
|
| - const FileSystemURL& src_url,
|
| - const FileSystemURL& dest_url,
|
| - CopyOrMoveOption option,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(dest_url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - PrepareForWrite(handle.id, dest_url);
|
| - PrepareForWrite(handle.id, src_url);
|
| - operation->Move(
|
| - src_url, dest_url, option,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::DirectoryExists(
|
| - const FileSystemURL& url,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - PrepareForRead(handle.id, url);
|
| - operation->DirectoryExists(
|
| - url,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::FileExists(
|
| - const FileSystemURL& url,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - PrepareForRead(handle.id, url);
|
| - operation->FileExists(
|
| - url,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::GetMetadata(
|
| - const FileSystemURL& url,
|
| - const GetMetadataCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidGetMetadata(handle, callback, error, base::File::Info());
|
| - return handle.id;
|
| - }
|
| - PrepareForRead(handle.id, url);
|
| - operation->GetMetadata(
|
| - url,
|
| - base::Bind(&FileSystemOperationRunner::DidGetMetadata, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::ReadDirectory(
|
| - const FileSystemURL& url,
|
| - const ReadDirectoryCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidReadDirectory(handle, callback, error, std::vector<DirectoryEntry>(),
|
| - false);
|
| - return handle.id;
|
| - }
|
| - PrepareForRead(handle.id, url);
|
| - operation->ReadDirectory(
|
| - url,
|
| - base::Bind(&FileSystemOperationRunner::DidReadDirectory, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::Remove(
|
| - const FileSystemURL& url, bool recursive,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - PrepareForWrite(handle.id, url);
|
| - operation->Remove(
|
| - url, recursive,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::Write(
|
| - const net::URLRequestContext* url_request_context,
|
| - const FileSystemURL& url,
|
| - scoped_ptr<storage::BlobDataHandle> blob,
|
| - int64 offset,
|
| - const WriteCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| -
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidWrite(handle, callback, error, 0, true);
|
| - return handle.id;
|
| - }
|
| -
|
| - scoped_ptr<FileStreamWriter> writer(
|
| - file_system_context_->CreateFileStreamWriter(url, offset));
|
| - if (!writer) {
|
| - // Write is not supported.
|
| - DidWrite(handle, callback, base::File::FILE_ERROR_SECURITY, 0, true);
|
| - return handle.id;
|
| - }
|
| -
|
| - FileWriterDelegate::FlushPolicy flush_policy =
|
| - file_system_context_->ShouldFlushOnWriteCompletion(url.type())
|
| - ? FileWriterDelegate::FLUSH_ON_COMPLETION
|
| - : FileWriterDelegate::NO_FLUSH_ON_COMPLETION;
|
| - scoped_ptr<FileWriterDelegate> writer_delegate(
|
| - new FileWriterDelegate(writer.Pass(), flush_policy));
|
| -
|
| - scoped_ptr<net::URLRequest> blob_request(
|
| - storage::BlobProtocolHandler::CreateBlobRequest(
|
| - blob.Pass(), url_request_context, writer_delegate.get()));
|
| -
|
| - PrepareForWrite(handle.id, url);
|
| - operation->Write(
|
| - url, writer_delegate.Pass(), blob_request.Pass(),
|
| - base::Bind(&FileSystemOperationRunner::DidWrite, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::Truncate(
|
| - const FileSystemURL& url, int64 length,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - PrepareForWrite(handle.id, url);
|
| - operation->Truncate(
|
| - url, length,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -void FileSystemOperationRunner::Cancel(
|
| - OperationID id,
|
| - const StatusCallback& callback) {
|
| - if (ContainsKey(finished_operations_, id)) {
|
| - DCHECK(!ContainsKey(stray_cancel_callbacks_, id));
|
| - stray_cancel_callbacks_[id] = callback;
|
| - return;
|
| - }
|
| - FileSystemOperation* operation = operations_.Lookup(id);
|
| - if (!operation) {
|
| - // There is no operation with |id|.
|
| - callback.Run(base::File::FILE_ERROR_INVALID_OPERATION);
|
| - return;
|
| - }
|
| - operation->Cancel(callback);
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::TouchFile(
|
| - const FileSystemURL& url,
|
| - const base::Time& last_access_time,
|
| - const base::Time& last_modified_time,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - PrepareForWrite(handle.id, url);
|
| - operation->TouchFile(
|
| - url, last_access_time, last_modified_time,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::OpenFile(
|
| - const FileSystemURL& url,
|
| - int file_flags,
|
| - const OpenFileCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidOpenFile(handle, callback, base::File(error), base::Closure());
|
| - return handle.id;
|
| - }
|
| - if (file_flags &
|
| - (base::File::FLAG_CREATE | base::File::FLAG_OPEN_ALWAYS |
|
| - base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_OPEN_TRUNCATED |
|
| - base::File::FLAG_WRITE | base::File::FLAG_EXCLUSIVE_WRITE |
|
| - base::File::FLAG_DELETE_ON_CLOSE |
|
| - base::File::FLAG_WRITE_ATTRIBUTES)) {
|
| - PrepareForWrite(handle.id, url);
|
| - } else {
|
| - PrepareForRead(handle.id, url);
|
| - }
|
| - operation->OpenFile(
|
| - url, file_flags,
|
| - base::Bind(&FileSystemOperationRunner::DidOpenFile, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::CreateSnapshotFile(
|
| - const FileSystemURL& url,
|
| - const SnapshotFileCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidCreateSnapshot(handle, callback, error, base::File::Info(),
|
| - base::FilePath(), NULL);
|
| - return handle.id;
|
| - }
|
| - PrepareForRead(handle.id, url);
|
| - operation->CreateSnapshotFile(
|
| - url,
|
| - base::Bind(&FileSystemOperationRunner::DidCreateSnapshot, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::CopyInForeignFile(
|
| - const base::FilePath& src_local_disk_path,
|
| - const FileSystemURL& dest_url,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(dest_url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - operation->CopyInForeignFile(
|
| - src_local_disk_path, dest_url,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::RemoveFile(
|
| - const FileSystemURL& url,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - operation->RemoveFile(
|
| - url,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::RemoveDirectory(
|
| - const FileSystemURL& url,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - operation->RemoveDirectory(
|
| - url,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::CopyFileLocal(
|
| - const FileSystemURL& src_url,
|
| - const FileSystemURL& dest_url,
|
| - CopyOrMoveOption option,
|
| - const CopyFileProgressCallback& progress_callback,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(src_url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - operation->CopyFileLocal(
|
| - src_url, dest_url, option, progress_callback,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -OperationID FileSystemOperationRunner::MoveFileLocal(
|
| - const FileSystemURL& src_url,
|
| - const FileSystemURL& dest_url,
|
| - CopyOrMoveOption option,
|
| - const StatusCallback& callback) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - FileSystemOperation* operation =
|
| - file_system_context_->CreateFileSystemOperation(src_url, &error);
|
| - BeginOperationScoper scope;
|
| - OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr());
|
| - if (!operation) {
|
| - DidFinish(handle, callback, error);
|
| - return handle.id;
|
| - }
|
| - operation->MoveFileLocal(
|
| - src_url, dest_url, option,
|
| - base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
|
| - handle, callback));
|
| - return handle.id;
|
| -}
|
| -
|
| -base::File::Error FileSystemOperationRunner::SyncGetPlatformPath(
|
| - const FileSystemURL& url,
|
| - base::FilePath* platform_path) {
|
| - base::File::Error error = base::File::FILE_OK;
|
| - scoped_ptr<FileSystemOperation> operation(
|
| - file_system_context_->CreateFileSystemOperation(url, &error));
|
| - if (!operation.get())
|
| - return error;
|
| - return operation->SyncGetPlatformPath(url, platform_path);
|
| -}
|
| -
|
| -FileSystemOperationRunner::FileSystemOperationRunner(
|
| - FileSystemContext* file_system_context)
|
| - : file_system_context_(file_system_context) {}
|
| -
|
| -void FileSystemOperationRunner::DidFinish(
|
| - const OperationHandle& handle,
|
| - const StatusCallback& callback,
|
| - base::File::Error rv) {
|
| - if (handle.scope) {
|
| - finished_operations_.insert(handle.id);
|
| - base::MessageLoopProxy::current()->PostTask(
|
| - FROM_HERE, base::Bind(&FileSystemOperationRunner::DidFinish,
|
| - AsWeakPtr(), handle, callback, rv));
|
| - return;
|
| - }
|
| - callback.Run(rv);
|
| - FinishOperation(handle.id);
|
| -}
|
| -
|
| -void FileSystemOperationRunner::DidGetMetadata(
|
| - const OperationHandle& handle,
|
| - const GetMetadataCallback& callback,
|
| - base::File::Error rv,
|
| - const base::File::Info& file_info) {
|
| - if (handle.scope) {
|
| - finished_operations_.insert(handle.id);
|
| - base::MessageLoopProxy::current()->PostTask(
|
| - FROM_HERE, base::Bind(&FileSystemOperationRunner::DidGetMetadata,
|
| - AsWeakPtr(), handle, callback, rv, file_info));
|
| - return;
|
| - }
|
| - callback.Run(rv, file_info);
|
| - FinishOperation(handle.id);
|
| -}
|
| -
|
| -void FileSystemOperationRunner::DidReadDirectory(
|
| - const OperationHandle& handle,
|
| - const ReadDirectoryCallback& callback,
|
| - base::File::Error rv,
|
| - const std::vector<DirectoryEntry>& entries,
|
| - bool has_more) {
|
| - if (handle.scope) {
|
| - finished_operations_.insert(handle.id);
|
| - base::MessageLoopProxy::current()->PostTask(
|
| - FROM_HERE, base::Bind(&FileSystemOperationRunner::DidReadDirectory,
|
| - AsWeakPtr(), handle, callback, rv,
|
| - entries, has_more));
|
| - return;
|
| - }
|
| - callback.Run(rv, entries, has_more);
|
| - if (rv != base::File::FILE_OK || !has_more)
|
| - FinishOperation(handle.id);
|
| -}
|
| -
|
| -void FileSystemOperationRunner::DidWrite(
|
| - const OperationHandle& handle,
|
| - const WriteCallback& callback,
|
| - base::File::Error rv,
|
| - int64 bytes,
|
| - bool complete) {
|
| - if (handle.scope) {
|
| - finished_operations_.insert(handle.id);
|
| - base::MessageLoopProxy::current()->PostTask(
|
| - FROM_HERE, base::Bind(&FileSystemOperationRunner::DidWrite, AsWeakPtr(),
|
| - handle, callback, rv, bytes, complete));
|
| - return;
|
| - }
|
| - callback.Run(rv, bytes, complete);
|
| - if (rv != base::File::FILE_OK || complete)
|
| - FinishOperation(handle.id);
|
| -}
|
| -
|
| -void FileSystemOperationRunner::DidOpenFile(
|
| - const OperationHandle& handle,
|
| - const OpenFileCallback& callback,
|
| - base::File file,
|
| - const base::Closure& on_close_callback) {
|
| - if (handle.scope) {
|
| - finished_operations_.insert(handle.id);
|
| - base::MessageLoopProxy::current()->PostTask(
|
| - FROM_HERE, base::Bind(&FileSystemOperationRunner::DidOpenFile,
|
| - AsWeakPtr(), handle, callback, Passed(&file),
|
| - on_close_callback));
|
| - return;
|
| - }
|
| - callback.Run(file.Pass(), on_close_callback);
|
| - FinishOperation(handle.id);
|
| -}
|
| -
|
| -void FileSystemOperationRunner::DidCreateSnapshot(
|
| - const OperationHandle& handle,
|
| - const SnapshotFileCallback& callback,
|
| - base::File::Error rv,
|
| - const base::File::Info& file_info,
|
| - const base::FilePath& platform_path,
|
| - const scoped_refptr<storage::ShareableFileReference>& file_ref) {
|
| - if (handle.scope) {
|
| - finished_operations_.insert(handle.id);
|
| - base::MessageLoopProxy::current()->PostTask(
|
| - FROM_HERE, base::Bind(&FileSystemOperationRunner::DidCreateSnapshot,
|
| - AsWeakPtr(), handle, callback, rv, file_info,
|
| - platform_path, file_ref));
|
| - return;
|
| - }
|
| - callback.Run(rv, file_info, platform_path, file_ref);
|
| - FinishOperation(handle.id);
|
| -}
|
| -
|
| -void FileSystemOperationRunner::OnCopyProgress(
|
| - const OperationHandle& handle,
|
| - const CopyProgressCallback& callback,
|
| - FileSystemOperation::CopyProgressType type,
|
| - const FileSystemURL& source_url,
|
| - const FileSystemURL& dest_url,
|
| - int64 size) {
|
| - if (handle.scope) {
|
| - base::MessageLoopProxy::current()->PostTask(
|
| - FROM_HERE, base::Bind(
|
| - &FileSystemOperationRunner::OnCopyProgress,
|
| - AsWeakPtr(), handle, callback, type, source_url, dest_url, size));
|
| - return;
|
| - }
|
| - callback.Run(type, source_url, dest_url, size);
|
| -}
|
| -
|
| -void FileSystemOperationRunner::PrepareForWrite(OperationID id,
|
| - const FileSystemURL& url) {
|
| - if (file_system_context_->GetUpdateObservers(url.type())) {
|
| - file_system_context_->GetUpdateObservers(url.type())->Notify(
|
| - &FileUpdateObserver::OnStartUpdate, MakeTuple(url));
|
| - }
|
| - write_target_urls_[id].insert(url);
|
| -}
|
| -
|
| -void FileSystemOperationRunner::PrepareForRead(OperationID id,
|
| - const FileSystemURL& url) {
|
| - if (file_system_context_->GetAccessObservers(url.type())) {
|
| - file_system_context_->GetAccessObservers(url.type())->Notify(
|
| - &FileAccessObserver::OnAccess, MakeTuple(url));
|
| - }
|
| -}
|
| -
|
| -FileSystemOperationRunner::OperationHandle
|
| -FileSystemOperationRunner::BeginOperation(
|
| - FileSystemOperation* operation,
|
| - base::WeakPtr<BeginOperationScoper> scope) {
|
| - OperationHandle handle;
|
| - handle.id = operations_.Add(operation);
|
| - handle.scope = scope;
|
| - return handle;
|
| -}
|
| -
|
| -void FileSystemOperationRunner::FinishOperation(OperationID id) {
|
| - OperationToURLSet::iterator found = write_target_urls_.find(id);
|
| - if (found != write_target_urls_.end()) {
|
| - const FileSystemURLSet& urls = found->second;
|
| - for (FileSystemURLSet::const_iterator iter = urls.begin();
|
| - iter != urls.end(); ++iter) {
|
| - if (file_system_context_->GetUpdateObservers(iter->type())) {
|
| - file_system_context_->GetUpdateObservers(iter->type())->Notify(
|
| - &FileUpdateObserver::OnEndUpdate, MakeTuple(*iter));
|
| - }
|
| - }
|
| - write_target_urls_.erase(found);
|
| - }
|
| -
|
| - // IDMap::Lookup fails if the operation is NULL, so we don't check
|
| - // operations_.Lookup(id) here.
|
| -
|
| - operations_.Remove(id);
|
| - finished_operations_.erase(id);
|
| -
|
| - // Dispatch stray cancel callback if exists.
|
| - std::map<OperationID, StatusCallback>::iterator found_cancel =
|
| - stray_cancel_callbacks_.find(id);
|
| - if (found_cancel != stray_cancel_callbacks_.end()) {
|
| - // This cancel has been requested after the operation has finished,
|
| - // so report that we failed to stop it.
|
| - found_cancel->second.Run(base::File::FILE_ERROR_INVALID_OPERATION);
|
| - stray_cancel_callbacks_.erase(found_cancel);
|
| - }
|
| -}
|
| -
|
| -} // namespace storage
|
|
|