| Index: chrome/browser/chromeos/drive/fileapi_worker.cc
|
| diff --git a/chrome/browser/chromeos/drive/fileapi_worker.cc b/chrome/browser/chromeos/drive/fileapi_worker.cc
|
| deleted file mode 100644
|
| index 54c1a829b82fe98a80e048ef86581e22d989a2d9..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/drive/fileapi_worker.cc
|
| +++ /dev/null
|
| @@ -1,366 +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/fileapi_worker.h"
|
| -
|
| -#include "base/files/file_path.h"
|
| -#include "base/logging.h"
|
| -#include "base/task_runner_util.h"
|
| -#include "base/threading/sequenced_worker_pool.h"
|
| -#include "chrome/browser/chromeos/drive/drive.pb.h"
|
| -#include "chrome/browser/chromeos/drive/file_errors.h"
|
| -#include "chrome/browser/chromeos/drive/file_system_interface.h"
|
| -#include "chrome/browser/chromeos/drive/file_system_util.h"
|
| -#include "chrome/browser/chromeos/drive/resource_entry_conversion.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "webkit/common/fileapi/directory_entry.h"
|
| -
|
| -using content::BrowserThread;
|
| -
|
| -namespace drive {
|
| -namespace fileapi_internal {
|
| -namespace {
|
| -
|
| -// The summary of opening mode is:
|
| -// - PLATFORM_FILE_OPEN: Open the existing file. Fail if not exists.
|
| -// - PLATFORM_FILE_CREATE: Create the file if not exists. Fail if exists.
|
| -// - PLATFORM_FILE_OPEN_ALWAYS: Open the existing file. Create a new file
|
| -// if not exists.
|
| -// - PLATFORM_FILE_CREATE_ALWAYS: Create a new file if not exists. If exists
|
| -// open it with truncate.
|
| -// - PLATFORM_FILE_OPEN_TRUNCATE: Open the existing file with truncate.
|
| -// Fail if not exists.
|
| -OpenMode GetOpenMode(int file_flag) {
|
| - if (file_flag & (base::PLATFORM_FILE_OPEN |
|
| - base::PLATFORM_FILE_OPEN_TRUNCATED))
|
| - return OPEN_FILE;
|
| -
|
| - if (file_flag & base::PLATFORM_FILE_CREATE)
|
| - return CREATE_FILE;
|
| -
|
| - DCHECK(file_flag & (base::PLATFORM_FILE_OPEN_ALWAYS |
|
| - base::PLATFORM_FILE_CREATE_ALWAYS));
|
| - return OPEN_OR_CREATE_FILE;
|
| -}
|
| -
|
| -// Runs |callback| with the File::Error converted from |error|.
|
| -void RunStatusCallbackByFileError(const StatusCallback& callback,
|
| - FileError error) {
|
| - callback.Run(FileErrorToBaseFileError(error));
|
| -}
|
| -
|
| -// Runs |callback| with arguments converted from |error| and |entry|.
|
| -void RunGetFileInfoCallback(const GetFileInfoCallback& callback,
|
| - FileError error,
|
| - scoped_ptr<ResourceEntry> entry) {
|
| - if (error != FILE_ERROR_OK) {
|
| - callback.Run(FileErrorToBaseFileError(error), base::File::Info());
|
| - return;
|
| - }
|
| -
|
| - DCHECK(entry);
|
| - base::File::Info file_info;
|
| - ConvertResourceEntryToFileInfo(*entry, &file_info);
|
| - callback.Run(base::File::FILE_OK, file_info);
|
| -}
|
| -
|
| -// Runs |callback| with arguments converted from |error| and |resource_entries|.
|
| -void RunReadDirectoryCallback(
|
| - const ReadDirectoryCallback& callback,
|
| - FileError error,
|
| - scoped_ptr<ResourceEntryVector> resource_entries) {
|
| - if (error != FILE_ERROR_OK) {
|
| - callback.Run(FileErrorToBaseFileError(error),
|
| - std::vector<fileapi::DirectoryEntry>(), false);
|
| - return;
|
| - }
|
| -
|
| - DCHECK(resource_entries);
|
| -
|
| - std::vector<fileapi::DirectoryEntry> entries;
|
| - // Convert drive files to File API's directory entry.
|
| - entries.reserve(resource_entries->size());
|
| - for (size_t i = 0; i < resource_entries->size(); ++i) {
|
| - const ResourceEntry& resource_entry = (*resource_entries)[i];
|
| - fileapi::DirectoryEntry entry;
|
| - entry.name = resource_entry.base_name();
|
| -
|
| - const PlatformFileInfoProto& file_info = resource_entry.file_info();
|
| - entry.is_directory = file_info.is_directory();
|
| - entry.size = file_info.size();
|
| - entry.last_modified_time =
|
| - base::Time::FromInternalValue(file_info.last_modified());
|
| - entries.push_back(entry);
|
| - }
|
| -
|
| - callback.Run(base::File::FILE_OK, entries, false);
|
| -}
|
| -
|
| -// Runs |callback| with arguments based on |error|, |local_path| and |entry|.
|
| -void RunCreateSnapshotFileCallback(const CreateSnapshotFileCallback& callback,
|
| - FileError error,
|
| - const base::FilePath& local_path,
|
| - scoped_ptr<ResourceEntry> entry) {
|
| - if (error != FILE_ERROR_OK) {
|
| - callback.Run(
|
| - FileErrorToBaseFileError(error),
|
| - base::File::Info(), base::FilePath(),
|
| - webkit_blob::ScopedFile::ScopeOutPolicy());
|
| - return;
|
| - }
|
| -
|
| - DCHECK(entry);
|
| -
|
| - // When reading file, last modified time specified in file info will be
|
| - // compared to the last modified time of the local version of the drive file.
|
| - // Since those two values don't generally match (last modification time on the
|
| - // drive server vs. last modification time of the local, downloaded file), so
|
| - // we have to opt out from this check. We do this by unsetting last_modified
|
| - // value in the file info passed to the CreateSnapshot caller.
|
| - base::File::Info file_info;
|
| - ConvertResourceEntryToFileInfo(*entry, &file_info);
|
| - file_info.last_modified = base::Time();
|
| -
|
| - // If the file is a hosted document, a temporary JSON file is created to
|
| - // represent the document. The JSON file is not cached and its lifetime
|
| - // is managed by ShareableFileReference.
|
| - webkit_blob::ScopedFile::ScopeOutPolicy scope_out_policy =
|
| - entry->file_specific_info().is_hosted_document() ?
|
| - webkit_blob::ScopedFile::DELETE_ON_SCOPE_OUT :
|
| - webkit_blob::ScopedFile::DONT_DELETE_ON_SCOPE_OUT;
|
| -
|
| - callback.Run(base::File::FILE_OK, file_info, local_path, scope_out_policy);
|
| -}
|
| -
|
| -// Runs |callback| with arguments converted from |error| and |local_path|.
|
| -void RunCreateWritableSnapshotFileCallback(
|
| - const CreateWritableSnapshotFileCallback& callback,
|
| - FileError error,
|
| - const base::FilePath& local_path,
|
| - const base::Closure& close_callback) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - callback.Run(FileErrorToBaseFileError(error), local_path, close_callback);
|
| -}
|
| -
|
| -// Runs |callback| with |error| and |platform_file|.
|
| -void RunOpenFileCallback(const OpenFileCallback& callback,
|
| - const base::Closure& close_callback,
|
| - base::File::Error* error,
|
| - base::PlatformFile platform_file) {
|
| - callback.Run(*error, platform_file, close_callback);
|
| -}
|
| -
|
| -// Part of OpenFile(). Called after FileSystem::OpenFile().
|
| -void OpenFileAfterFileSystemOpenFile(int file_flags,
|
| - const OpenFileCallback& callback,
|
| - FileError error,
|
| - const base::FilePath& local_path,
|
| - const base::Closure& close_callback) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| -
|
| - if (error != FILE_ERROR_OK) {
|
| - callback.Run(FileErrorToBaseFileError(error),
|
| - base::kInvalidPlatformFileValue,
|
| - base::Closure());
|
| - return;
|
| - }
|
| -
|
| - // Here, the file should be at |local_path|, but there may be timing issue.
|
| - // Because the file is managed by Drive file system, so, in order to avoid
|
| - // unexpected file creation, CREATE, OPEN_ALWAYS and CREATE_ALWAYS are
|
| - // translated into OPEN or OPEN_TRUNCATED, here. Keep OPEN and OPEN_TRUNCATED
|
| - // as is.
|
| - if (file_flags & (base::PLATFORM_FILE_CREATE |
|
| - base::PLATFORM_FILE_OPEN_ALWAYS)) {
|
| - file_flags &= ~(base::PLATFORM_FILE_CREATE |
|
| - base::PLATFORM_FILE_OPEN_ALWAYS);
|
| - file_flags |= base::PLATFORM_FILE_OPEN;
|
| - } else if (file_flags & base::PLATFORM_FILE_CREATE_ALWAYS) {
|
| - file_flags &= ~base::PLATFORM_FILE_CREATE_ALWAYS;
|
| - file_flags |= base::PLATFORM_FILE_OPEN_TRUNCATED;
|
| - }
|
| -
|
| - // Cache file prepared for modification is available. Open it locally.
|
| - // TODO(rvargas): Convert this to base::File.
|
| - base::File::Error* result =
|
| - new base::File::Error(base::File::FILE_ERROR_FAILED);
|
| - bool posted = base::PostTaskAndReplyWithResult(
|
| - BrowserThread::GetBlockingPool(), FROM_HERE,
|
| - base::Bind(&base::CreatePlatformFile,
|
| - local_path, file_flags, static_cast<bool*>(NULL),
|
| - reinterpret_cast<base::PlatformFileError*>(result)),
|
| - base::Bind(&RunOpenFileCallback,
|
| - callback, close_callback, base::Owned(result)));
|
| - DCHECK(posted);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -void RunFileSystemCallback(
|
| - const FileSystemGetter& file_system_getter,
|
| - const base::Callback<void(FileSystemInterface*)>& callback,
|
| - const base::Closure& on_error_callback) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - FileSystemInterface* file_system = file_system_getter.Run();
|
| -
|
| - if (!file_system) {
|
| - if (!on_error_callback.is_null())
|
| - on_error_callback.Run();
|
| - return;
|
| - }
|
| -
|
| - callback.Run(file_system);
|
| -}
|
| -
|
| -void GetFileInfo(const base::FilePath& file_path,
|
| - const GetFileInfoCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - file_system->GetResourceEntry(
|
| - file_path,
|
| - base::Bind(&RunGetFileInfoCallback, callback));
|
| -}
|
| -
|
| -void Copy(const base::FilePath& src_file_path,
|
| - const base::FilePath& dest_file_path,
|
| - bool preserve_last_modified,
|
| - const StatusCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - file_system->Copy(src_file_path, dest_file_path, preserve_last_modified,
|
| - base::Bind(&RunStatusCallbackByFileError, callback));
|
| -}
|
| -
|
| -void Move(const base::FilePath& src_file_path,
|
| - const base::FilePath& dest_file_path,
|
| - bool preserve_last_modified,
|
| - const StatusCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - file_system->Move(src_file_path, dest_file_path, preserve_last_modified,
|
| - base::Bind(&RunStatusCallbackByFileError, callback));
|
| -}
|
| -
|
| -void CopyInForeignFile(const base::FilePath& src_foreign_file_path,
|
| - const base::FilePath& dest_file_path,
|
| - const StatusCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - file_system->TransferFileFromLocalToRemote(
|
| - src_foreign_file_path, dest_file_path,
|
| - base::Bind(&RunStatusCallbackByFileError, callback));
|
| -}
|
| -
|
| -void ReadDirectory(const base::FilePath& file_path,
|
| - const ReadDirectoryCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - file_system->ReadDirectory(file_path,
|
| - base::Bind(&RunReadDirectoryCallback, callback));
|
| -}
|
| -
|
| -void Remove(const base::FilePath& file_path,
|
| - bool is_recursive,
|
| - const StatusCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - file_system->Remove(file_path, is_recursive,
|
| - base::Bind(&RunStatusCallbackByFileError, callback));
|
| -}
|
| -
|
| -void CreateDirectory(const base::FilePath& file_path,
|
| - bool is_exclusive,
|
| - bool is_recursive,
|
| - const StatusCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - file_system->CreateDirectory(
|
| - file_path, is_exclusive, is_recursive,
|
| - base::Bind(&RunStatusCallbackByFileError, callback));
|
| -}
|
| -
|
| -void CreateFile(const base::FilePath& file_path,
|
| - bool is_exclusive,
|
| - const StatusCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - file_system->CreateFile(file_path, is_exclusive,
|
| - std::string(), // no mime type; guess from file_path
|
| - base::Bind(&RunStatusCallbackByFileError, callback));
|
| -}
|
| -
|
| -void Truncate(const base::FilePath& file_path,
|
| - int64 length,
|
| - const StatusCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - file_system->TruncateFile(
|
| - file_path, length,
|
| - base::Bind(&RunStatusCallbackByFileError, callback));
|
| -}
|
| -
|
| -void CreateSnapshotFile(const base::FilePath& file_path,
|
| - const CreateSnapshotFileCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - file_system->GetFile(file_path,
|
| - base::Bind(&RunCreateSnapshotFileCallback, callback));
|
| -}
|
| -
|
| -void CreateWritableSnapshotFile(
|
| - const base::FilePath& file_path,
|
| - const CreateWritableSnapshotFileCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - file_system->OpenFile(
|
| - file_path,
|
| - OPEN_FILE,
|
| - std::string(), // no mime type; we never create a new file here.
|
| - base::Bind(&RunCreateWritableSnapshotFileCallback, callback));
|
| -}
|
| -
|
| -void OpenFile(const base::FilePath& file_path,
|
| - int file_flags,
|
| - const OpenFileCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| -
|
| - // Returns an error if any unsupported flag is found.
|
| - if (file_flags & ~(base::PLATFORM_FILE_OPEN |
|
| - base::PLATFORM_FILE_CREATE |
|
| - base::PLATFORM_FILE_OPEN_ALWAYS |
|
| - base::PLATFORM_FILE_CREATE_ALWAYS |
|
| - base::PLATFORM_FILE_OPEN_TRUNCATED |
|
| - base::PLATFORM_FILE_READ |
|
| - base::PLATFORM_FILE_WRITE |
|
| - base::PLATFORM_FILE_WRITE_ATTRIBUTES |
|
| - base::PLATFORM_FILE_APPEND)) {
|
| - base::MessageLoopProxy::current()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(callback,
|
| - base::File::FILE_ERROR_FAILED,
|
| - base::kInvalidPlatformFileValue,
|
| - base::Closure()));
|
| - return;
|
| - }
|
| -
|
| - file_system->OpenFile(
|
| - file_path, GetOpenMode(file_flags),
|
| - std::string(), // no mime type; guess from file_path
|
| - base::Bind(&OpenFileAfterFileSystemOpenFile, file_flags, callback));
|
| -}
|
| -
|
| -void TouchFile(const base::FilePath& file_path,
|
| - const base::Time& last_access_time,
|
| - const base::Time& last_modified_time,
|
| - const StatusCallback& callback,
|
| - FileSystemInterface* file_system) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - file_system->TouchFile(file_path, last_access_time, last_modified_time,
|
| - base::Bind(&RunStatusCallbackByFileError, callback));
|
| -
|
| -}
|
| -
|
| -} // namespace fileapi_internal
|
| -} // namespace drive
|
|
|