| Index: webkit/fileapi/syncable/syncable_file_system_operation.cc
|
| diff --git a/webkit/fileapi/syncable/syncable_file_system_operation.cc b/webkit/fileapi/syncable/syncable_file_system_operation.cc
|
| deleted file mode 100644
|
| index 5caffbe7d0ecf9e72812f3712c91eca72552e1cf..0000000000000000000000000000000000000000
|
| --- a/webkit/fileapi/syncable/syncable_file_system_operation.cc
|
| +++ /dev/null
|
| @@ -1,408 +0,0 @@
|
| -// Copyright (c) 2012 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/fileapi/syncable/syncable_file_system_operation.h"
|
| -
|
| -#include "base/logging.h"
|
| -#include "webkit/blob/shareable_file_reference.h"
|
| -#include "webkit/browser/fileapi/file_system_context.h"
|
| -#include "webkit/browser/fileapi/file_system_operation_context.h"
|
| -#include "webkit/browser/fileapi/file_system_url.h"
|
| -#include "webkit/browser/fileapi/sandbox_mount_point_provider.h"
|
| -#include "webkit/fileapi/syncable/local_file_sync_context.h"
|
| -#include "webkit/fileapi/syncable/syncable_file_operation_runner.h"
|
| -#include "webkit/fileapi/syncable/syncable_file_system_util.h"
|
| -
|
| -using fileapi::FileSystemURL;
|
| -using fileapi::FileSystemOperationContext;
|
| -using fileapi::LocalFileSystemOperation;
|
| -
|
| -namespace sync_file_system {
|
| -
|
| -namespace {
|
| -
|
| -void WriteCallbackAdapter(
|
| - const SyncableFileSystemOperation::WriteCallback& callback,
|
| - base::PlatformFileError status) {
|
| - callback.Run(status, 0, true);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -class SyncableFileSystemOperation::QueueableTask
|
| - : public SyncableFileOperationRunner::Task {
|
| - public:
|
| - QueueableTask(SyncableFileSystemOperation* operation,
|
| - const base::Closure& task)
|
| - : operation_(operation), task_(task) {}
|
| -
|
| - virtual ~QueueableTask() {
|
| - DCHECK(!operation_);
|
| - }
|
| -
|
| - virtual void Run() OVERRIDE {
|
| - DCHECK(!task_.is_null());
|
| - task_.Run();
|
| - operation_ = NULL;
|
| - }
|
| -
|
| - virtual void Cancel() OVERRIDE {
|
| - DCHECK(!task_.is_null());
|
| - DCHECK(operation_);
|
| - operation_->OnCancelled();
|
| - task_.Reset(); // This will delete operation_.
|
| - operation_ = NULL;
|
| - }
|
| -
|
| - virtual std::vector<FileSystemURL>& target_paths() const OVERRIDE {
|
| - DCHECK(operation_);
|
| - return operation_->target_paths_;
|
| - }
|
| -
|
| - private:
|
| - SyncableFileSystemOperation* operation_;
|
| - base::Closure task_;
|
| - DISALLOW_COPY_AND_ASSIGN(QueueableTask);
|
| -};
|
| -
|
| -SyncableFileSystemOperation::~SyncableFileSystemOperation() {}
|
| -
|
| -void SyncableFileSystemOperation::CreateFile(
|
| - const FileSystemURL& url,
|
| - bool exclusive,
|
| - const StatusCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - AbortOperation(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND);
|
| - return;
|
| - }
|
| - DCHECK(operation_runner_.get());
|
| - target_paths_.push_back(url);
|
| - completion_callback_ = callback;
|
| - scoped_ptr<SyncableFileOperationRunner::Task> task(new QueueableTask(
|
| - this,
|
| - base::Bind(&FileSystemOperation::CreateFile,
|
| - base::Unretained(NewOperation()),
|
| - url, exclusive,
|
| - base::Bind(&self::DidFinish, base::Owned(this)))));
|
| - operation_runner_->PostOperationTask(task.Pass());
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::CreateDirectory(
|
| - const FileSystemURL& url,
|
| - bool exclusive,
|
| - bool recursive,
|
| - const StatusCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - AbortOperation(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND);
|
| - return;
|
| - }
|
| - if (!is_directory_operation_enabled_) {
|
| - AbortOperation(callback, base::PLATFORM_FILE_ERROR_INVALID_OPERATION);
|
| - return;
|
| - }
|
| - DCHECK(operation_runner_.get());
|
| - target_paths_.push_back(url);
|
| - completion_callback_ = callback;
|
| - scoped_ptr<SyncableFileOperationRunner::Task> task(new QueueableTask(
|
| - this,
|
| - base::Bind(&FileSystemOperation::CreateDirectory,
|
| - base::Unretained(NewOperation()),
|
| - url, exclusive, recursive,
|
| - base::Bind(&self::DidFinish, base::Owned(this)))));
|
| - operation_runner_->PostOperationTask(task.Pass());
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::Copy(
|
| - const FileSystemURL& src_url,
|
| - const FileSystemURL& dest_url,
|
| - const StatusCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - AbortOperation(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND);
|
| - return;
|
| - }
|
| - DCHECK(operation_runner_.get());
|
| - target_paths_.push_back(dest_url);
|
| - completion_callback_ = callback;
|
| - scoped_ptr<SyncableFileOperationRunner::Task> task(new QueueableTask(
|
| - this,
|
| - base::Bind(&FileSystemOperation::Copy,
|
| - base::Unretained(NewOperation()),
|
| - src_url, dest_url,
|
| - base::Bind(&self::DidFinish, base::Owned(this)))));
|
| - operation_runner_->PostOperationTask(task.Pass());
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::Move(
|
| - const FileSystemURL& src_url,
|
| - const FileSystemURL& dest_url,
|
| - const StatusCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - AbortOperation(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND);
|
| - return;
|
| - }
|
| - DCHECK(operation_runner_.get());
|
| - target_paths_.push_back(src_url);
|
| - target_paths_.push_back(dest_url);
|
| - completion_callback_ = callback;
|
| - scoped_ptr<SyncableFileOperationRunner::Task> task(new QueueableTask(
|
| - this,
|
| - base::Bind(&FileSystemOperation::Move,
|
| - base::Unretained(NewOperation()),
|
| - src_url, dest_url,
|
| - base::Bind(&self::DidFinish, base::Owned(this)))));
|
| - operation_runner_->PostOperationTask(task.Pass());
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::DirectoryExists(
|
| - const FileSystemURL& url,
|
| - const StatusCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - AbortOperation(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND);
|
| - return;
|
| - }
|
| - NewOperation()->DirectoryExists(url, callback);
|
| - delete this;
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::FileExists(
|
| - const FileSystemURL& url,
|
| - const StatusCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - AbortOperation(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND);
|
| - return;
|
| - }
|
| - NewOperation()->FileExists(url, callback);
|
| - delete this;
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::GetMetadata(
|
| - const FileSystemURL& url,
|
| - const GetMetadataCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - callback.Run(base::PLATFORM_FILE_ERROR_NOT_FOUND,
|
| - base::PlatformFileInfo(), base::FilePath());
|
| - delete this;
|
| - return;
|
| - }
|
| - NewOperation()->GetMetadata(url, callback);
|
| - delete this;
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::ReadDirectory(
|
| - const FileSystemURL& url,
|
| - const ReadDirectoryCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - callback.Run(base::PLATFORM_FILE_ERROR_NOT_FOUND, FileEntryList(), false);
|
| - delete this;
|
| - return;
|
| - }
|
| - // This is a read operation and there'd be no hard to let it go even if
|
| - // directory operation is disabled. (And we should allow this if it's made
|
| - // on the root directory)
|
| - NewOperation()->ReadDirectory(url, callback);
|
| - delete this;
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::Remove(
|
| - const FileSystemURL& url, bool recursive,
|
| - const StatusCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - AbortOperation(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND);
|
| - return;
|
| - }
|
| - DCHECK(operation_runner_.get());
|
| - target_paths_.push_back(url);
|
| - completion_callback_ = callback;
|
| - scoped_ptr<SyncableFileOperationRunner::Task> task(new QueueableTask(
|
| - this,
|
| - base::Bind(&FileSystemOperation::Remove,
|
| - base::Unretained(NewOperation()),
|
| - url, recursive,
|
| - base::Bind(&self::DidFinish, base::Owned(this)))));
|
| - operation_runner_->PostOperationTask(task.Pass());
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::Write(
|
| - const net::URLRequestContext* url_request_context,
|
| - const FileSystemURL& url,
|
| - const GURL& blob_url,
|
| - int64 offset,
|
| - const WriteCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - callback.Run(base::PLATFORM_FILE_ERROR_NOT_FOUND, 0, true);
|
| - delete this;
|
| - return;
|
| - }
|
| - DCHECK(operation_runner_.get());
|
| - target_paths_.push_back(url);
|
| - completion_callback_ = base::Bind(&WriteCallbackAdapter, callback);
|
| - scoped_ptr<SyncableFileOperationRunner::Task> task(new QueueableTask(
|
| - this,
|
| - NewOperation()->GetWriteClosure(
|
| - url_request_context, url, blob_url, offset,
|
| - base::Bind(&self::DidWrite, base::Owned(this), callback))));
|
| - operation_runner_->PostOperationTask(task.Pass());
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::Truncate(
|
| - const FileSystemURL& url, int64 length,
|
| - const StatusCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - AbortOperation(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND);
|
| - return;
|
| - }
|
| - DCHECK(operation_runner_.get());
|
| - target_paths_.push_back(url);
|
| - completion_callback_ = callback;
|
| - scoped_ptr<SyncableFileOperationRunner::Task> task(new QueueableTask(
|
| - this,
|
| - base::Bind(&FileSystemOperation::Truncate,
|
| - base::Unretained(NewOperation()),
|
| - url, length,
|
| - base::Bind(&self::DidFinish, base::Owned(this)))));
|
| - operation_runner_->PostOperationTask(task.Pass());
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::TouchFile(
|
| - const FileSystemURL& url,
|
| - const base::Time& last_access_time,
|
| - const base::Time& last_modified_time,
|
| - const StatusCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - AbortOperation(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND);
|
| - return;
|
| - }
|
| - NewOperation()->TouchFile(url, last_access_time,
|
| - last_modified_time, callback);
|
| - delete this;
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::OpenFile(
|
| - const FileSystemURL& url,
|
| - int file_flags,
|
| - base::ProcessHandle peer_handle,
|
| - const OpenFileCallback& callback) {
|
| - NOTREACHED();
|
| - delete this;
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::Cancel(
|
| - const StatusCallback& cancel_callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - DCHECK(inflight_operation_);
|
| - completion_callback_ = cancel_callback;
|
| - NewOperation()->Cancel(base::Bind(&self::DidFinish, base::Owned(this)));
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::CreateSnapshotFile(
|
| - const FileSystemURL& path,
|
| - const SnapshotFileCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - callback.Run(base::PLATFORM_FILE_ERROR_NOT_FOUND,
|
| - base::PlatformFileInfo(), base::FilePath(), NULL);
|
| - delete this;
|
| - return;
|
| - }
|
| - NewOperation()->CreateSnapshotFile(path, callback);
|
| - delete this;
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::CopyInForeignFile(
|
| - const base::FilePath& src_local_disk_path,
|
| - const FileSystemURL& dest_url,
|
| - const StatusCallback& callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!operation_runner_) {
|
| - AbortOperation(callback, base::PLATFORM_FILE_ERROR_NOT_FOUND);
|
| - return;
|
| - }
|
| - DCHECK(operation_runner_.get());
|
| - target_paths_.push_back(dest_url);
|
| - completion_callback_ = callback;
|
| - scoped_ptr<SyncableFileOperationRunner::Task> task(new QueueableTask(
|
| - this,
|
| - base::Bind(&LocalFileSystemOperation::CopyInForeignFile,
|
| - base::Unretained(NewOperation()),
|
| - src_local_disk_path, dest_url,
|
| - base::Bind(&self::DidFinish, base::Owned(this)))));
|
| - operation_runner_->PostOperationTask(task.Pass());
|
| -}
|
| -
|
| -SyncableFileSystemOperation::SyncableFileSystemOperation(
|
| - fileapi::FileSystemContext* file_system_context,
|
| - scoped_ptr<FileSystemOperationContext> operation_context)
|
| - : LocalFileSystemOperation(file_system_context,
|
| - operation_context.Pass()),
|
| - inflight_operation_(NULL) {
|
| - DCHECK(file_system_context);
|
| - if (!file_system_context->sync_context()) {
|
| - // Syncable FileSystem is opened in a file system context which doesn't
|
| - // support (or is not initialized for) the API.
|
| - // Returning here to leave operation_runner_ as NULL.
|
| - return;
|
| - }
|
| - operation_runner_ = file_system_context->sync_context()->operation_runner();
|
| - is_directory_operation_enabled_ = IsSyncFSDirectoryOperationEnabled();
|
| -}
|
| -
|
| -LocalFileSystemOperation* SyncableFileSystemOperation::NewOperation() {
|
| - DCHECK(operation_context_);
|
| - inflight_operation_ = new LocalFileSystemOperation(
|
| - file_system_context(),
|
| - operation_context_.Pass());
|
| - DCHECK(inflight_operation_);
|
| - return inflight_operation_;
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::DidFinish(base::PlatformFileError status) {
|
| - DCHECK(CalledOnValidThread());
|
| - DCHECK(!completion_callback_.is_null());
|
| - if (operation_runner_)
|
| - operation_runner_->OnOperationCompleted(target_paths_);
|
| - completion_callback_.Run(status);
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::DidWrite(
|
| - const WriteCallback& callback,
|
| - base::PlatformFileError result,
|
| - int64 bytes,
|
| - bool complete) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (!complete) {
|
| - callback.Run(result, bytes, complete);
|
| - return;
|
| - }
|
| - if (operation_runner_)
|
| - operation_runner_->OnOperationCompleted(target_paths_);
|
| - callback.Run(result, bytes, complete);
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::OnCancelled() {
|
| - DCHECK(!completion_callback_.is_null());
|
| - completion_callback_.Run(base::PLATFORM_FILE_ERROR_ABORT);
|
| - delete inflight_operation_;
|
| -}
|
| -
|
| -void SyncableFileSystemOperation::AbortOperation(
|
| - const StatusCallback& callback,
|
| - base::PlatformFileError error) {
|
| - callback.Run(error);
|
| - delete inflight_operation_;
|
| - delete this;
|
| -}
|
| -
|
| -} // namespace sync_file_system
|
|
|