summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorrvargas@chromium.org <rvargas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-13 21:39:48 +0000
committerrvargas@chromium.org <rvargas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-13 21:39:48 +0000
commitfc5a31379d223ece719e45fd8bf329988e59a1d9 (patch)
treefc8cb045b809559ad04c32b45d14e3efa90322b3 /webkit
parentfdaf9d1bed089dfafdae4d623d78e49aacff1e24 (diff)
downloadchromium_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.cc27
-rw-r--r--webkit/browser/fileapi/file_system_file_util.h13
-rw-r--r--webkit/browser/fileapi/local_file_util.cc25
-rw-r--r--webkit/browser/fileapi/local_file_util.h10
-rw-r--r--webkit/browser/fileapi/native_file_util.h3
-rw-r--r--webkit/browser/fileapi/obfuscated_file_util.cc219
-rw-r--r--webkit/browser/fileapi/obfuscated_file_util.h45
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);