diff options
author | rvargas@chromium.org <rvargas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-13 21:39:48 +0000 |
---|---|---|
committer | rvargas@chromium.org <rvargas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-13 21:39:48 +0000 |
commit | fc5a31379d223ece719e45fd8bf329988e59a1d9 (patch) | |
tree | fc8cb045b809559ad04c32b45d14e3efa90322b3 /webkit | |
parent | fdaf9d1bed089dfafdae4d623d78e49aacff1e24 (diff) | |
download | chromium_src-fc5a31379d223ece719e45fd8bf329988e59a1d9.zip chromium_src-fc5a31379d223ece719e45fd8bf329988e59a1d9.tar.gz chromium_src-fc5a31379d223ece719e45fd8bf329988e59a1d9.tar.bz2 |
Remove PlatformFile from fileapi::FileSystemFileUtil
BUG=322664
Review URL: https://codereview.chromium.org/274903002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@270214 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/browser/fileapi/async_file_util_adapter.cc | 27 | ||||
-rw-r--r-- | webkit/browser/fileapi/file_system_file_util.h | 13 | ||||
-rw-r--r-- | webkit/browser/fileapi/local_file_util.cc | 25 | ||||
-rw-r--r-- | webkit/browser/fileapi/local_file_util.h | 10 | ||||
-rw-r--r-- | webkit/browser/fileapi/native_file_util.h | 3 | ||||
-rw-r--r-- | webkit/browser/fileapi/obfuscated_file_util.cc | 219 | ||||
-rw-r--r-- | webkit/browser/fileapi/obfuscated_file_util.h | 45 |
7 files changed, 154 insertions, 188 deletions
diff --git a/webkit/browser/fileapi/async_file_util_adapter.cc b/webkit/browser/fileapi/async_file_util_adapter.cc index b66cf02..20463d1 100644 --- a/webkit/browser/fileapi/async_file_util_adapter.cc +++ b/webkit/browser/fileapi/async_file_util_adapter.cc @@ -133,11 +133,22 @@ void ReadDirectoryHelper(FileSystemFileUtil* file_util, } void RunCreateOrOpenCallback( + FileSystemOperationContext* context, const AsyncFileUtil::CreateOrOpenCallback& callback, - base::File::Error result, - base::PassPlatformFile file, - bool created) { - callback.Run(result, file, base::Closure()); + base::File file) { + // TODO(rvargas): Remove PlatformFile from AsyncFileUtil. + base::File::Error error; + base::PlatformFile platform_file; + if (file.IsValid()) { + error = base::File::FILE_OK; + platform_file = file.TakePlatformFile(); + } else { + error = file.error_details(); + platform_file = base::kInvalidPlatformFileValue; + } + + callback.Run(error, base::PassPlatformFile(&platform_file), base::Closure()); + base::File closer(platform_file); } } // namespace @@ -157,14 +168,12 @@ void AsyncFileUtilAdapter::CreateOrOpen( int file_flags, const CreateOrOpenCallback& callback) { FileSystemOperationContext* context_ptr = context.release(); - const bool success = base::FileUtilProxy::RelayCreateOrOpen( + base::PostTaskAndReplyWithResult( context_ptr->task_runner(), + FROM_HERE, Bind(&FileSystemFileUtil::CreateOrOpen, Unretained(sync_file_util_.get()), context_ptr, url, file_flags), - Bind(&FileSystemFileUtil::Close, Unretained(sync_file_util_.get()), - base::Owned(context_ptr)), - Bind(&RunCreateOrOpenCallback, callback)); - DCHECK(success); + Bind(&RunCreateOrOpenCallback, base::Owned(context_ptr), callback)); } void AsyncFileUtilAdapter::EnsureFileExists( diff --git a/webkit/browser/fileapi/file_system_file_util.h b/webkit/browser/fileapi/file_system_file_util.h index a9ee035..7dff6f4 100644 --- a/webkit/browser/fileapi/file_system_file_util.h +++ b/webkit/browser/fileapi/file_system_file_util.h @@ -8,7 +8,6 @@ #include "base/files/file.h" #include "base/files/file_path.h" #include "base/memory/scoped_ptr.h" -#include "base/platform_file.h" #include "webkit/browser/fileapi/file_system_operation.h" #include "webkit/browser/webkit_storage_browser_export.h" #include "webkit/common/blob/scoped_file.h" @@ -61,18 +60,10 @@ class WEBKIT_STORAGE_BROWSER_EXPORT FileSystemFileUtil { // Creates or opens a file with the given flags. // See header comments for AsyncFileUtil::CreateOrOpen() for more details. // This is used only by Pepper/NaCl File API. - virtual base::File::Error CreateOrOpen( + virtual base::File CreateOrOpen( FileSystemOperationContext* context, const FileSystemURL& url, - int file_flags, - base::PlatformFile* file_handle, - bool* created) = 0; - - // Closes the given file handle. - // This is used only for Pepper/NaCl File API. - virtual base::File::Error Close( - FileSystemOperationContext* context, - base::PlatformFile file) = 0; + int file_flags) = 0; // Ensures that the given |url| exist. This creates a empty new file // at |url| if the |url| does not exist. diff --git a/webkit/browser/fileapi/local_file_util.cc b/webkit/browser/fileapi/local_file_util.cc index 90d45e3..3b823aa 100644 --- a/webkit/browser/fileapi/local_file_util.cc +++ b/webkit/browser/fileapi/local_file_util.cc @@ -76,33 +76,18 @@ LocalFileUtil::LocalFileUtil() {} LocalFileUtil::~LocalFileUtil() {} -base::File::Error LocalFileUtil::CreateOrOpen( +base::File LocalFileUtil::CreateOrOpen( FileSystemOperationContext* context, - const FileSystemURL& url, int file_flags, - base::PlatformFile* file_handle, bool* created) { - *created = false; + const FileSystemURL& url, int file_flags) { base::FilePath file_path; base::File::Error error = GetLocalFilePath(context, url, &file_path); if (error != base::File::FILE_OK) - return error; + return base::File(error); // Disallow opening files in symlinked paths. if (base::IsLink(file_path)) - return base::File::FILE_ERROR_NOT_FOUND; + return base::File(base::File::FILE_ERROR_NOT_FOUND); - // TODO(rvargas): make FileSystemFileUtil use base::File. - base::File file = NativeFileUtil::CreateOrOpen(file_path, file_flags); - if (!file.IsValid()) - return file.error_details(); - - *created = file.created(); - *file_handle = file.TakePlatformFile(); - return base::File::FILE_OK; -} - -base::File::Error LocalFileUtil::Close(FileSystemOperationContext* context, - base::PlatformFile file) { - base::File auto_closed(file); - return base::File::FILE_OK; + return NativeFileUtil::CreateOrOpen(file_path, file_flags); } base::File::Error LocalFileUtil::EnsureFileExists( diff --git a/webkit/browser/fileapi/local_file_util.h b/webkit/browser/fileapi/local_file_util.h index b5220b0..18199ad 100644 --- a/webkit/browser/fileapi/local_file_util.h +++ b/webkit/browser/fileapi/local_file_util.h @@ -8,7 +8,6 @@ #include "base/compiler_specific.h" #include "base/files/file_path.h" #include "base/memory/scoped_ptr.h" -#include "base/platform_file.h" #include "webkit/browser/fileapi/file_system_file_util.h" #include "webkit/browser/webkit_storage_browser_export.h" @@ -30,15 +29,10 @@ class WEBKIT_STORAGE_BROWSER_EXPORT LocalFileUtil LocalFileUtil(); virtual ~LocalFileUtil(); - virtual base::File::Error CreateOrOpen( + virtual base::File CreateOrOpen( FileSystemOperationContext* context, const FileSystemURL& url, - int file_flags, - base::PlatformFile* file_handle, - bool* created) OVERRIDE; - virtual base::File::Error Close( - FileSystemOperationContext* context, - base::PlatformFile file) OVERRIDE; + int file_flags) OVERRIDE; virtual base::File::Error EnsureFileExists( FileSystemOperationContext* context, const FileSystemURL& url, bool* created) OVERRIDE; diff --git a/webkit/browser/fileapi/native_file_util.h b/webkit/browser/fileapi/native_file_util.h index c6aeec4..bd87581 100644 --- a/webkit/browser/fileapi/native_file_util.h +++ b/webkit/browser/fileapi/native_file_util.h @@ -38,8 +38,7 @@ class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE NativeFileUtil { static CopyOrMoveMode CopyOrMoveModeForDestination( const FileSystemURL& dest_url, bool copy); - static base::File CreateOrOpen(const base::FilePath& path, - int file_flags); + static base::File CreateOrOpen(const base::FilePath& path, int file_flags); static base::File::Error EnsureFileExists(const base::FilePath& path, bool* created); static base::File::Error CreateDirectory(const base::FilePath& path, diff --git a/webkit/browser/fileapi/obfuscated_file_util.cc b/webkit/browser/fileapi/obfuscated_file_util.cc index d720ca0..450ea18 100644 --- a/webkit/browser/fileapi/obfuscated_file_util.cc +++ b/webkit/browser/fileapi/obfuscated_file_util.cc @@ -105,8 +105,6 @@ enum IsolatedOriginStatus { } // namespace -using base::PlatformFile; - class ObfuscatedFileEnumerator : public FileSystemFileUtil::AbstractFileEnumerator { public: @@ -273,27 +271,16 @@ ObfuscatedFileUtil::~ObfuscatedFileUtil() { DropDatabases(); } -base::File::Error ObfuscatedFileUtil::CreateOrOpen( +base::File ObfuscatedFileUtil::CreateOrOpen( FileSystemOperationContext* context, - const FileSystemURL& url, int file_flags, - PlatformFile* file_handle, bool* created) { - base::File::Error error = CreateOrOpenInternal(context, url, file_flags, - file_handle, created); - if (*file_handle != base::kInvalidPlatformFileValue && - file_flags & base::PLATFORM_FILE_WRITE && + const FileSystemURL& url, int file_flags) { + base::File file = CreateOrOpenInternal(context, url, file_flags); + if (file.IsValid() && file_flags & base::PLATFORM_FILE_WRITE && context->quota_limit_type() == quota::kQuotaLimitTypeUnlimited && sandbox_delegate_) { - DCHECK_EQ(base::File::FILE_OK, error); sandbox_delegate_->StickyInvalidateUsageCache(url.origin(), url.type()); } - return error; -} - -base::File::Error ObfuscatedFileUtil::Close( - FileSystemOperationContext* context, - base::PlatformFile file) { - base::File auto_closed(file); - return base::File::FILE_OK; + return file.Pass(); } base::File::Error ObfuscatedFileUtil::EnsureFileExists( @@ -328,8 +315,8 @@ base::File::Error ObfuscatedFileUtil::EnsureFileExists( int64 growth = UsageForPath(file_info.name.size()); if (!AllocateQuota(context, growth)) return base::File::FILE_ERROR_NO_SPACE; - base::File::Error error = CreateFile( - context, base::FilePath(), url, &file_info, 0, NULL); + base::File::Error error = CreateFile(context, base::FilePath(), url, + &file_info); if (created && base::File::FILE_OK == error) { *created = true; UpdateUsage(context, url, growth); @@ -595,8 +582,7 @@ base::File::Error ObfuscatedFileUtil::CopyOrMoveFile( fileapi::NativeFileUtil::CopyOrMoveModeForDestination( dest_url, true /* copy */)); } else { // non-overwrite - error = CreateFile(context, src_local_path, - dest_url, &dest_file_info, 0, NULL); + error = CreateFile(context, src_local_path, dest_url, &dest_file_info); } } else { if (overwrite) { @@ -701,8 +687,7 @@ base::File::Error ObfuscatedFileUtil::CopyInForeignFile( fileapi::NativeFileUtil::CopyOrMoveModeForDestination(dest_url, true /* copy */)); } else { - error = CreateFile(context, src_file_path, - dest_url, &dest_file_info, 0, NULL); + error = CreateFile(context, src_file_path, dest_url, &dest_file_info); } if (error != base::File::FILE_OK) @@ -1050,36 +1035,60 @@ base::File::Error ObfuscatedFileUtil::GetFileInfoInternal( return error; } -base::File::Error ObfuscatedFileUtil::CreateFile( +base::File ObfuscatedFileUtil::CreateAndOpenFile( FileSystemOperationContext* context, - const base::FilePath& src_file_path, const FileSystemURL& dest_url, - FileInfo* dest_file_info, int file_flags, PlatformFile* handle) { - if (handle) - *handle = base::kInvalidPlatformFileValue; + FileInfo* dest_file_info, int file_flags) { SandboxDirectoryDatabase* db = GetDirectoryDatabase(dest_url, true); - base::File::Error error = base::File::FILE_OK; - base::FilePath root = GetDirectoryForURL(dest_url, false, &error); + base::FilePath root, dest_local_path; + base::File::Error error = GenerateNewLocalPath(db, context, dest_url, &root, + &dest_local_path); if (error != base::File::FILE_OK) - return error; + return base::File(error); + + if (base::PathExists(dest_local_path)) { + if (!base::DeleteFile(dest_local_path, true /* recursive */)) + return base::File(base::File::FILE_ERROR_FAILED); + LOG(WARNING) << "A stray file detected"; + InvalidateUsageCache(context, dest_url.origin(), dest_url.type()); + } + + base::File file = NativeFileUtil::CreateOrOpen(dest_local_path, file_flags); + if (!file.IsValid()) + return file.Pass(); + + if (!file.created()) { + file.Close(); + base::DeleteFile(dest_local_path, false /* recursive */); + return base::File(base::File::FILE_ERROR_FAILED); + } + + error = CommitCreateFile(root, dest_local_path, db, dest_file_info); + if (error != base::File::FILE_OK) { + file.Close(); + base::DeleteFile(dest_local_path, false /* recursive */); + return base::File(error); + } + + return file.Pass(); +} + +base::File::Error ObfuscatedFileUtil::CreateFile( + FileSystemOperationContext* context, + const base::FilePath& src_file_path, + const FileSystemURL& dest_url, + FileInfo* dest_file_info) { + SandboxDirectoryDatabase* db = GetDirectoryDatabase(dest_url, true); - base::FilePath dest_local_path; - error = GenerateNewLocalPath(db, context, dest_url, &dest_local_path); + base::FilePath root, dest_local_path; + base::File::Error error = GenerateNewLocalPath(db, context, dest_url, &root, + &dest_local_path); if (error != base::File::FILE_OK) return error; bool created = false; - if (!src_file_path.empty()) { - DCHECK(!file_flags); - DCHECK(!handle); - error = NativeFileUtil::CopyOrMoveFile( - src_file_path, dest_local_path, - FileSystemOperation::OPTION_NONE, - fileapi::NativeFileUtil::CopyOrMoveModeForDestination(dest_url, - true /* copy */)); - created = true; - } else { + if (src_file_path.empty()) { if (base::PathExists(dest_local_path)) { if (!base::DeleteFile(dest_local_path, true /* recursive */)) return base::File::FILE_ERROR_FAILED; @@ -1087,54 +1096,39 @@ base::File::Error ObfuscatedFileUtil::CreateFile( InvalidateUsageCache(context, dest_url.origin(), dest_url.type()); } - if (handle) { - // TODO(rvargas): Remove PlatformFile from this code. - base::File file = - NativeFileUtil::CreateOrOpen(dest_local_path, file_flags); - if (file.IsValid()) { - created = file.created(); - *handle = file.TakePlatformFile(); - error = base::File::FILE_OK; - } else { - error = file.error_details(); - } - // If this succeeds, we must close handle on any subsequent error. - } else { - DCHECK(!file_flags); // file_flags is only used by CreateOrOpen. - error = NativeFileUtil::EnsureFileExists(dest_local_path, &created); - } + error = NativeFileUtil::EnsureFileExists(dest_local_path, &created); + } else { + error = NativeFileUtil::CopyOrMoveFile( + src_file_path, dest_local_path, + FileSystemOperation::OPTION_NONE, + fileapi::NativeFileUtil::CopyOrMoveModeForDestination(dest_url, + true /* copy */)); + created = true; } if (error != base::File::FILE_OK) return error; - - if (!created) { - if (handle) { - DCHECK_NE(base::kInvalidPlatformFileValue, *handle); - base::ClosePlatformFile(*handle); - base::DeleteFile(dest_local_path, false /* recursive */); - *handle = base::kInvalidPlatformFileValue; - } + if (!created) return base::File::FILE_ERROR_FAILED; - } + return CommitCreateFile(root, dest_local_path, db, dest_file_info); +} + +base::File::Error ObfuscatedFileUtil::CommitCreateFile( + const base::FilePath& root, + const base::FilePath& local_path, + SandboxDirectoryDatabase* db, + FileInfo* dest_file_info) { // This removes the root, including the trailing slash, leaving a relative // path. dest_file_info->data_path = base::FilePath( - dest_local_path.value().substr(root.value().length() + 1)); + local_path.value().substr(root.value().length() + 1)); FileId file_id; - error = db->AddFileInfo(*dest_file_info, &file_id); - if (error != base::File::FILE_OK) { - if (handle) { - DCHECK_NE(base::kInvalidPlatformFileValue, *handle); - base::ClosePlatformFile(*handle); - *handle = base::kInvalidPlatformFileValue; - } - base::DeleteFile(dest_local_path, false /* recursive */); + base::File::Error error = db->AddFileInfo(*dest_file_info, &file_id); + if (error != base::File::FILE_OK) return error; - } - TouchDirectory(db, dest_file_info->parent_id); + TouchDirectory(db, dest_file_info->parent_id); return base::File::FILE_OK; } @@ -1316,6 +1310,7 @@ base::File::Error ObfuscatedFileUtil::GenerateNewLocalPath( SandboxDirectoryDatabase* db, FileSystemOperationContext* context, const FileSystemURL& url, + base::FilePath* root, base::FilePath* local_path) { DCHECK(local_path); int64 number; @@ -1323,13 +1318,13 @@ base::File::Error ObfuscatedFileUtil::GenerateNewLocalPath( return base::File::FILE_ERROR_FAILED; base::File::Error error = base::File::FILE_OK; - base::FilePath new_local_path = GetDirectoryForURL(url, false, &error); + *root = GetDirectoryForURL(url, false, &error); if (error != base::File::FILE_OK) - return base::File::FILE_ERROR_FAILED; + return error; // We use the third- and fourth-to-last digits as the directory. int64 directory_number = number % 10000 / 100; - new_local_path = new_local_path.AppendASCII( + base::FilePath new_local_path = root->AppendASCII( base::StringPrintf("%02" PRId64, directory_number)); error = NativeFileUtil::CreateDirectory( @@ -1342,47 +1337,43 @@ base::File::Error ObfuscatedFileUtil::GenerateNewLocalPath( return base::File::FILE_OK; } -base::File::Error ObfuscatedFileUtil::CreateOrOpenInternal( +base::File ObfuscatedFileUtil::CreateOrOpenInternal( FileSystemOperationContext* context, - const FileSystemURL& url, int file_flags, - PlatformFile* file_handle, bool* created) { - DCHECK(!(file_flags & (base::PLATFORM_FILE_DELETE_ON_CLOSE | - base::PLATFORM_FILE_HIDDEN | base::PLATFORM_FILE_EXCLUSIVE_READ | - base::PLATFORM_FILE_EXCLUSIVE_WRITE))); + const FileSystemURL& url, int file_flags) { + DCHECK(!(file_flags & (base::File::FLAG_DELETE_ON_CLOSE | + base::File::FLAG_HIDDEN | base::File::FLAG_EXCLUSIVE_READ | + base::File::FLAG_EXCLUSIVE_WRITE))); SandboxDirectoryDatabase* db = GetDirectoryDatabase(url, true); if (!db) - return base::File::FILE_ERROR_FAILED; + return base::File(base::File::FILE_ERROR_FAILED); FileId file_id; if (!db->GetFileWithPath(url.path(), &file_id)) { // The file doesn't exist. - if (!(file_flags & (base::PLATFORM_FILE_CREATE | - base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_OPEN_ALWAYS))) - return base::File::FILE_ERROR_NOT_FOUND; + if (!(file_flags & (base::File::FLAG_CREATE | + base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_OPEN_ALWAYS))) { + return base::File(base::File::FILE_ERROR_NOT_FOUND); + } FileId parent_id; - if (!db->GetFileWithPath(VirtualPath::DirName(url.path()), - &parent_id)) - return base::File::FILE_ERROR_NOT_FOUND; + if (!db->GetFileWithPath(VirtualPath::DirName(url.path()), &parent_id)) + return base::File(base::File::FILE_ERROR_NOT_FOUND); FileInfo file_info; InitFileInfo(&file_info, parent_id, VirtualPath::BaseName(url.path()).value()); int64 growth = UsageForPath(file_info.name.size()); if (!AllocateQuota(context, growth)) - return base::File::FILE_ERROR_NO_SPACE; - base::File::Error error = CreateFile( - context, base::FilePath(), - url, &file_info, file_flags, file_handle); - if (created && base::File::FILE_OK == error) { - *created = true; + return base::File(base::File::FILE_ERROR_NO_SPACE); + base::File file = CreateAndOpenFile(context, url, &file_info, file_flags); + if (file.IsValid()) { UpdateUsage(context, url, growth); context->change_observers()->Notify( &FileChangeObserver::OnCreateFile, MakeTuple(url)); } - return error; + return file.Pass(); } - if (file_flags & base::PLATFORM_FILE_CREATE) - return base::File::FILE_ERROR_EXISTS; + if (file_flags & base::File::FLAG_CREATE) + return base::File(base::File::FILE_ERROR_EXISTS); base::File::Info platform_file_info; base::FilePath local_path; @@ -1390,19 +1381,18 @@ base::File::Error ObfuscatedFileUtil::CreateOrOpenInternal( base::File::Error error = GetFileInfoInternal( db, context, url, file_id, &file_info, &platform_file_info, &local_path); if (error != base::File::FILE_OK) - return error; + return base::File(error); if (file_info.is_directory()) - return base::File::FILE_ERROR_NOT_A_FILE; + return base::File(base::File::FILE_ERROR_NOT_A_FILE); int64 delta = 0; - if (file_flags & (base::PLATFORM_FILE_CREATE_ALWAYS | - base::PLATFORM_FILE_OPEN_TRUNCATED)) { + if (file_flags & (base::File::FLAG_CREATE_ALWAYS | + base::File::FLAG_OPEN_TRUNCATED)) { // The file exists and we're truncating. delta = -platform_file_info.size; AllocateQuota(context, delta); } - // TODO(rvargas): make FileSystemFileUtil use base::File. base::File file = NativeFileUtil::CreateOrOpen(local_path, file_flags); if (!file.IsValid()) { error = file.error_details(); @@ -1411,21 +1401,18 @@ base::File::Error ObfuscatedFileUtil::CreateOrOpenInternal( // TODO(tzik): Delete database entry after ensuring the file lost. InvalidateUsageCache(context, url.origin(), url.type()); LOG(WARNING) << "Lost a backing file."; - error = base::File::FILE_ERROR_FAILED; + return base::File(base::File::FILE_ERROR_FAILED); } - return error; + return file.Pass(); } - *created = file.created(); - *file_handle = file.TakePlatformFile(); - // If truncating we need to update the usage. if (delta) { UpdateUsage(context, url, delta); context->change_observers()->Notify( &FileChangeObserver::OnModifyFile, MakeTuple(url)); } - return base::File::FILE_OK; + return file.Pass(); } bool ObfuscatedFileUtil::HasIsolatedStorage(const GURL& origin) { diff --git a/webkit/browser/fileapi/obfuscated_file_util.h b/webkit/browser/fileapi/obfuscated_file_util.h index fbd460e..ada4e6f 100644 --- a/webkit/browser/fileapi/obfuscated_file_util.h +++ b/webkit/browser/fileapi/obfuscated_file_util.h @@ -16,7 +16,6 @@ #include "base/files/file_util_proxy.h" #include "base/gtest_prod_util.h" #include "base/memory/scoped_ptr.h" -#include "base/platform_file.h" #include "webkit/browser/fileapi/file_system_file_util.h" #include "webkit/browser/fileapi/file_system_url.h" #include "webkit/browser/fileapi/sandbox_directory_database.h" @@ -113,15 +112,10 @@ class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE ObfuscatedFileUtil virtual ~ObfuscatedFileUtil(); // FileSystemFileUtil overrides. - virtual base::File::Error CreateOrOpen( + virtual base::File CreateOrOpen( FileSystemOperationContext* context, const FileSystemURL& url, - int file_flags, - base::PlatformFile* file_handle, - bool* created) OVERRIDE; - virtual base::File::Error Close( - FileSystemOperationContext* context, - base::PlatformFile file) OVERRIDE; + int file_flags) OVERRIDE; virtual base::File::Error EnsureFileExists( FileSystemOperationContext* context, const FileSystemURL& url, bool* created) OVERRIDE; @@ -269,20 +263,28 @@ class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE ObfuscatedFileUtil // database. |dest_file_info| is an in-out parameter. Supply the name and // parent_id; data_path is ignored. On success, data_path will // always be set to the relative path [from the root of the type-specific - // filesystem directory] of a NEW backing file, and handle, if supplied, will - // hold open PlatformFile for the backing file, which the caller is - // responsible for closing. If you supply a path in |source_path|, it will be - // used as a source from which to COPY data. - // Caveat: do not supply handle if you're also supplying a data path. It was - // easier not to support this, and no code has needed it so far, so it will - // DCHECK and handle will hold base::kInvalidPlatformFileValue. + // filesystem directory] of a NEW backing file. Returns the new file. + base::File CreateAndOpenFile( + FileSystemOperationContext* context, + const FileSystemURL& dest_url, + FileInfo* dest_file_info, + int file_flags); + + // The same as CreateAndOpenFile except that a file is not returned and if a + // path is provided in |source_path|, it will be used as a source from which + // to COPY data. base::File::Error CreateFile( FileSystemOperationContext* context, const base::FilePath& source_file_path, const FileSystemURL& dest_url, - FileInfo* dest_file_info, - int file_flags, - base::PlatformFile* handle); + FileInfo* dest_file_info); + + // Updates |db| and |dest_file_info| at the end of creating a new file. + base::File::Error CommitCreateFile( + const base::FilePath& root, + const base::FilePath& local_path, + SandboxDirectoryDatabase* db, + FileInfo* dest_file_info); // This converts from a relative path [as is stored in the FileInfo.data_path // field] to an absolute platform path that can be given to the native @@ -321,14 +323,13 @@ class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE ObfuscatedFileUtil SandboxDirectoryDatabase* db, FileSystemOperationContext* context, const FileSystemURL& url, + base::FilePath* root, base::FilePath* local_path); - base::File::Error CreateOrOpenInternal( + base::File CreateOrOpenInternal( FileSystemOperationContext* context, const FileSystemURL& url, - int file_flags, - base::PlatformFile* file_handle, - bool* created); + int file_flags); bool HasIsolatedStorage(const GURL& origin); |