Index: webkit/browser/fileapi/file_system_operation_runner.h |
diff --git a/webkit/browser/fileapi/file_system_operation_runner.h b/webkit/browser/fileapi/file_system_operation_runner.h |
index cd30d7b5d1dc212ee16e347c990413ab4df434f7..783f9a3d87df0c9deb0816186b544dcb109c759d 100644 |
--- a/webkit/browser/fileapi/file_system_operation_runner.h |
+++ b/webkit/browser/fileapi/file_system_operation_runner.h |
@@ -1,322 +1,5 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Copyright 2014 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. |
-#ifndef WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_OPERATION_RUNNER_H_ |
-#define WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_OPERATION_RUNNER_H_ |
- |
-#include <map> |
-#include <set> |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/id_map.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/memory/weak_ptr.h" |
-#include "webkit/browser/blob/blob_data_handle.h" |
-#include "webkit/browser/fileapi/file_system_operation.h" |
-#include "webkit/browser/fileapi/file_system_url.h" |
-#include "webkit/browser/storage_browser_export.h" |
- |
-namespace net { |
-class URLRequestContext; |
-} |
- |
-namespace storage { |
- |
-class FileSystemURL; |
-class FileSystemContext; |
- |
-// A central interface for running FileSystem API operations. |
-// All operation methods take callback and returns OperationID, which is |
-// an integer value which can be used for cancelling an operation. |
-// All operation methods return kErrorOperationID if running (posting) an |
-// operation fails, in addition to dispatching the callback with an error |
-// code (therefore in most cases the caller does not need to check the |
-// returned operation ID). |
-class STORAGE_EXPORT FileSystemOperationRunner |
- : public base::SupportsWeakPtr<FileSystemOperationRunner> { |
- public: |
- typedef FileSystemOperation::GetMetadataCallback GetMetadataCallback; |
- typedef FileSystemOperation::ReadDirectoryCallback ReadDirectoryCallback; |
- typedef FileSystemOperation::SnapshotFileCallback SnapshotFileCallback; |
- typedef FileSystemOperation::StatusCallback StatusCallback; |
- typedef FileSystemOperation::WriteCallback WriteCallback; |
- typedef FileSystemOperation::OpenFileCallback OpenFileCallback; |
- typedef FileSystemOperation::CopyProgressCallback CopyProgressCallback; |
- typedef FileSystemOperation::CopyFileProgressCallback |
- CopyFileProgressCallback; |
- typedef FileSystemOperation::CopyOrMoveOption CopyOrMoveOption; |
- |
- typedef int OperationID; |
- |
- virtual ~FileSystemOperationRunner(); |
- |
- // Cancels all inflight operations. |
- void Shutdown(); |
- |
- // Creates a file at |url|. If |exclusive| is true, an error is raised |
- // in case a file is already present at the URL. |
- OperationID CreateFile(const FileSystemURL& url, |
- bool exclusive, |
- const StatusCallback& callback); |
- |
- OperationID CreateDirectory(const FileSystemURL& url, |
- bool exclusive, |
- bool recursive, |
- const StatusCallback& callback); |
- |
- // Copies a file or directory from |src_url| to |dest_url|. If |
- // |src_url| is a directory, the contents of |src_url| are copied to |
- // |dest_url| recursively. A new file or directory is created at |
- // |dest_url| as needed. |
- // For |option| and |progress_callback|, see file_system_operation.h for |
- // details. |
- OperationID Copy(const FileSystemURL& src_url, |
- const FileSystemURL& dest_url, |
- CopyOrMoveOption option, |
- const CopyProgressCallback& progress_callback, |
- const StatusCallback& callback); |
- |
- // Moves a file or directory from |src_url| to |dest_url|. A new file |
- // or directory is created at |dest_url| as needed. |
- // For |option|, see file_system_operation.h for details. |
- OperationID Move(const FileSystemURL& src_url, |
- const FileSystemURL& dest_url, |
- CopyOrMoveOption option, |
- const StatusCallback& callback); |
- |
- // Checks if a directory is present at |url|. |
- OperationID DirectoryExists(const FileSystemURL& url, |
- const StatusCallback& callback); |
- |
- // Checks if a file is present at |url|. |
- OperationID FileExists(const FileSystemURL& url, |
- const StatusCallback& callback); |
- |
- // Gets the metadata of a file or directory at |url|. |
- OperationID GetMetadata(const FileSystemURL& url, |
- const GetMetadataCallback& callback); |
- |
- // Reads contents of a directory at |url|. |
- OperationID ReadDirectory(const FileSystemURL& url, |
- const ReadDirectoryCallback& callback); |
- |
- // Removes a file or directory at |url|. If |recursive| is true, remove |
- // all files and directories under the directory at |url| recursively. |
- OperationID Remove(const FileSystemURL& url, bool recursive, |
- const StatusCallback& callback); |
- |
- // Writes contents of |blob_url| to |url| at |offset|. |
- // |url_request_context| is used to read contents in |blob|. |
- OperationID Write(const net::URLRequestContext* url_request_context, |
- const FileSystemURL& url, |
- scoped_ptr<storage::BlobDataHandle> blob, |
- int64 offset, |
- const WriteCallback& callback); |
- |
- // Truncates a file at |url| to |length|. If |length| is larger than |
- // the original file size, the file will be extended, and the extended |
- // part is filled with null bytes. |
- OperationID Truncate(const FileSystemURL& url, int64 length, |
- const StatusCallback& callback); |
- |
- // Tries to cancel the operation |id| [we support cancelling write or |
- // truncate only]. Reports failure for the current operation, then reports |
- // success for the cancel operation itself via the |callback|. |
- void Cancel(OperationID id, const StatusCallback& callback); |
- |
- // Modifies timestamps of a file or directory at |url| with |
- // |last_access_time| and |last_modified_time|. The function DOES NOT |
- // create a file unlike 'touch' command on Linux. |
- // |
- // This function is used only by Pepper as of writing. |
- OperationID TouchFile(const FileSystemURL& url, |
- const base::Time& last_access_time, |
- const base::Time& last_modified_time, |
- const StatusCallback& callback); |
- |
- // Opens a file at |url| with |file_flags|, where flags are OR'ed |
- // values of base::PlatformFileFlags. |
- // |
- // |peer_handle| is the process handle of a pepper plugin process, which |
- // is necessary for underlying IPC calls with Pepper plugins. |
- // |
- // This function is used only by Pepper as of writing. |
- OperationID OpenFile(const FileSystemURL& url, |
- int file_flags, |
- const OpenFileCallback& callback); |
- |
- // Creates a local snapshot file for a given |url| and returns the |
- // metadata and platform url of the snapshot file via |callback|. |
- // In local filesystem cases the implementation may simply return |
- // the metadata of the file itself (as well as GetMetadata does), |
- // while in remote filesystem case the backend may want to download the file |
- // into a temporary snapshot file and return the metadata of the |
- // temporary file. Or if the implementaiton already has the local cache |
- // data for |url| it can simply return the url to the cache. |
- OperationID CreateSnapshotFile(const FileSystemURL& url, |
- const SnapshotFileCallback& callback); |
- |
- // Copies in a single file from a different filesystem. |
- // |
- // This returns: |
- // - File::FILE_ERROR_NOT_FOUND if |src_file_path| |
- // or the parent directory of |dest_url| does not exist. |
- // - File::FILE_ERROR_INVALID_OPERATION if |dest_url| exists and |
- // is not a file. |
- // - File::FILE_ERROR_FAILED if |dest_url| does not exist and |
- // its parent path is a file. |
- // |
- OperationID CopyInForeignFile(const base::FilePath& src_local_disk_path, |
- const FileSystemURL& dest_url, |
- const StatusCallback& callback); |
- |
- // Removes a single file. |
- // |
- // This returns: |
- // - File::FILE_ERROR_NOT_FOUND if |url| does not exist. |
- // - File::FILE_ERROR_NOT_A_FILE if |url| is not a file. |
- // |
- OperationID RemoveFile(const FileSystemURL& url, |
- const StatusCallback& callback); |
- |
- // Removes a single empty directory. |
- // |
- // This returns: |
- // - File::FILE_ERROR_NOT_FOUND if |url| does not exist. |
- // - File::FILE_ERROR_NOT_A_DIRECTORY if |url| is not a directory. |
- // - File::FILE_ERROR_NOT_EMPTY if |url| is not empty. |
- // |
- OperationID RemoveDirectory(const FileSystemURL& url, |
- const StatusCallback& callback); |
- |
- // Copies a file from |src_url| to |dest_url|. |
- // This must be called for files that belong to the same filesystem |
- // (i.e. type() and origin() of the |src_url| and |dest_url| must match). |
- // For |option| and |progress_callback|, see file_system_operation.h for |
- // details. |
- // |
- // This returns: |
- // - File::FILE_ERROR_NOT_FOUND if |src_url| |
- // or the parent directory of |dest_url| does not exist. |
- // - File::FILE_ERROR_NOT_A_FILE if |src_url| exists but is not a file. |
- // - File::FILE_ERROR_INVALID_OPERATION if |dest_url| exists and |
- // is not a file. |
- // - File::FILE_ERROR_FAILED if |dest_url| does not exist and |
- // its parent path is a file. |
- // |
- OperationID CopyFileLocal(const FileSystemURL& src_url, |
- const FileSystemURL& dest_url, |
- CopyOrMoveOption option, |
- const CopyFileProgressCallback& progress_callback, |
- const StatusCallback& callback); |
- |
- // Moves a local file from |src_url| to |dest_url|. |
- // This must be called for files that belong to the same filesystem |
- // (i.e. type() and origin() of the |src_url| and |dest_url| must match). |
- // For |option|, see file_system_operation.h for details. |
- // |
- // This returns: |
- // - File::FILE_ERROR_NOT_FOUND if |src_url| |
- // or the parent directory of |dest_url| does not exist. |
- // - File::FILE_ERROR_NOT_A_FILE if |src_url| exists but is not a file. |
- // - File::FILE_ERROR_INVALID_OPERATION if |dest_url| exists and |
- // is not a file. |
- // - File::FILE_ERROR_FAILED if |dest_url| does not exist and |
- // its parent path is a file. |
- // |
- OperationID MoveFileLocal(const FileSystemURL& src_url, |
- const FileSystemURL& dest_url, |
- CopyOrMoveOption option, |
- const StatusCallback& callback); |
- |
- // This is called only by pepper plugin as of writing to synchronously get |
- // the underlying platform path to upload a file in the sandboxed filesystem |
- // (e.g. TEMPORARY or PERSISTENT). |
- base::File::Error SyncGetPlatformPath(const FileSystemURL& url, |
- base::FilePath* platform_path); |
- |
- private: |
- class BeginOperationScoper; |
- |
- struct OperationHandle { |
- OperationID id; |
- base::WeakPtr<BeginOperationScoper> scope; |
- |
- OperationHandle(); |
- ~OperationHandle(); |
- }; |
- |
- friend class FileSystemContext; |
- explicit FileSystemOperationRunner(FileSystemContext* file_system_context); |
- |
- void DidFinish(const OperationHandle& handle, |
- const StatusCallback& callback, |
- base::File::Error rv); |
- void DidGetMetadata(const OperationHandle& handle, |
- const GetMetadataCallback& callback, |
- base::File::Error rv, |
- const base::File::Info& file_info); |
- void DidReadDirectory(const OperationHandle& handle, |
- const ReadDirectoryCallback& callback, |
- base::File::Error rv, |
- const std::vector<DirectoryEntry>& entries, |
- bool has_more); |
- void DidWrite(const OperationHandle& handle, |
- const WriteCallback& callback, |
- base::File::Error rv, |
- int64 bytes, |
- bool complete); |
- void DidOpenFile( |
- const OperationHandle& handle, |
- const OpenFileCallback& callback, |
- base::File file, |
- const base::Closure& on_close_callback); |
- void 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); |
- |
- void OnCopyProgress( |
- const OperationHandle& handle, |
- const CopyProgressCallback& callback, |
- FileSystemOperation::CopyProgressType type, |
- const FileSystemURL& source_url, |
- const FileSystemURL& dest_url, |
- int64 size); |
- |
- void PrepareForWrite(OperationID id, const FileSystemURL& url); |
- void PrepareForRead(OperationID id, const FileSystemURL& url); |
- |
- // These must be called at the beginning and end of any async operations. |
- OperationHandle BeginOperation(FileSystemOperation* operation, |
- base::WeakPtr<BeginOperationScoper> scope); |
- void FinishOperation(OperationID id); |
- |
- // Not owned; file_system_context owns this. |
- FileSystemContext* file_system_context_; |
- |
- // IDMap<FileSystemOperation, IDMapOwnPointer> operations_; |
- IDMap<FileSystemOperation, IDMapOwnPointer> operations_; |
- |
- // We keep track of the file to be modified by each operation so that |
- // we can notify observers when we're done. |
- typedef std::map<OperationID, FileSystemURLSet> OperationToURLSet; |
- OperationToURLSet write_target_urls_; |
- |
- // Operations that are finished but not yet fire their callbacks. |
- std::set<OperationID> finished_operations_; |
- |
- // Callbacks for stray cancels whose target operation is already finished. |
- std::map<OperationID, StatusCallback> stray_cancel_callbacks_; |
- |
- DISALLOW_COPY_AND_ASSIGN(FileSystemOperationRunner); |
-}; |
- |
-} // namespace storage |
- |
-#endif // WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_OPERATION_RUNNER_H_ |
+#include "storage/browser/fileapi/file_system_operation_runner.h" |