Index: chrome/browser/chromeos/drive/async_file_util.cc |
diff --git a/chrome/browser/chromeos/drive/async_file_util.cc b/chrome/browser/chromeos/drive/async_file_util.cc |
deleted file mode 100644 |
index 9349bbf6bd5cd8f4bb0bd0e0bd4335e0d125395a..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/drive/async_file_util.cc |
+++ /dev/null |
@@ -1,437 +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 "chrome/browser/chromeos/drive/async_file_util.h" |
- |
-#include "base/callback.h" |
-#include "base/files/file_path.h" |
-#include "base/logging.h" |
-#include "base/platform_file.h" |
-#include "base/threading/sequenced_worker_pool.h" |
-#include "chrome/browser/chromeos/drive/file_system_util.h" |
-#include "chrome/browser/chromeos/drive/fileapi_worker.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "google_apis/drive/task_util.h" |
-#include "webkit/browser/fileapi/file_system_operation_context.h" |
-#include "webkit/browser/fileapi/file_system_url.h" |
-#include "webkit/common/blob/shareable_file_reference.h" |
- |
-using content::BrowserThread; |
- |
-namespace drive { |
-namespace internal { |
-namespace { |
- |
-// Posts fileapi_internal::RunFileSystemCallback to UI thread. |
-// This function must be called on IO thread. |
-// The |on_error_callback| will be called (on error case) on IO thread. |
-void PostFileSystemCallback( |
- const fileapi_internal::FileSystemGetter& file_system_getter, |
- const base::Callback<void(FileSystemInterface*)>& function, |
- const base::Closure& on_error_callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- BrowserThread::PostTask( |
- BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(&fileapi_internal::RunFileSystemCallback, |
- file_system_getter, function, |
- on_error_callback.is_null() ? |
- base::Closure() : |
- base::Bind(&google_apis::RunTaskOnThread, |
- base::MessageLoopProxy::current(), |
- on_error_callback))); |
-} |
- |
-// Runs CreateOrOpenFile callback based on the given |error| and |file|. |
-void RunCreateOrOpenFileCallback( |
- const AsyncFileUtil::FileSystemGetter& file_system_getter, |
- const base::FilePath& file_path, |
- const AsyncFileUtil::CreateOrOpenCallback& callback, |
- base::File::Error error, |
- base::PlatformFile file, |
- const base::Closure& close_callback_on_ui_thread) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- // It is necessary to make a closure, which runs on file closing here. |
- // It will be provided as a FileSystem::OpenFileCallback's argument later. |
- // (crbug.com/259184). |
- callback.Run( |
- error, base::PassPlatformFile(&file), |
- base::Bind(&google_apis::RunTaskOnThread, |
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
- close_callback_on_ui_thread)); |
-} |
- |
-// Runs CreateOrOpenFile when the error happens. |
-void RunCreateOrOpenFileCallbackOnError( |
- const AsyncFileUtil::CreateOrOpenCallback& callback, |
- base::File::Error error) { |
- // Because the |callback| takes PassPlatformFile as its argument, and |
- // it is necessary to guarantee the pointer passed to PassPlatformFile is |
- // alive during the |callback| invocation, here we prepare a thin adapter |
- // to have PlatformFile on stack frame. |
- base::PlatformFile file = base::kInvalidPlatformFileValue; |
- callback.Run(error, base::PassPlatformFile(&file), base::Closure()); |
-} |
- |
-// Runs EnsureFileExistsCallback based on the given |error|. |
-void RunEnsureFileExistsCallback( |
- const AsyncFileUtil::EnsureFileExistsCallback& callback, |
- base::File::Error error) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- // Remember if the file is actually created or not. |
- bool created = (error == base::File::FILE_OK); |
- |
- // File::FILE_ERROR_EXISTS is not an actual error here. |
- if (error == base::File::FILE_ERROR_EXISTS) |
- error = base::File::FILE_OK; |
- |
- callback.Run(error, created); |
-} |
- |
-// Runs |callback| with the arguments based on the given arguments. |
-void RunCreateSnapshotFileCallback( |
- const AsyncFileUtil::CreateSnapshotFileCallback& callback, |
- base::File::Error error, |
- const base::File::Info& file_info, |
- const base::FilePath& local_path, |
- webkit_blob::ScopedFile::ScopeOutPolicy scope_out_policy) { |
- // ShareableFileReference is thread *unsafe* class. So it is necessary to |
- // create the instance (by invoking GetOrCreate) on IO thread, though |
- // most drive file system related operations run on UI thread. |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- scoped_refptr<webkit_blob::ShareableFileReference> file_reference = |
- webkit_blob::ShareableFileReference::GetOrCreate(webkit_blob::ScopedFile( |
- local_path, |
- scope_out_policy, |
- BrowserThread::GetBlockingPool())); |
- callback.Run(error, file_info, local_path, file_reference); |
-} |
- |
-} // namespace |
- |
-AsyncFileUtil::AsyncFileUtil(const FileSystemGetter& file_system_getter) |
- : file_system_getter_(file_system_getter) { |
-} |
- |
-AsyncFileUtil::~AsyncFileUtil() { |
-} |
- |
-void AsyncFileUtil::CreateOrOpen( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& url, |
- int file_flags, |
- const CreateOrOpenCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath file_path = util::ExtractDrivePathFromFileSystemUrl(url); |
- if (file_path.empty()) { |
- base::PlatformFile platform_file = base::kInvalidPlatformFileValue; |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND, |
- base::PassPlatformFile(&platform_file), |
- base::Closure()); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind(&fileapi_internal::OpenFile, |
- file_path, file_flags, |
- google_apis::CreateRelayCallback( |
- base::Bind(&RunCreateOrOpenFileCallback, |
- file_system_getter_, file_path, callback))), |
- base::Bind(&RunCreateOrOpenFileCallbackOnError, |
- callback, base::File::FILE_ERROR_FAILED)); |
-} |
- |
-void AsyncFileUtil::EnsureFileExists( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& url, |
- const EnsureFileExistsCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath file_path = util::ExtractDrivePathFromFileSystemUrl(url); |
- if (file_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND, false); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind(&fileapi_internal::CreateFile, |
- file_path, true /* is_exlusive */, |
- google_apis::CreateRelayCallback( |
- base::Bind(&RunEnsureFileExistsCallback, callback))), |
- base::Bind(callback, base::File::FILE_ERROR_FAILED, false)); |
-} |
- |
-void AsyncFileUtil::CreateDirectory( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& url, |
- bool exclusive, |
- bool recursive, |
- const StatusCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath file_path = util::ExtractDrivePathFromFileSystemUrl(url); |
- if (file_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind(&fileapi_internal::CreateDirectory, |
- file_path, exclusive, recursive, |
- google_apis::CreateRelayCallback(callback)), |
- base::Bind(callback, base::File::FILE_ERROR_FAILED)); |
-} |
- |
-void AsyncFileUtil::GetFileInfo( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& url, |
- const GetFileInfoCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath file_path = util::ExtractDrivePathFromFileSystemUrl(url); |
- if (file_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND, base::File::Info()); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind(&fileapi_internal::GetFileInfo, |
- file_path, google_apis::CreateRelayCallback(callback)), |
- base::Bind(callback, base::File::FILE_ERROR_FAILED, |
- base::File::Info())); |
-} |
- |
-void AsyncFileUtil::ReadDirectory( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& url, |
- const ReadDirectoryCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath file_path = util::ExtractDrivePathFromFileSystemUrl(url); |
- if (file_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND, EntryList(), false); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind(&fileapi_internal::ReadDirectory, |
- file_path, google_apis::CreateRelayCallback(callback)), |
- base::Bind(callback, base::File::FILE_ERROR_FAILED, |
- EntryList(), false)); |
-} |
- |
-void AsyncFileUtil::Touch( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& url, |
- const base::Time& last_access_time, |
- const base::Time& last_modified_time, |
- const StatusCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath file_path = util::ExtractDrivePathFromFileSystemUrl(url); |
- if (file_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind(&fileapi_internal::TouchFile, |
- file_path, last_access_time, last_modified_time, |
- google_apis::CreateRelayCallback(callback)), |
- base::Bind(callback, base::File::FILE_ERROR_FAILED)); |
-} |
- |
-void AsyncFileUtil::Truncate( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& url, |
- int64 length, |
- const StatusCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath file_path = util::ExtractDrivePathFromFileSystemUrl(url); |
- if (file_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind(&fileapi_internal::Truncate, |
- file_path, length, google_apis::CreateRelayCallback(callback)), |
- base::Bind(callback, base::File::FILE_ERROR_FAILED)); |
-} |
- |
-void AsyncFileUtil::CopyFileLocal( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& src_url, |
- const fileapi::FileSystemURL& dest_url, |
- CopyOrMoveOption option, |
- const CopyFileProgressCallback& progress_callback, |
- const StatusCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath src_path = util::ExtractDrivePathFromFileSystemUrl(src_url); |
- base::FilePath dest_path = util::ExtractDrivePathFromFileSystemUrl(dest_url); |
- if (src_path.empty() || dest_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind( |
- &fileapi_internal::Copy, |
- src_path, dest_path, |
- option == fileapi::FileSystemOperation::OPTION_PRESERVE_LAST_MODIFIED, |
- google_apis::CreateRelayCallback(callback)), |
- base::Bind(callback, base::File::FILE_ERROR_FAILED)); |
-} |
- |
-void AsyncFileUtil::MoveFileLocal( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& src_url, |
- const fileapi::FileSystemURL& dest_url, |
- CopyOrMoveOption option, |
- const StatusCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath src_path = util::ExtractDrivePathFromFileSystemUrl(src_url); |
- base::FilePath dest_path = util::ExtractDrivePathFromFileSystemUrl(dest_url); |
- if (src_path.empty() || dest_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind( |
- &fileapi_internal::Move, |
- src_path, dest_path, |
- option == fileapi::FileSystemOperation::OPTION_PRESERVE_LAST_MODIFIED, |
- google_apis::CreateRelayCallback(callback)), |
- base::Bind(callback, base::File::FILE_ERROR_FAILED)); |
-} |
- |
-void AsyncFileUtil::CopyInForeignFile( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const base::FilePath& src_file_path, |
- const fileapi::FileSystemURL& dest_url, |
- const StatusCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath dest_path = util::ExtractDrivePathFromFileSystemUrl(dest_url); |
- if (dest_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind(&fileapi_internal::CopyInForeignFile, |
- src_file_path, dest_path, |
- google_apis::CreateRelayCallback(callback)), |
- base::Bind(callback, base::File::FILE_ERROR_FAILED)); |
-} |
- |
-void AsyncFileUtil::DeleteFile( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& url, |
- const StatusCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath file_path = util::ExtractDrivePathFromFileSystemUrl(url); |
- if (file_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind(&fileapi_internal::Remove, |
- file_path, false /* not recursive */, |
- google_apis::CreateRelayCallback(callback)), |
- base::Bind(callback, base::File::FILE_ERROR_FAILED)); |
-} |
- |
-void AsyncFileUtil::DeleteDirectory( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& url, |
- const StatusCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath file_path = util::ExtractDrivePathFromFileSystemUrl(url); |
- if (file_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind(&fileapi_internal::Remove, |
- file_path, false /* not recursive */, |
- google_apis::CreateRelayCallback(callback)), |
- base::Bind(callback, base::File::FILE_ERROR_FAILED)); |
-} |
- |
-void AsyncFileUtil::DeleteRecursively( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& url, |
- const StatusCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath file_path = util::ExtractDrivePathFromFileSystemUrl(url); |
- if (file_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind(&fileapi_internal::Remove, |
- file_path, true /* recursive */, |
- google_apis::CreateRelayCallback(callback)), |
- base::Bind(callback, base::File::FILE_ERROR_FAILED)); |
-} |
- |
-void AsyncFileUtil::CreateSnapshotFile( |
- scoped_ptr<fileapi::FileSystemOperationContext> context, |
- const fileapi::FileSystemURL& url, |
- const CreateSnapshotFileCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- base::FilePath file_path = util::ExtractDrivePathFromFileSystemUrl(url); |
- if (file_path.empty()) { |
- callback.Run(base::File::FILE_ERROR_NOT_FOUND, |
- base::File::Info(), |
- base::FilePath(), |
- scoped_refptr<webkit_blob::ShareableFileReference>()); |
- return; |
- } |
- |
- PostFileSystemCallback( |
- file_system_getter_, |
- base::Bind(&fileapi_internal::CreateSnapshotFile, |
- file_path, |
- google_apis::CreateRelayCallback( |
- base::Bind(&RunCreateSnapshotFileCallback, callback))), |
- base::Bind(callback, |
- base::File::FILE_ERROR_FAILED, |
- base::File::Info(), |
- base::FilePath(), |
- scoped_refptr<webkit_blob::ShareableFileReference>())); |
-} |
- |
-} // namespace internal |
-} // namespace drive |