diff options
author | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-29 07:10:05 +0000 |
---|---|---|
committer | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-29 07:10:05 +0000 |
commit | 25b6979911b3fbcc4e6ee95a47db88c4d5a5930f (patch) | |
tree | b60353dc6c32a5571ee865025e10713fb1c1c2f9 /webkit/fileapi/file_system_file_util.h | |
parent | 3de8e61f52c73ab6435bb96abbacd862ad68c8ac (diff) | |
download | chromium_src-25b6979911b3fbcc4e6ee95a47db88c4d5a5930f.zip chromium_src-25b6979911b3fbcc4e6ee95a47db88c4d5a5930f.tar.gz chromium_src-25b6979911b3fbcc4e6ee95a47db88c4d5a5930f.tar.bz2 |
Introduce AsyncFileUtil and deprecate FileSystemFileUtilProxy
In LocalFileSystemOperation we used to use a synchronous implementation
(implemented as FileSystemFileUtil) to perform subtasks (e.g. file_util::Copy
type operation), but it's not always natural to have synchronous
implementation depending on filesystem types. For example async interface
works much better if we need to talk to a remote server or a device.
This patch introduces an async version of FileUtil, AsyncFileUtil,
and replaces FileSystemFileUtil+Proxy implementation with it.
After this patch, each filesystem can choose either:
- implement synchronous FileSystemFileUtil and use it with AsyncFileUtilAdapter, or
- directly implement asynchronous AsyncFileUtil
BUG=154835
TEST=existing tests
Review URL: https://codereview.chromium.org/12035049
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@179299 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/fileapi/file_system_file_util.h')
-rw-r--r-- | webkit/fileapi/file_system_file_util.h | 98 |
1 files changed, 21 insertions, 77 deletions
diff --git a/webkit/fileapi/file_system_file_util.h b/webkit/fileapi/file_system_file_util.h index 8c05c1d7..5d4b72c 100644 --- a/webkit/fileapi/file_system_file_util.h +++ b/webkit/fileapi/file_system_file_util.h @@ -8,20 +8,17 @@ #include "base/file_path.h" #include "base/memory/scoped_ptr.h" #include "base/platform_file.h" -#include "webkit/fileapi/file_system_url.h" +#include "webkit/fileapi/file_snapshot_policy.h" #include "webkit/storage/webkit_storage_export.h" namespace base { class Time; } -namespace webkit_blob { -class ShareableFileReference; -} - namespace fileapi { class FileSystemOperationContext; +class FileSystemURL; // A file utility interface that provides basic file utility methods for // FileSystem API. @@ -47,20 +44,6 @@ class WEBKIT_STORAGE_EXPORT FileSystemFileUtil { virtual bool IsDirectory() = 0; }; - // A policy flag for CreateSnapshotFile. - enum SnapshotFilePolicy { - kSnapshotFileUnknown, - - // The implementation just uses the local file as the snapshot file. - // The FileAPI backend does nothing on the returned file. - kSnapshotFileLocal, - - // The implementation returns a temporary file as the snapshot file. - // The FileAPI backend takes care of the lifetime of the returned file - // and will delete when the last reference of the file is dropped. - kSnapshotFileTemporary, - }; - class WEBKIT_STORAGE_EXPORT EmptyFileEnumerator : public AbstractFileEnumerator { virtual FilePath Next() OVERRIDE; @@ -72,11 +55,8 @@ class WEBKIT_STORAGE_EXPORT FileSystemFileUtil { virtual ~FileSystemFileUtil() {} // Creates or opens a file with the given flags. - // If PLATFORM_FILE_CREATE is set in |file_flags| it always tries to create - // a new file at the given |url| and calls back with - // PLATFORM_FILE_ERROR_FILE_EXISTS if the |url| already exists. - // - // This is used only for Pepper/NaCL File API. + // See header comments for AsyncFileUtil::CreateOrOpen() for more details. + // This is used only by Pepper/NaCL File API. virtual base::PlatformFileError CreateOrOpen( FileSystemOperationContext* context, const FileSystemURL& url, @@ -85,7 +65,6 @@ class WEBKIT_STORAGE_EXPORT FileSystemFileUtil { bool* created) = 0; // Closes the given file handle. - // // This is used only for Pepper/NaCL File API. virtual base::PlatformFileError Close( FileSystemOperationContext* context, @@ -93,19 +72,13 @@ class WEBKIT_STORAGE_EXPORT FileSystemFileUtil { // Ensures that the given |url| exist. This creates a empty new file // at |url| if the |url| does not exist. - // If a new file han not existed and is created at the |url|, - // |created| is set true and |error code| - // is set PLATFORM_FILE_OK. - // If the file already exists, |created| is set false and |error code| - // is set PLATFORM_FILE_OK. - // If the file hasn't existed but it couldn't be created for some other - // reasons, |created| is set false and |error code| indicates the error. + // See header comments for AsyncFileUtil::EnsureFileExists() for more details. virtual base::PlatformFileError EnsureFileExists( FileSystemOperationContext* context, const FileSystemURL& url, bool* created) = 0; - // Creates directory at given url. It's an error to create - // if |exclusive| is true and dir already exists. + // Creates directory at given url. + // See header comments for AsyncFileUtil::CreateDirectory() for more details. virtual base::PlatformFileError CreateDirectory( FileSystemOperationContext* context, const FileSystemURL& url, @@ -113,6 +86,7 @@ class WEBKIT_STORAGE_EXPORT FileSystemFileUtil { bool recursive) = 0; // Retrieves the information about a file. + // See header comments for AsyncFileUtil::GetFileInfo() for more details. virtual base::PlatformFileError GetFileInfo( FileSystemOperationContext* context, const FileSystemURL& url, @@ -126,6 +100,9 @@ class WEBKIT_STORAGE_EXPORT FileSystemFileUtil { // // The supplied context must remain valid at least lifetime of the enumerator // instance. + // + // TODO(kinuko): Drop recursive flag so that each FileUtil no longer + // needs to implement recursive logic. virtual scoped_ptr<AbstractFileEnumerator> CreateFileEnumerator( FileSystemOperationContext* context, const FileSystemURL& root_url, @@ -139,17 +116,16 @@ class WEBKIT_STORAGE_EXPORT FileSystemFileUtil { const FileSystemURL& file_system_url, FilePath* local_file_path) = 0; - // Updates the file metadata information. Unlike posix's touch, it does - // not create a file even if |url| does not exist, but instead fails - // with PLATFORM_FILE_ERROR_NOT_FOUND. + // Updates the file metadata information. + // See header comments for AsyncFileUtil::Touch() for more details. virtual base::PlatformFileError Touch( FileSystemOperationContext* context, const FileSystemURL& url, const base::Time& last_access_time, const base::Time& last_modified_time) = 0; - // Truncates a file to the given length. If |length| is greater than the - // current length of the file, the file will be extended with zeroes. + // Truncates a file to the given length. + // See header comments for AsyncFileUtil::Truncate() for more details. virtual base::PlatformFileError Truncate( FileSystemOperationContext* context, const FileSystemURL& url, @@ -174,62 +150,30 @@ class WEBKIT_STORAGE_EXPORT FileSystemFileUtil { bool copy) = 0; // Copies in a single file from a different filesystem. - // - // This returns: - // - PLATFORM_FILE_ERROR_NOT_FOUND if |src_file_path| - // or the parent directory of |dest_url| does not exist. - // - PLATFORM_FILE_ERROR_INVALID_OPERATION if |dest_url| exists and - // is not a file. - // - PLATFORM_FILE_ERROR_FAILED if |dest_url| does not exist and - // its parent path is a file. - // + // See header comments for AsyncFileUtil::CopyInForeignFile() for + // more details. virtual base::PlatformFileError CopyInForeignFile( FileSystemOperationContext* context, const FilePath& src_file_path, const FileSystemURL& dest_url) = 0; // Deletes a single file. - // - // This returns: - // - PLATFORM_FILE_ERROR_NOT_FOUND if |url| does not exist. - // - PLATFORM_FILE_ERROR_NOT_A_FILE if |url| is not a file. - // + // See header comments for AsyncFileUtil::DeleteFile() for more details. virtual base::PlatformFileError DeleteFile( FileSystemOperationContext* context, const FileSystemURL& url) = 0; // Deletes a single empty directory. - // - // This returns: - // - PLATFORM_FILE_ERROR_NOT_FOUND if |url| does not exist. - // - PLATFORM_FILE_ERROR_NOT_A_DIRECTORY if |url| is not a directory. - // - PLATFORM_FILE_ERROR_NOT_EMPTY if |url| is not empty. - // + // See header comments for AsyncFileUtil::DeleteDirectory() for more details. virtual base::PlatformFileError DeleteDirectory( FileSystemOperationContext* context, const FileSystemURL& url) = 0; // Creates a local snapshot file for a given |url| and returns the // metadata and platform path of the snapshot file via |callback|. - // In regular filesystem cases the implementation may simply return - // the metadata of the file itself (as well as GetMetadata does), - // while in non-regular filesystem case the backend may create a - // temporary snapshot file which holds the file data and return - // the metadata of the temporary file. - // - // |file_info| is the metadata of the snapshot file created. - // |platform_path| is the path to the snapshot file created. - // |policy| should indicate the policy how the fileapi backend - // should handle the returned file. - // - // This returns: - // - PLATFORM_FILE_ERROR_NOT_FOUND if |url| does not exist. - // - PLATFORM_FILE_ERROR_NOT_A_FILE if |url| is not a file. - // - // The field values of |file_info| are undefined (implementation - // dependent) in error cases, and the caller should always - // check the return code. // + // See header comments for AsyncFileUtil::CreateSnapshotFile() for + // more details. virtual base::PlatformFileError CreateSnapshotFile( FileSystemOperationContext* context, const FileSystemURL& url, |