summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authordmikurube@google.com <dmikurube@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-05 11:41:49 +0000
committerdmikurube@google.com <dmikurube@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-05 11:41:49 +0000
commit7878ecec2dc521aeb4d46071663dbf00897a2b77 (patch)
tree20ebcf685c504be36d13d9f8d78cace7bbe6b4d9 /webkit
parent3beeb9a66dac138493948f328107686688a76ff9 (diff)
downloadchromium_src-7878ecec2dc521aeb4d46071663dbf00897a2b77.zip
chromium_src-7878ecec2dc521aeb4d46071663dbf00897a2b77.tar.gz
chromium_src-7878ecec2dc521aeb4d46071663dbf00897a2b77.tar.bz2
[Refactor] to rename and re-layer the file_util stack layers.
Splits FileSystemFileUtil into two classes. 1. FileSystemFileUtil (pure virtual and non-virtual functions + functions to forward to an underlying file_util.) 2. NativeFileUtil (FileUtil for OS-native operations) Renames *FileSystemFileUtil into *FileUtil except for FileSystemFileUtil. Renames *_file_system_file_util.{cc,h} into *_file_util.{cc,h}. Renames variable *_file_system_file_util into *_file_util. BUG=none TEST=All FileAPI-related tests Review URL: http://codereview.chromium.org/7470037 Patch from Dai Mikurube <dmikurube@chromium.org>. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@99641 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/chromeos/fileapi/cros_mount_point_provider.cc8
-rw-r--r--webkit/chromeos/fileapi/cros_mount_point_provider.h8
-rw-r--r--webkit/fileapi/file_system_dir_url_request_job_unittest.cc2
-rw-r--r--webkit/fileapi/file_system_file_util.cc478
-rw-r--r--webkit/fileapi/file_system_file_util.h264
-rw-r--r--webkit/fileapi/file_system_file_util_proxy.cc63
-rw-r--r--webkit/fileapi/file_system_file_util_unittest.cc14
-rw-r--r--webkit/fileapi/file_system_mount_point_provider.h2
-rw-r--r--webkit/fileapi/file_system_operation.cc174
-rw-r--r--webkit/fileapi/file_system_operation.h8
-rw-r--r--webkit/fileapi/file_system_operation_context.cc8
-rw-r--r--webkit/fileapi/file_system_operation_context.h40
-rw-r--r--webkit/fileapi/file_system_operation_unittest.cc7
-rw-r--r--webkit/fileapi/file_system_operation_write_unittest.cc7
-rw-r--r--webkit/fileapi/file_system_path_manager.cc6
-rw-r--r--webkit/fileapi/file_system_path_manager.h2
-rw-r--r--webkit/fileapi/file_system_quota_client_unittest.cc12
-rw-r--r--webkit/fileapi/file_system_quota_unittest.cc7
-rw-r--r--webkit/fileapi/file_system_test_helper.cc5
-rw-r--r--webkit/fileapi/file_system_test_helper.h4
-rw-r--r--webkit/fileapi/file_system_url_request_job_unittest.cc4
-rw-r--r--webkit/fileapi/local_file_util.cc (renamed from webkit/fileapi/local_file_system_file_util.cc)287
-rw-r--r--webkit/fileapi/local_file_util.h (renamed from webkit/fileapi/local_file_system_file_util.h)98
-rw-r--r--webkit/fileapi/local_file_util_unittest.cc (renamed from webkit/fileapi/local_file_system_file_util_unittest.cc)34
-rw-r--r--webkit/fileapi/native_file_util.cc291
-rw-r--r--webkit/fileapi/native_file_util.h103
-rw-r--r--webkit/fileapi/obfuscated_file_util.cc (renamed from webkit/fileapi/obfuscated_file_system_file_util.cc)998
-rw-r--r--webkit/fileapi/obfuscated_file_util.h (renamed from webkit/fileapi/obfuscated_file_system_file_util.h)114
-rw-r--r--webkit/fileapi/obfuscated_file_util_unittest.cc (renamed from webkit/fileapi/obfuscated_file_system_file_util_unittest.cc)440
-rw-r--r--webkit/fileapi/quota_file_util.cc65
-rw-r--r--webkit/fileapi/quota_file_util.h14
-rw-r--r--webkit/fileapi/quota_file_util_unittest.cc1
-rw-r--r--webkit/fileapi/sandbox_mount_point_provider.cc24
-rw-r--r--webkit/fileapi/sandbox_mount_point_provider.h6
-rw-r--r--webkit/fileapi/sandbox_mount_point_provider_unittest.cc2
-rw-r--r--webkit/fileapi/webkit_fileapi.gypi10
-rw-r--r--webkit/tools/test_shell/simple_file_system.cc2
-rw-r--r--webkit/tools/test_shell/simple_file_writer.cc2
-rw-r--r--webkit/tools/test_shell/test_shell.gypi4
39 files changed, 1939 insertions, 1679 deletions
diff --git a/webkit/chromeos/fileapi/cros_mount_point_provider.cc b/webkit/chromeos/fileapi/cros_mount_point_provider.cc
index 2aee434..55b574a 100644
--- a/webkit/chromeos/fileapi/cros_mount_point_provider.cc
+++ b/webkit/chromeos/fileapi/cros_mount_point_provider.cc
@@ -17,9 +17,9 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFileSystem.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h"
#include "webkit/chromeos/fileapi/file_access_permissions.h"
-#include "webkit/fileapi/file_system_file_util.h"
#include "webkit/fileapi/file_system_path_manager.h"
#include "webkit/fileapi/file_system_util.h"
+#include "webkit/fileapi/native_file_util.h"
#include "webkit/glue/webkit_glue.h"
namespace chromeos {
@@ -42,8 +42,8 @@ CrosMountPointProvider::CrosMountPointProvider(
scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy)
: special_storage_policy_(special_storage_policy),
file_access_permissions_(new FileAccessPermissions()),
- local_file_util_(new fileapi::LocalFileSystemFileUtil(
- new fileapi::FileSystemFileUtil())) {
+ local_file_util_(
+ new fileapi::LocalFileUtil(new fileapi::NativeFileUtil())) {
for (size_t i = 0; i < arraysize(fixed_exposed_paths); i++) {
mount_point_map_.insert(std::pair<std::string, FilePath>(
std::string(fixed_exposed_paths[i].web_root_path),
@@ -178,7 +178,7 @@ std::vector<FilePath> CrosMountPointProvider::GetRootDirectories() const {
return root_dirs;
}
-fileapi::FileSystemFileUtil* CrosMountPointProvider::GetFileSystemFileUtil() {
+fileapi::FileSystemFileUtil* CrosMountPointProvider::GetFileUtil() {
return local_file_util_.get();
}
diff --git a/webkit/chromeos/fileapi/cros_mount_point_provider.h b/webkit/chromeos/fileapi/cros_mount_point_provider.h
index af7a657..2144b2f 100644
--- a/webkit/chromeos/fileapi/cros_mount_point_provider.h
+++ b/webkit/chromeos/fileapi/cros_mount_point_provider.h
@@ -1,4 +1,4 @@
- // Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -12,7 +12,7 @@
#include "base/file_path.h"
#include "base/synchronization/lock.h"
#include "webkit/fileapi/file_system_mount_point_provider.h"
-#include "webkit/fileapi/local_file_system_file_util.h"
+#include "webkit/fileapi/local_file_util.h"
#include "webkit/quota/special_storage_policy.h"
namespace fileapi {
@@ -47,7 +47,7 @@ class CrosMountPointProvider
bool create);
virtual bool IsRestrictedFileName(const FilePath& filename) const OVERRIDE;
virtual std::vector<FilePath> GetRootDirectories() const OVERRIDE;
- virtual fileapi::FileSystemFileUtil* GetFileSystemFileUtil() OVERRIDE;
+ virtual fileapi::FileSystemFileUtil* GetFileUtil() OVERRIDE;
// fileapi::ExternalFileSystemMountPointProvider overrides.
virtual void GrantFullAccessToExtension(
@@ -73,7 +73,7 @@ class CrosMountPointProvider
MountPointMap mount_point_map_;
scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy_;
scoped_ptr<FileAccessPermissions> file_access_permissions_;
- scoped_ptr<fileapi::LocalFileSystemFileUtil> local_file_util_;
+ scoped_ptr<fileapi::LocalFileUtil> local_file_util_;
DISALLOW_COPY_AND_ASSIGN(CrosMountPointProvider);
};
diff --git a/webkit/fileapi/file_system_dir_url_request_job_unittest.cc b/webkit/fileapi/file_system_dir_url_request_job_unittest.cc
index 190caa9..991d33a 100644
--- a/webkit/fileapi/file_system_dir_url_request_job_unittest.cc
+++ b/webkit/fileapi/file_system_dir_url_request_job_unittest.cc
@@ -202,7 +202,7 @@ class FileSystemDirURLRequestJobTest : public testing::Test {
FileSystemFileUtil* file_util() {
return file_system_context_->path_manager()->sandbox_provider()->
- GetFileSystemFileUtil();
+ GetFileUtil();
}
// Put the message loop at the top, so that it's the last thing deleted.
diff --git a/webkit/fileapi/file_system_file_util.cc b/webkit/fileapi/file_system_file_util.cc
index 467c38e..5daa6a6 100644
--- a/webkit/fileapi/file_system_file_util.cc
+++ b/webkit/fileapi/file_system_file_util.cc
@@ -5,9 +5,7 @@
#include "webkit/fileapi/file_system_file_util.h"
#include <stack>
-#include <vector>
-#include "base/file_util_proxy.h"
#include "base/memory/scoped_ptr.h"
#include "webkit/fileapi/file_system_operation_context.h"
@@ -28,133 +26,14 @@ bool ParentExists(FileSystemOperationContext* context,
} // namespace
-PlatformFileError FileSystemFileUtil::CreateOrOpen(
- FileSystemOperationContext* unused,
- const FilePath& file_path, int file_flags,
- PlatformFile* file_handle, bool* created) {
- if (!file_util::DirectoryExists(file_path.DirName())) {
- // If its parent does not exist, should return NOT_FOUND error.
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- }
- PlatformFileError error_code = base::PLATFORM_FILE_OK;
- *file_handle = base::CreatePlatformFile(file_path, file_flags,
- created, &error_code);
- return error_code;
-}
-
-PlatformFileError FileSystemFileUtil::Close(
- FileSystemOperationContext* unused,
- PlatformFile file_handle) {
- if (!base::ClosePlatformFile(file_handle))
- return base::PLATFORM_FILE_ERROR_FAILED;
- return base::PLATFORM_FILE_OK;
-}
-
-PlatformFileError FileSystemFileUtil::EnsureFileExists(
- FileSystemOperationContext* unused,
- const FilePath& file_path,
- bool* created) {
- if (!file_util::DirectoryExists(file_path.DirName()))
- // If its parent does not exist, should return NOT_FOUND error.
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- PlatformFileError error_code = base::PLATFORM_FILE_OK;
- // Tries to create the |file_path| exclusively. This should fail
- // with base::PLATFORM_FILE_ERROR_EXISTS if the path already exists.
- PlatformFile handle = base::CreatePlatformFile(
- file_path,
- base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_READ,
- created, &error_code);
- if (error_code == base::PLATFORM_FILE_ERROR_EXISTS) {
- // Make sure created_ is false.
- if (created)
- *created = false;
- error_code = base::PLATFORM_FILE_OK;
- }
- if (handle != base::kInvalidPlatformFileValue)
- base::ClosePlatformFile(handle);
- return error_code;
-}
-
-PlatformFileError FileSystemFileUtil::GetLocalFilePath(
- FileSystemOperationContext* context,
- const FilePath& virtual_path,
- FilePath* local_path) {
- *local_path = virtual_path;
- return base::PLATFORM_FILE_OK;
-}
-
-PlatformFileError FileSystemFileUtil::GetFileInfo(
- FileSystemOperationContext* unused,
- const FilePath& file_path,
- base::PlatformFileInfo* file_info,
- FilePath* platform_file_path) {
- if (!file_util::PathExists(file_path))
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- // TODO(rkc): Fix this hack once we have refactored file_util to handle
- // symlinks correctly.
- // http://code.google.com/p/chromium-os/issues/detail?id=15948
- if (file_util::IsLink(file_path))
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- if (!file_util::GetFileInfo(file_path, file_info))
- return base::PLATFORM_FILE_ERROR_FAILED;
- *platform_file_path = file_path;
- return base::PLATFORM_FILE_OK;
+FileSystemFileUtil::FileSystemFileUtil() {
}
-PlatformFileError FileSystemFileUtil::ReadDirectory(
- FileSystemOperationContext* unused,
- const FilePath& file_path,
- std::vector<base::FileUtilProxy::Entry>* entries) {
- // TODO(kkanetkar): Implement directory read in multiple chunks.
- if (!file_util::DirectoryExists(file_path))
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
-
- file_util::FileEnumerator file_enum(
- file_path, false, static_cast<file_util::FileEnumerator::FileType>(
- file_util::FileEnumerator::FILES |
- file_util::FileEnumerator::DIRECTORIES));
- FilePath current;
- while (!(current = file_enum.Next()).empty()) {
- base::FileUtilProxy::Entry entry;
- file_util::FileEnumerator::FindInfo info;
- file_enum.GetFindInfo(&info);
- entry.is_directory = file_enum.IsDirectory(info);
- // This will just give the entry's name instead of entire path
- // if we use current.value().
- entry.name = file_util::FileEnumerator::GetFilename(info).value();
- entry.size = file_util::FileEnumerator::GetFilesize(info);
- entry.last_modified_time =
- file_util::FileEnumerator::GetLastModifiedTime(info);
- // TODO(rkc): Fix this also once we've refactored file_util
- // http://code.google.com/p/chromium-os/issues/detail?id=15948
- // This currently just prevents a file from showing up at all
- // if it's a link, hence preventing arbitary 'read' exploits.
- if (!file_util::IsLink(file_path.Append(entry.name)))
- entries->push_back(entry);
- }
- return base::PLATFORM_FILE_OK;
+FileSystemFileUtil::FileSystemFileUtil(FileSystemFileUtil* underlying_file_util)
+ : underlying_file_util_(underlying_file_util) {
}
-PlatformFileError FileSystemFileUtil::CreateDirectory(
- FileSystemOperationContext* unused,
- const FilePath& file_path,
- bool exclusive,
- bool recursive) {
- // If parent dir of file doesn't exist.
- if (!recursive && !file_util::PathExists(file_path.DirName()))
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
-
- bool path_exists = file_util::PathExists(file_path);
- if (exclusive && path_exists)
- return base::PLATFORM_FILE_ERROR_EXISTS;
-
- // If file exists at the path.
- if (path_exists && !file_util::DirectoryExists(file_path))
- return base::PLATFORM_FILE_ERROR_EXISTS;
-
- if (!file_util::CreateDirectory(file_path))
- return base::PLATFORM_FILE_ERROR_FAILED;
- return base::PLATFORM_FILE_OK;
+FileSystemFileUtil::~FileSystemFileUtil() {
}
PlatformFileError FileSystemFileUtil::Copy(
@@ -208,36 +87,214 @@ PlatformFileError FileSystemFileUtil::Delete(
}
}
+PlatformFileError FileSystemFileUtil::CreateOrOpen(
+ FileSystemOperationContext* context,
+ const FilePath& file_path, int file_flags,
+ PlatformFile* file_handle, bool* created) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->CreateOrOpen(
+ context, file_path, file_flags, file_handle, created);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
+}
+
+PlatformFileError FileSystemFileUtil::Close(
+ FileSystemOperationContext* context,
+ PlatformFile file_handle) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->Close(context, file_handle);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
+}
+
+PlatformFileError FileSystemFileUtil::EnsureFileExists(
+ FileSystemOperationContext* context,
+ const FilePath& file_path,
+ bool* created) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->EnsureFileExists(context, file_path, created);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
+}
+
+PlatformFileError FileSystemFileUtil::CreateDirectory(
+ FileSystemOperationContext* context,
+ const FilePath& file_path,
+ bool exclusive,
+ bool recursive) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->CreateDirectory(
+ context, file_path, exclusive, recursive);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
+}
+
+PlatformFileError FileSystemFileUtil::GetFileInfo(
+ FileSystemOperationContext* context,
+ const FilePath& file_path,
+ base::PlatformFileInfo* file_info,
+ FilePath* platform_file_path) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->GetFileInfo(
+ context, file_path, file_info, platform_file_path);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
+}
+
+PlatformFileError FileSystemFileUtil::ReadDirectory(
+ FileSystemOperationContext* context,
+ const FilePath& file_path,
+ std::vector<base::FileUtilProxy::Entry>* entries) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->ReadDirectory(context, file_path, entries);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
+}
+
+FileSystemFileUtil::AbstractFileEnumerator*
+FileSystemFileUtil::CreateFileEnumerator(
+ FileSystemOperationContext* context,
+ const FilePath& root_path) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->CreateFileEnumerator(context, root_path);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return NULL;
+}
+
+PlatformFileError FileSystemFileUtil::GetLocalFilePath(
+ FileSystemOperationContext* context,
+ const FilePath& virtual_path,
+ FilePath* local_path) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->GetLocalFilePath(
+ context, virtual_path, local_path);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
+}
+
PlatformFileError FileSystemFileUtil::Touch(
- FileSystemOperationContext* unused,
+ FileSystemOperationContext* context,
const FilePath& file_path,
const base::Time& last_access_time,
const base::Time& last_modified_time) {
- if (!file_util::TouchFile(
- file_path, last_access_time, last_modified_time))
- return base::PLATFORM_FILE_ERROR_FAILED;
- return base::PLATFORM_FILE_OK;
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->Touch(
+ context, file_path, last_access_time, last_modified_time);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
}
PlatformFileError FileSystemFileUtil::Truncate(
- FileSystemOperationContext* unused,
+ FileSystemOperationContext* context,
const FilePath& file_path,
int64 length) {
- PlatformFileError error_code(base::PLATFORM_FILE_ERROR_FAILED);
- PlatformFile file =
- base::CreatePlatformFile(
- file_path,
- base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE,
- NULL,
- &error_code);
- if (error_code != base::PLATFORM_FILE_OK) {
- return error_code;
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->Truncate(context, file_path, length);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
+}
+
+
+bool FileSystemFileUtil::PathExists(
+ FileSystemOperationContext* context,
+ const FilePath& file_path) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->PathExists(context, file_path);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return false;
+}
+
+bool FileSystemFileUtil::DirectoryExists(
+ FileSystemOperationContext* context,
+ const FilePath& file_path) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->DirectoryExists(context, file_path);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return false;
+}
+
+bool FileSystemFileUtil::IsDirectoryEmpty(
+ FileSystemOperationContext* context,
+ const FilePath& file_path) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->IsDirectoryEmpty(context, file_path);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return false;
+}
+
+PlatformFileError FileSystemFileUtil::CopyOrMoveFile(
+ FileSystemOperationContext* context,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path,
+ bool copy) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->CopyOrMoveFile(
+ context, src_file_path, dest_file_path, copy);
}
- DCHECK_NE(base::kInvalidPlatformFileValue, file);
- if (!base::TruncatePlatformFile(file, length))
- error_code = base::PLATFORM_FILE_ERROR_FAILED;
- base::ClosePlatformFile(file);
- return error_code;
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
+}
+
+PlatformFileError FileSystemFileUtil::CopyInForeignFile(
+ FileSystemOperationContext* context,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->CopyInForeignFile(
+ context, src_file_path, dest_file_path);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
+}
+
+PlatformFileError FileSystemFileUtil::DeleteFile(
+ FileSystemOperationContext* context,
+ const FilePath& file_path) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->DeleteFile(context, file_path);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
+}
+
+PlatformFileError FileSystemFileUtil::DeleteSingleDirectory(
+ FileSystemOperationContext* context,
+ const FilePath& file_path) {
+ if (underlying_file_util_.get()) {
+ return underlying_file_util_->DeleteSingleDirectory(context, file_path);
+ }
+ NOTREACHED() << "Subclasses must provide implementation if they have no"
+ << "underlying_file_util";
+ return base::PLATFORM_FILE_ERROR_FAILED;
}
PlatformFileError
@@ -248,14 +305,13 @@ FileSystemFileUtil::PerformCommonCheckAndPreparationForMoveAndCopy(
bool same_file_system =
(context->src_origin_url() == context->dest_origin_url()) &&
(context->src_type() == context->dest_type());
- FileSystemFileUtil* dest_util = context->dest_file_system_file_util();
+ FileSystemFileUtil* dest_util = context->dest_file_util();
DCHECK(dest_util);
scoped_ptr<FileSystemOperationContext> local_dest_context;
FileSystemOperationContext* dest_context = NULL;
if (same_file_system) {
dest_context = context;
- DCHECK(context->src_file_system_file_util() ==
- context->dest_file_system_file_util());
+ DCHECK(context->src_file_util() == context->dest_file_util());
} else {
local_dest_context.reset(context->CreateInheritedContextForDest());
// All the single-path virtual FSFU methods expect the context information
@@ -317,35 +373,12 @@ FileSystemFileUtil::PerformCommonCheckAndPreparationForMoveAndCopy(
return base::PLATFORM_FILE_OK;
}
-PlatformFileError FileSystemFileUtil::CopyOrMoveFile(
- FileSystemOperationContext* unused,
- const FilePath& src_file_path,
- const FilePath& dest_file_path,
- bool copy) {
- if (copy) {
- if (file_util::CopyFile(src_file_path, dest_file_path))
- return base::PLATFORM_FILE_OK;
- } else {
- DCHECK(!file_util::DirectoryExists(src_file_path));
- if (file_util::Move(src_file_path, dest_file_path))
- return base::PLATFORM_FILE_OK;
- }
- return base::PLATFORM_FILE_ERROR_FAILED;
-}
-
-PlatformFileError FileSystemFileUtil::CopyInForeignFile(
- FileSystemOperationContext* context,
- const FilePath& src_file_path,
- const FilePath& dest_file_path) {
- return CopyOrMoveFile(context, src_file_path, dest_file_path, true);
-}
-
PlatformFileError FileSystemFileUtil::CopyOrMoveDirectory(
FileSystemOperationContext* context,
const FilePath& src_file_path,
const FilePath& dest_file_path,
bool copy) {
- FileSystemFileUtil* dest_util = context->dest_file_system_file_util();
+ FileSystemFileUtil* dest_util = context->dest_file_util();
// All the single-path virtual FSFU methods expect the context information to
// be in the src_* variables, not the dest_* variables, so we have to make a
// new context if we want to call them on the dest_file_path.
@@ -408,8 +441,7 @@ PlatformFileError FileSystemFileUtil::CopyOrMoveFileHelper(
// CopyOrMoveFile here is the virtual overridden member function.
if ((context->src_origin_url() == context->dest_origin_url()) &&
(context->src_type() == context->dest_type())) {
- DCHECK(context->src_file_system_file_util() ==
- context->dest_file_system_file_util());
+ DCHECK(context->src_file_util() == context->dest_file_util());
return CopyOrMoveFile(context, src_file_path, dest_file_path, copy);
}
base::PlatformFileInfo file_info;
@@ -420,45 +452,14 @@ PlatformFileError FileSystemFileUtil::CopyOrMoveFileHelper(
if (error_code != base::PLATFORM_FILE_OK)
return error_code;
- DCHECK(context->dest_file_system_file_util());
- error_code = context->dest_file_system_file_util()->CopyInForeignFile(
+ DCHECK(context->dest_file_util());
+ error_code = context->dest_file_util()->CopyInForeignFile(
context, platform_file_path, dest_file_path);
if (copy || error_code != base::PLATFORM_FILE_OK)
return error_code;
return DeleteFile(context, src_file_path);
}
-
-PlatformFileError FileSystemFileUtil::DeleteFile(
- FileSystemOperationContext* unused,
- const FilePath& file_path) {
- if (!file_util::PathExists(file_path))
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- if (file_util::DirectoryExists(file_path))
- return base::PLATFORM_FILE_ERROR_NOT_A_FILE;
- if (!file_util::Delete(file_path, false))
- return base::PLATFORM_FILE_ERROR_FAILED;
- return base::PLATFORM_FILE_OK;
-}
-
-PlatformFileError FileSystemFileUtil::DeleteSingleDirectory(
- FileSystemOperationContext* unused,
- const FilePath& file_path) {
- if (!file_util::PathExists(file_path))
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- if (!file_util::DirectoryExists(file_path)) {
- // TODO(dmikurube): Check if this error code is appropriate.
- return base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY;
- }
- if (!file_util::IsDirectoryEmpty(file_path)) {
- // TODO(dmikurube): Check if this error code is appropriate.
- return base::PLATFORM_FILE_ERROR_NOT_EMPTY;
- }
- if (!file_util::Delete(file_path, false))
- return base::PLATFORM_FILE_ERROR_FAILED;
- return base::PLATFORM_FILE_OK;
-}
-
PlatformFileError FileSystemFileUtil::DeleteDirectoryRecursive(
FileSystemOperationContext* context,
const FilePath& file_path) {
@@ -491,67 +492,4 @@ PlatformFileError FileSystemFileUtil::DeleteDirectoryRecursive(
return DeleteSingleDirectory(context, file_path);
}
-bool FileSystemFileUtil::PathExists(
- FileSystemOperationContext* unused,
- const FilePath& file_path) {
- return file_util::PathExists(file_path);
-}
-
-bool FileSystemFileUtil::DirectoryExists(
- FileSystemOperationContext* unused,
- const FilePath& file_path) {
- return file_util::DirectoryExists(file_path);
-}
-
-bool FileSystemFileUtil::IsDirectoryEmpty(
- FileSystemOperationContext* unused,
- const FilePath& file_path) {
- return file_util::IsDirectoryEmpty(file_path);
-}
-
-class FileSystemFileEnumerator
- : public FileSystemFileUtil::AbstractFileEnumerator {
- public:
- FileSystemFileEnumerator(const FilePath& root_path,
- bool recursive,
- file_util::FileEnumerator::FileType file_type)
- : file_enum_(root_path, recursive, file_type) {
- }
-
- ~FileSystemFileEnumerator() {}
-
- virtual FilePath Next() OVERRIDE;
- virtual int64 Size() OVERRIDE;
- virtual bool IsDirectory() OVERRIDE;
-
- private:
- file_util::FileEnumerator file_enum_;
- file_util::FileEnumerator::FindInfo file_util_info_;
-};
-
-FilePath FileSystemFileEnumerator::Next() {
- FilePath rv = file_enum_.Next();
- if (!rv.empty())
- file_enum_.GetFindInfo(&file_util_info_);
- return rv;
-}
-
-int64 FileSystemFileEnumerator::Size() {
- return file_util::FileEnumerator::GetFilesize(file_util_info_);
-}
-
-bool FileSystemFileEnumerator::IsDirectory() {
- return file_util::FileEnumerator::IsDirectory(file_util_info_);
-}
-
-FileSystemFileUtil::AbstractFileEnumerator*
-FileSystemFileUtil::CreateFileEnumerator(
- FileSystemOperationContext* unused,
- const FilePath& root_path) {
- return new FileSystemFileEnumerator(
- root_path, true, static_cast<file_util::FileEnumerator::FileType>(
- file_util::FileEnumerator::FILES |
- file_util::FileEnumerator::DIRECTORIES));
-}
-
} // namespace fileapi
diff --git a/webkit/fileapi/file_system_file_util.h b/webkit/fileapi/file_system_file_util.h
index 8372784..83a04c8 100644
--- a/webkit/fileapi/file_system_file_util.h
+++ b/webkit/fileapi/file_system_file_util.h
@@ -5,20 +5,11 @@
#ifndef WEBKIT_FILEAPI_FILE_SYSTEM_FILE_UTIL_H_
#define WEBKIT_FILEAPI_FILE_SYSTEM_FILE_UTIL_H_
-#include <vector>
-
-#include "base/callback.h"
#include "base/file_path.h"
-#include "base/file_util.h"
#include "base/file_util_proxy.h"
-#include "base/memory/ref_counted.h"
#include "base/platform_file.h"
-#include "base/tracked_objects.h"
-#include "webkit/fileapi/file_system_types.h"
namespace base {
-struct PlatformFileInfo;
-class MessageLoopProxy;
class Time;
}
@@ -48,84 +39,27 @@ class FileSystemOperationContext;
// PerformCommonCheckAndPreparationForMoveAndCopy and CopyOrMoveDirectory.
class FileSystemFileUtil {
public:
- FileSystemFileUtil() {}
- virtual ~FileSystemFileUtil() {}
-
- // Creates or opens a file with the given flags. It is invalid to pass NULL
- // for the callback.
- // If PLATFORM_FILE_CREATE is set in |file_flags| it always tries to create
- // a new file at the given |file_path| and calls back with
- // PLATFORM_FILE_ERROR_FILE_EXISTS if the |file_path| already exists.
- virtual PlatformFileError CreateOrOpen(
- FileSystemOperationContext* context,
- const FilePath& file_path,
- int file_flags,
- PlatformFile* file_handle,
- bool* created);
-
- // Close the given file handle.
- virtual PlatformFileError Close(
- FileSystemOperationContext* context,
- PlatformFile);
-
- // Ensures that the given |file_path| exist. This creates a empty new file
- // at |file_path| if the |file_path| does not exist.
- // If a new file han not existed and is created at the |file_path|,
- // |created| of the callback argument 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.
- virtual PlatformFileError EnsureFileExists(
- FileSystemOperationContext* context,
- const FilePath& file_path, bool* created);
+ // It will be implemented by each subclass such as FileSystemFileEnumerator.
+ class AbstractFileEnumerator {
+ public:
+ virtual ~AbstractFileEnumerator() {}
- // Maps |virtual_path| given |context| into |local_path| which represents
- // physical file location on the host OS. This may not always make sense for
- // all subclasses.
- virtual PlatformFileError GetLocalFilePath(
- FileSystemOperationContext* context,
- const FilePath& virtual_path,
- FilePath* local_path);
+ // Returns an empty string if there are no more results.
+ virtual FilePath Next() = 0;
- // Retrieves the information about a file. It is invalid to pass NULL for the
- // callback.
- virtual PlatformFileError GetFileInfo(
- FileSystemOperationContext* context,
- const FilePath& file_,
- base::PlatformFileInfo* file_info,
- FilePath* platform_path);
+ virtual int64 Size() = 0;
+ virtual bool IsDirectory() = 0;
+ };
- // Reads the filenames in |file_path|.
- virtual PlatformFileError ReadDirectory(
- FileSystemOperationContext* context,
- const FilePath& file_path,
- std::vector<base::FileUtilProxy::Entry>* entries);
+ class EmptyFileEnumerator : public AbstractFileEnumerator {
+ virtual FilePath Next() OVERRIDE { return FilePath(); }
+ virtual int64 Size() OVERRIDE { return 0; }
+ virtual bool IsDirectory() OVERRIDE { return false; }
+ };
- // Creates directory at given path. It's an error to create
- // if |exclusive| is true and dir already exists.
- virtual PlatformFileError CreateDirectory(
- FileSystemOperationContext* context,
- const FilePath& file_path,
- bool exclusive,
- bool recursive);
+ virtual ~FileSystemFileUtil();
// Copies or moves a single file.
- virtual PlatformFileError CopyOrMoveFile(
- FileSystemOperationContext* context,
- const FilePath& src_file_path,
- const FilePath& dest_file_path,
- bool copy);
-
- // Copies in a single file from a different filesystem. The src_file_path is
- // a true local platform path, regardless of which subclass of
- // FileSystemFileUtil is being invoked.
- virtual PlatformFileError CopyInForeignFile(
- FileSystemOperationContext* context,
- const FilePath& src_file_path,
- const FilePath& dest_file_path);
-
// Copies a file or a directory from |src_file_path| to |dest_file_path|.
//
// Error cases:
@@ -171,23 +105,76 @@ class FileSystemFileUtil {
const FilePath& file_path,
bool recursive);
- // Deletes a single file.
- // It assumes the given path points a file.
- //
- // This method is called from DeleteDirectoryRecursive and Delete (both are
- // non-virtual).
- virtual PlatformFileError DeleteFile(
- FileSystemOperationContext* unused,
- const FilePath& file_path);
+ // Creates or opens a file with the given flags. It is invalid to pass NULL
+ // for the callback.
+ // If PLATFORM_FILE_CREATE is set in |file_flags| it always tries to create
+ // a new file at the given |file_path| and calls back with
+ // PLATFORM_FILE_ERROR_FILE_EXISTS if the |file_path| already exists.
+ virtual PlatformFileError CreateOrOpen(
+ FileSystemOperationContext* context,
+ const FilePath& file_path,
+ int file_flags,
+ PlatformFile* file_handle,
+ bool* created);
- // Deletes a single empty directory.
- // It assumes the given path points an empty directory.
+ // Close the given file handle.
+ virtual PlatformFileError Close(
+ FileSystemOperationContext* context,
+ PlatformFile);
+
+ // Ensures that the given |file_path| exist. This creates a empty new file
+ // at |file_path| if the |file_path| does not exist.
+ // If a new file han not existed and is created at the |file_path|,
+ // |created| of the callback argument 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.
+ virtual PlatformFileError EnsureFileExists(
+ FileSystemOperationContext* context,
+ const FilePath& file_path, bool* created);
+
+ // Creates directory at given path. It's an error to create
+ // if |exclusive| is true and dir already exists.
+ virtual PlatformFileError CreateDirectory(
+ FileSystemOperationContext* context,
+ const FilePath& file_path,
+ bool exclusive,
+ bool recursive);
+
+ // Retrieves the information about a file. It is invalid to pass NULL for the
+ // callback.
+ virtual PlatformFileError GetFileInfo(
+ FileSystemOperationContext* context,
+ const FilePath& file_,
+ base::PlatformFileInfo* file_info,
+ FilePath* platform_path);
+
+ // Reads the filenames in |file_path|.
+ virtual PlatformFileError ReadDirectory(
+ FileSystemOperationContext* context,
+ const FilePath& file_path,
+ std::vector<base::FileUtilProxy::Entry>* entries);
+
+ // Returns a pointer to a new instance of AbstractFileEnumerator which is
+ // implemented for each FileSystemFileUtil subclass. The instance needs to be
+ // freed by the caller, and its lifetime should not extend past when the
+ // current call returns to the main FILE message loop.
//
- // This method is called from DeleteDirectoryRecursive and Delete (both are
- // non-virtual).
- virtual PlatformFileError DeleteSingleDirectory(
- FileSystemOperationContext* unused,
- const FilePath& file_path);
+ // The supplied context must remain valid at least lifetime of the enumerator
+ // instance.
+ virtual AbstractFileEnumerator* CreateFileEnumerator(
+ FileSystemOperationContext* context,
+ const FilePath& root_path);
+
+ // Maps |virtual_path| given |context| into |local_path| which represents
+ // physical file location on the host OS. This may not always make sense for
+ // all subclasses.
+ virtual PlatformFileError GetLocalFilePath(
+ FileSystemOperationContext* context,
+ const FilePath& virtual_path,
+ FilePath* local_path);
// Touches a file. The callback can be NULL.
// If the file doesn't exist, this fails with PLATFORM_FILE_ERROR_NOT_FOUND.
@@ -206,63 +193,58 @@ class FileSystemFileUtil {
int64 length);
virtual bool PathExists(
- FileSystemOperationContext* unused,
+ FileSystemOperationContext* context,
const FilePath& file_path);
virtual bool DirectoryExists(
- FileSystemOperationContext* unused,
+ FileSystemOperationContext* context,
const FilePath& file_path);
virtual bool IsDirectoryEmpty(
- FileSystemOperationContext* unused,
+ FileSystemOperationContext* context,
const FilePath& file_path);
- // It will be implemented by each subclass such as FileSystemFileEnumerator.
- class AbstractFileEnumerator {
- public:
- virtual ~AbstractFileEnumerator() {}
-
- // Returns an empty string if there are no more results.
- virtual FilePath Next() = 0;
-
- virtual int64 Size() = 0;
- virtual bool IsDirectory() = 0;
- };
+ virtual PlatformFileError CopyOrMoveFile(
+ FileSystemOperationContext* context,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path,
+ bool copy);
- class EmptyFileEnumerator : public AbstractFileEnumerator {
- virtual FilePath Next() OVERRIDE { return FilePath(); }
- virtual int64 Size() OVERRIDE { return 0; }
- virtual bool IsDirectory() OVERRIDE { return false; }
- };
+ // Copies in a single file from a different filesystem. The src_file_path is
+ // a true local platform path, regardless of which subclass of
+ // FileSystemFileUtil is being invoked.
+ virtual PlatformFileError CopyInForeignFile(
+ FileSystemOperationContext* context,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path);
- // Returns a pointer to a new instance of AbstractFileEnumerator which is
- // implemented for each FileUtil subclass. The instance needs to be freed
- // by the caller, and its lifetime should not extend past when the current
- // call returns to the main FILE message loop.
+ // Deletes a single file.
+ // It assumes the given path points a file.
//
- // The supplied context must remain valid at least lifetime of the enumerator
- // instance.
- virtual AbstractFileEnumerator* CreateFileEnumerator(
+ // This method is called from DeleteDirectoryRecursive and Delete (both are
+ // non-virtual).
+ virtual PlatformFileError DeleteFile(
FileSystemOperationContext* context,
- const FilePath& root_path);
+ const FilePath& file_path);
- protected:
- // Deletes a directory and all entries under the directory.
+ // Deletes a single empty directory.
+ // It assumes the given path points an empty directory.
//
- // This method is called from Delete. It internally calls two following
- // virtual methods,
- // - (virtual) DeleteFile to delete files, and
- // - (virtual) DeleteSingleDirectory to delete empty directories after all
- // the files are deleted.
- PlatformFileError DeleteDirectoryRecursive(
+ // This method is called from DeleteDirectoryRecursive and Delete (both are
+ // non-virtual).
+ virtual PlatformFileError DeleteSingleDirectory(
FileSystemOperationContext* context,
const FilePath& file_path);
+ protected:
+ FileSystemFileUtil();
+ explicit FileSystemFileUtil(FileSystemFileUtil* underlying_file_util);
+
// This also removes the destination directory if it's non-empty and all
// other checks are passed (so that the copy/move correctly overwrites the
// destination).
PlatformFileError PerformCommonCheckAndPreparationForMoveAndCopy(
- FileSystemOperationContext* unused,
+ FileSystemOperationContext* context,
const FilePath& src_file_path,
const FilePath& dest_file_path);
@@ -286,6 +268,24 @@ class FileSystemFileUtil {
const FilePath& dest_file_path,
bool copy);
+ // Deletes a directory and all entries under the directory.
+ //
+ // This method is called from Delete. It internally calls two following
+ // virtual methods,
+ // - (virtual) DeleteFile to delete files, and
+ // - (virtual) DeleteSingleDirectory to delete empty directories after all
+ // the files are deleted.
+ PlatformFileError DeleteDirectoryRecursive(
+ FileSystemOperationContext* context,
+ const FilePath& file_path);
+
+ FileSystemFileUtil* underlying_file_util() const {
+ return underlying_file_util_.get();
+ }
+
+ private:
+ scoped_ptr<FileSystemFileUtil> underlying_file_util_;
+
DISALLOW_COPY_AND_ASSIGN(FileSystemFileUtil);
};
diff --git a/webkit/fileapi/file_system_file_util_proxy.cc b/webkit/fileapi/file_system_file_util_proxy.cc
index 162a927..1906258 100644
--- a/webkit/fileapi/file_system_file_util_proxy.cc
+++ b/webkit/fileapi/file_system_file_util_proxy.cc
@@ -21,7 +21,7 @@ class MessageLoopRelay
base::MessageLoopProxy::current()),
error_code_(base::PLATFORM_FILE_OK),
context_(context),
- file_system_file_util_(NULL) {
+ file_util_(NULL) {
}
bool Start(scoped_refptr<base::MessageLoopProxy> message_loop_proxy,
@@ -53,9 +53,9 @@ class MessageLoopRelay
return &context_;
}
- fileapi::FileSystemFileUtil* file_system_file_util() const {
+ fileapi::FileSystemFileUtil* file_util() const {
// TODO(ericu): Support calls that have two different FSFU subclasses.
- return context_.src_file_system_file_util();
+ return context_.src_file_util();
}
private:
@@ -69,7 +69,7 @@ class MessageLoopRelay
scoped_refptr<base::MessageLoopProxy> origin_message_loop_proxy_;
base::PlatformFileError error_code_;
fileapi::FileSystemOperationContext context_;
- fileapi::FileSystemFileUtil* file_system_file_util_;
+ fileapi::FileSystemFileUtil* file_util_;
};
class RelayCreateOrOpen : public MessageLoopRelay {
@@ -98,9 +98,8 @@ class RelayCreateOrOpen : public MessageLoopRelay {
}
virtual void RunWork() {
- set_error_code(
- file_system_file_util()->CreateOrOpen(
- context(), file_path_, file_flags_, &file_handle_, &created_));
+ set_error_code(file_util()->CreateOrOpen(
+ context(), file_path_, file_flags_, &file_handle_, &created_));
}
virtual void RunCallback() {
@@ -152,8 +151,7 @@ class RelayClose : public RelayWithStatusCallback {
protected:
virtual void RunWork() {
- set_error_code(
- file_system_file_util()->Close(context(), file_handle_));
+ set_error_code(file_util()->Close(context(), file_handle_));
}
private:
@@ -177,9 +175,8 @@ class RelayEnsureFileExists : public MessageLoopRelay {
protected:
virtual void RunWork() {
- set_error_code(
- file_system_file_util()->EnsureFileExists(
- context(), file_path_, &created_));
+ set_error_code(file_util()->EnsureFileExists(
+ context(), file_path_, &created_));
}
virtual void RunCallback() {
@@ -209,9 +206,8 @@ class RelayGetLocalPath : public MessageLoopRelay {
protected:
virtual void RunWork() {
- set_error_code(
- file_system_file_util()->GetLocalFilePath(
- context(), virtual_path_, &local_path_));
+ set_error_code(file_util()->GetLocalFilePath(
+ context(), virtual_path_, &local_path_));
}
virtual void RunCallback() {
@@ -239,9 +235,8 @@ class RelayGetFileInfo : public MessageLoopRelay {
protected:
virtual void RunWork() {
- set_error_code(
- file_system_file_util()->GetFileInfo(
- context(), file_path_, &file_info_, &platform_path_));
+ set_error_code(file_util()->GetFileInfo(
+ context(), file_path_, &file_info_, &platform_path_));
}
virtual void RunCallback() {
@@ -270,9 +265,8 @@ class RelayReadDirectory : public MessageLoopRelay {
protected:
virtual void RunWork() {
// TODO(kkanetkar): Implement directory read in multiple chunks.
- set_error_code(
- file_system_file_util()->ReadDirectory(
- context(), file_path_, &entries_));
+ set_error_code(file_util()->ReadDirectory(
+ context(), file_path_, &entries_));
}
virtual void RunCallback() {
@@ -302,9 +296,8 @@ class RelayCreateDirectory : public RelayWithStatusCallback {
protected:
virtual void RunWork() {
- set_error_code(
- file_system_file_util()->CreateDirectory(
- context(), file_path_, exclusive_, recursive_));
+ set_error_code(file_util()->CreateDirectory(
+ context(), file_path_, exclusive_, recursive_));
}
private:
@@ -326,9 +319,8 @@ class RelayCopy : public RelayWithStatusCallback {
protected:
virtual void RunWork() {
- set_error_code(
- file_system_file_util()->Copy(
- context(), src_file_path_, dest_file_path_));
+ set_error_code(file_util()->Copy(
+ context(), src_file_path_, dest_file_path_));
}
private:
@@ -349,9 +341,8 @@ class RelayMove : public RelayWithStatusCallback {
protected:
virtual void RunWork() {
- set_error_code(
- file_system_file_util()->Move(
- context(), src_file_path_, dest_file_path_));
+ set_error_code(file_util()->Move(
+ context(), src_file_path_, dest_file_path_));
}
private:
@@ -372,9 +363,7 @@ class RelayDelete : public RelayWithStatusCallback {
protected:
virtual void RunWork() {
- set_error_code(
- file_system_file_util()->Delete(
- context(), file_path_, recursive_));
+ set_error_code(file_util()->Delete(context(), file_path_, recursive_));
}
private:
@@ -397,9 +386,8 @@ class RelayTouchFilePath : public RelayWithStatusCallback {
protected:
virtual void RunWork() {
- set_error_code(
- file_system_file_util()->Touch(
- context(), file_path_, last_access_time_, last_modified_time_));
+ set_error_code(file_util()->Touch(
+ context(), file_path_, last_access_time_, last_modified_time_));
}
private:
@@ -421,8 +409,7 @@ class RelayTruncate : public RelayWithStatusCallback {
protected:
virtual void RunWork() {
- set_error_code(
- file_system_file_util()->Truncate(context(), file_path_, length_));
+ set_error_code(file_util()->Truncate(context(), file_path_, length_));
}
private:
diff --git a/webkit/fileapi/file_system_file_util_unittest.cc b/webkit/fileapi/file_system_file_util_unittest.cc
index 459a19c..8837cfa 100644
--- a/webkit/fileapi/file_system_file_util_unittest.cc
+++ b/webkit/fileapi/file_system_file_util_unittest.cc
@@ -11,7 +11,8 @@
#include "webkit/fileapi/file_system_context.h"
#include "webkit/fileapi/file_system_operation_context.h"
#include "webkit/fileapi/file_system_test_helper.h"
-#include "webkit/fileapi/obfuscated_file_system_file_util.h"
+#include "webkit/fileapi/native_file_util.h"
+#include "webkit/fileapi/obfuscated_file_util.h"
using namespace fileapi;
@@ -48,7 +49,7 @@ const CopyMoveTestCaseRecord kCopyMoveTestCases[] = {
// This is not yet a full unit test for FileSystemFileUtil. TODO(ericu): Adapt
// the other subclasses' unit tests, as mentioned in the comments in
-// ObfuscatedFileSystemFileUtil's unit test.
+// ObfuscatedFileUtil's unit test.
// Currently this is just a test of cross-filesystem copy and move, which
// actually exercises subclasses of FileSystemFileUtil as well as the class
// itself. We currently only test copies between obfuscated filesystems.
@@ -77,9 +78,8 @@ class FileSystemFileUtilTest : public testing::Test {
bool copy) {
ScopedTempDir base_dir;
ASSERT_TRUE(base_dir.CreateUniqueTempDir());
- scoped_refptr<ObfuscatedFileSystemFileUtil> file_util(
- new ObfuscatedFileSystemFileUtil(base_dir.path(),
- new FileSystemFileUtil()));
+ scoped_refptr<ObfuscatedFileUtil> file_util(
+ new ObfuscatedFileUtil(base_dir.path(), new NativeFileUtil()));
FileSystemTestOriginHelper src_helper(src_origin, src_type);
src_helper.SetUp(base_dir.path(),
false, // incognito
@@ -115,8 +115,8 @@ class FileSystemFileUtilTest : public testing::Test {
FileSystemContext* file_system_context = dest_helper.file_system_context();
scoped_ptr<FileSystemOperationContext> copy_context(
new FileSystemOperationContext(file_system_context, NULL));
- copy_context->set_src_file_system_file_util(file_util);
- copy_context->set_dest_file_system_file_util(file_util);
+ copy_context->set_src_file_util(file_util);
+ copy_context->set_dest_file_util(file_util);
copy_context->set_src_origin_url(src_helper.origin());
copy_context->set_dest_origin_url(dest_helper.origin());
copy_context->set_src_type(src_helper.type());
diff --git a/webkit/fileapi/file_system_mount_point_provider.h b/webkit/fileapi/file_system_mount_point_provider.h
index bb42649..55161c3 100644
--- a/webkit/fileapi/file_system_mount_point_provider.h
+++ b/webkit/fileapi/file_system_mount_point_provider.h
@@ -52,7 +52,7 @@ class FileSystemMountPointProvider {
// permissions.
virtual std::vector<FilePath> GetRootDirectories() const = 0;
- virtual FileSystemFileUtil* GetFileSystemFileUtil() = 0;
+ virtual FileSystemFileUtil* GetFileUtil() = 0;
};
// An interface to control external file system access permissions.
diff --git a/webkit/fileapi/file_system_operation.cc b/webkit/fileapi/file_system_operation.cc
index cd829b1..070d8540 100644
--- a/webkit/fileapi/file_system_operation.cc
+++ b/webkit/fileapi/file_system_operation.cc
@@ -17,7 +17,7 @@
#include "webkit/fileapi/file_system_types.h"
#include "webkit/fileapi/file_system_util.h"
#include "webkit/fileapi/file_writer_delegate.h"
-#include "webkit/fileapi/local_file_system_file_util.h"
+#include "webkit/fileapi/local_file_util.h"
#include "webkit/fileapi/quota_file_util.h"
#include "webkit/quota/quota_types.h"
@@ -60,11 +60,10 @@ FileSystemOperation::FileSystemOperation(
FileSystemCallbackDispatcher* dispatcher,
scoped_refptr<base::MessageLoopProxy> proxy,
FileSystemContext* file_system_context,
- FileSystemFileUtil* file_system_file_util)
+ FileSystemFileUtil* file_util)
: proxy_(proxy),
dispatcher_(dispatcher),
- file_system_operation_context_(
- file_system_context, file_system_file_util),
+ file_system_operation_context_(file_system_context, file_util),
callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
DCHECK(dispatcher);
#ifndef NDEBUG
@@ -109,18 +108,16 @@ void FileSystemOperation::CreateFile(const GURL& path,
#endif
GURL origin_url;
FileSystemType type;
- FileSystemFileUtil* file_system_file_util;
- if (!VerifyFileSystemPathForWrite(
- path, true /* create */, &origin_url, &type, &src_virtual_path_,
- &file_system_file_util)) {
+ FileSystemFileUtil* file_util;
+ if (!VerifyFileSystemPathForWrite(path, true /* create */, &origin_url,
+ &type, &src_virtual_path_, &file_util)) {
delete this;
return;
}
file_system_operation_context_.set_src_origin_url(origin_url);
file_system_operation_context_.set_src_type(type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(file_util);
exclusive_ = exclusive;
GetUsageAndQuotaThenCallback(origin_url, callback_factory_.NewCallback(
@@ -161,19 +158,17 @@ void FileSystemOperation::CreateDirectory(const GURL& path,
#endif
GURL origin_url;
FileSystemType type;
- FileSystemFileUtil* file_system_file_util;
+ FileSystemFileUtil* file_util;
- if (!VerifyFileSystemPathForWrite(
- path, true /* create */, &origin_url, &type, &src_virtual_path_,
- &file_system_file_util)) {
+ if (!VerifyFileSystemPathForWrite(path, true /* create */, &origin_url,
+ &type, &src_virtual_path_, &file_util)) {
delete this;
return;
}
file_system_operation_context_.set_src_origin_url(origin_url);
file_system_operation_context_.set_src_type(type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(file_util);
exclusive_ = exclusive;
recursive_ = recursive;
@@ -217,14 +212,13 @@ void FileSystemOperation::Copy(const GURL& src_path,
GURL dest_origin_url;
FileSystemType src_type;
FileSystemType dest_type;
- FileSystemFileUtil* src_file_system_file_util;
- FileSystemFileUtil* dest_file_system_file_util;
+ FileSystemFileUtil* src_file_util;
+ FileSystemFileUtil* dest_file_util;
if (!VerifyFileSystemPathForRead(src_path, &src_origin_url, &src_type,
- &src_virtual_path_, &src_file_system_file_util) ||
+ &src_virtual_path_, &src_file_util) ||
!VerifyFileSystemPathForWrite(dest_path, true /* create */,
- &dest_origin_url, &dest_type, &dest_virtual_path_,
- &dest_file_system_file_util)) {
+ &dest_origin_url, &dest_type, &dest_virtual_path_, &dest_file_util)) {
delete this;
return;
}
@@ -232,12 +226,10 @@ void FileSystemOperation::Copy(const GURL& src_path,
file_system_operation_context_.set_dest_origin_url(dest_origin_url);
file_system_operation_context_.set_src_type(src_type);
file_system_operation_context_.set_dest_type(dest_type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- src_file_system_file_util);
- if (!file_system_operation_context_.dest_file_system_file_util())
- file_system_operation_context_.set_dest_file_system_file_util(
- dest_file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(src_file_util);
+ if (!file_system_operation_context_.dest_file_util())
+ file_system_operation_context_.set_dest_file_util(dest_file_util);
GetUsageAndQuotaThenCallback(dest_origin_url, callback_factory_.NewCallback(
&FileSystemOperation::DelayedCopyForQuota));
@@ -278,14 +270,13 @@ void FileSystemOperation::Move(const GURL& src_path,
GURL dest_origin_url;
FileSystemType src_type;
FileSystemType dest_type;
- FileSystemFileUtil* src_file_system_file_util;
- FileSystemFileUtil* dest_file_system_file_util;
+ FileSystemFileUtil* src_file_util;
+ FileSystemFileUtil* dest_file_util;
if (!VerifyFileSystemPathForWrite(src_path, false, &src_origin_url, &src_type,
- &src_virtual_path_, &src_file_system_file_util) ||
+ &src_virtual_path_, &src_file_util) ||
!VerifyFileSystemPathForWrite(dest_path, true /* create */,
- &dest_origin_url, &dest_type, &dest_virtual_path_,
- &dest_file_system_file_util)) {
+ &dest_origin_url, &dest_type, &dest_virtual_path_, &dest_file_util)) {
delete this;
return;
}
@@ -293,12 +284,10 @@ void FileSystemOperation::Move(const GURL& src_path,
file_system_operation_context_.set_dest_origin_url(dest_origin_url);
file_system_operation_context_.set_src_type(src_type);
file_system_operation_context_.set_dest_type(dest_type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- src_file_system_file_util);
- if (!file_system_operation_context_.dest_file_system_file_util())
- file_system_operation_context_.set_dest_file_system_file_util(
- dest_file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(src_file_util);
+ if (!file_system_operation_context_.dest_file_util())
+ file_system_operation_context_.set_dest_file_util(dest_file_util);
GetUsageAndQuotaThenCallback(dest_origin_url, callback_factory_.NewCallback(
&FileSystemOperation::DelayedMoveForQuota));
@@ -338,17 +327,16 @@ void FileSystemOperation::DirectoryExists(const GURL& path) {
FilePath virtual_path;
GURL origin_url;
FileSystemType type;
- FileSystemFileUtil* file_system_file_util;
+ FileSystemFileUtil* file_util;
if (!VerifyFileSystemPathForRead(path, &origin_url, &type, &virtual_path,
- &file_system_file_util)) {
+ &file_util)) {
delete this;
return;
}
file_system_operation_context_.set_src_origin_url(origin_url);
file_system_operation_context_.set_src_type(type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(file_util);
FileSystemFileUtilProxy::GetFileInfo(
file_system_operation_context_,
proxy_, virtual_path, callback_factory_.NewCallback(
@@ -364,17 +352,16 @@ void FileSystemOperation::FileExists(const GURL& path) {
FilePath virtual_path;
GURL origin_url;
FileSystemType type;
- FileSystemFileUtil* file_system_file_util;
+ FileSystemFileUtil* file_util;
if (!VerifyFileSystemPathForRead(path, &origin_url, &type, &virtual_path,
- &file_system_file_util)) {
+ &file_util)) {
delete this;
return;
}
file_system_operation_context_.set_src_origin_url(origin_url);
file_system_operation_context_.set_src_type(type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(file_util);
FileSystemFileUtilProxy::GetFileInfo(
file_system_operation_context_,
proxy_, virtual_path, callback_factory_.NewCallback(
@@ -390,17 +377,16 @@ void FileSystemOperation::GetMetadata(const GURL& path) {
FilePath virtual_path;
GURL origin_url;
FileSystemType type;
- FileSystemFileUtil* file_system_file_util;
+ FileSystemFileUtil* file_util;
if (!VerifyFileSystemPathForRead(path, &origin_url, &type, &virtual_path,
- &file_system_file_util)) {
+ &file_util)) {
delete this;
return;
}
file_system_operation_context_.set_src_origin_url(origin_url);
file_system_operation_context_.set_src_type(type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(file_util);
FileSystemFileUtilProxy::GetFileInfo(
file_system_operation_context_,
proxy_, virtual_path, callback_factory_.NewCallback(
@@ -416,17 +402,16 @@ void FileSystemOperation::ReadDirectory(const GURL& path) {
FilePath virtual_path;
GURL origin_url;
FileSystemType type;
- FileSystemFileUtil* file_system_file_util;
+ FileSystemFileUtil* file_util;
if (!VerifyFileSystemPathForRead(path, &origin_url, &type, &virtual_path,
- &file_system_file_util)) {
+ &file_util)) {
delete this;
return;
}
file_system_operation_context_.set_src_origin_url(origin_url);
file_system_operation_context_.set_src_type(type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(file_util);
FileSystemFileUtilProxy::ReadDirectory(
file_system_operation_context_,
proxy_, virtual_path, callback_factory_.NewCallback(
@@ -442,17 +427,16 @@ void FileSystemOperation::Remove(const GURL& path, bool recursive) {
FilePath virtual_path;
GURL origin_url;
FileSystemType type;
- FileSystemFileUtil* file_system_file_util;
+ FileSystemFileUtil* file_util;
if (!VerifyFileSystemPathForWrite(path, false /* create */, &origin_url,
- &type, &virtual_path, &file_system_file_util)) {
+ &type, &virtual_path, &file_util)) {
delete this;
return;
}
file_system_operation_context_.set_src_origin_url(origin_url);
file_system_operation_context_.set_src_type(type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(file_util);
FileSystemFileUtilProxy::Delete(
file_system_operation_context_,
proxy_, virtual_path, recursive, callback_factory_.NewCallback(
@@ -470,17 +454,16 @@ void FileSystemOperation::Write(
#endif
GURL origin_url;
FileSystemType type;
- FileSystemFileUtil* file_system_file_util;
+ FileSystemFileUtil* file_util;
if (!VerifyFileSystemPathForWrite(path, true /* create */, &origin_url,
- &type, &src_virtual_path_, &file_system_file_util)) {
+ &type, &src_virtual_path_, &file_util)) {
delete this;
return;
}
file_system_operation_context_.set_src_origin_url(origin_url);
file_system_operation_context_.set_src_type(type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(file_util);
DCHECK(blob_url.is_valid());
file_writer_delegate_.reset(new FileWriterDelegate(this, offset, proxy_));
blob_request_.reset(
@@ -524,17 +507,16 @@ void FileSystemOperation::Truncate(const GURL& path, int64 length) {
#endif
GURL origin_url;
FileSystemType type;
- FileSystemFileUtil* file_system_file_util;
+ FileSystemFileUtil* file_util;
if (!VerifyFileSystemPathForWrite(path, false /* create */, &origin_url,
- &type, &src_virtual_path_, &file_system_file_util)) {
+ &type, &src_virtual_path_, &file_util)) {
delete this;
return;
}
file_system_operation_context_.set_src_origin_url(origin_url);
file_system_operation_context_.set_src_type(type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(file_util);
length_ = length;
GetUsageAndQuotaThenCallback(origin_url, callback_factory_.NewCallback(
@@ -576,17 +558,16 @@ void FileSystemOperation::TouchFile(const GURL& path,
FilePath virtual_path;
GURL origin_url;
FileSystemType type;
- FileSystemFileUtil* file_system_file_util;
+ FileSystemFileUtil* file_util;
if (!VerifyFileSystemPathForWrite(path, true /* create */, &origin_url,
- &type, &virtual_path, &file_system_file_util)) {
+ &type, &virtual_path, &file_util)) {
delete this;
return;
}
file_system_operation_context_.set_src_origin_url(origin_url);
file_system_operation_context_.set_src_type(type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(file_util);
FileSystemFileUtilProxy::Touch(
file_system_operation_context_,
proxy_, virtual_path, last_access_time, last_modified_time,
@@ -604,7 +585,7 @@ void FileSystemOperation::OpenFile(const GURL& path,
peer_handle_ = peer_handle;
GURL origin_url;
FileSystemType type;
- FileSystemFileUtil* file_system_file_util;
+ FileSystemFileUtil* file_util;
if (file_flags & (
(base::PLATFORM_FILE_ENUMERATE | base::PLATFORM_FILE_TEMPORARY |
base::PLATFORM_FILE_HIDDEN))) {
@@ -618,22 +599,21 @@ void FileSystemOperation::OpenFile(const GURL& path,
base::PLATFORM_FILE_DELETE_ON_CLOSE |
base::PLATFORM_FILE_WRITE_ATTRIBUTES)) {
if (!VerifyFileSystemPathForWrite(path, true /* create */, &origin_url,
- &type, &src_virtual_path_, &file_system_file_util)) {
+ &type, &src_virtual_path_, &file_util)) {
delete this;
return;
}
} else {
if (!VerifyFileSystemPathForRead(path, &origin_url, &type,
- &src_virtual_path_, &file_system_file_util)) {
+ &src_virtual_path_, &file_util)) {
delete this;
return;
}
}
file_system_operation_context_.set_src_origin_url(origin_url);
file_system_operation_context_.set_src_type(type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- file_system_file_util);
+ if (!file_system_operation_context_.src_file_util())
+ file_system_operation_context_.set_src_file_util(file_util);
file_flags_ = file_flags;
GetUsageAndQuotaThenCallback(origin_url, callback_factory_.NewCallback(
@@ -868,7 +848,7 @@ void FileSystemOperation::OnFileOpenedForWrite(
bool FileSystemOperation::VerifyFileSystemPathForRead(
const GURL& path, GURL* origin_url, FileSystemType* type,
- FilePath* virtual_path, FileSystemFileUtil** file_system_file_util) {
+ FilePath* virtual_path, FileSystemFileUtil** file_util) {
// If we have no context, we just allow any operations, for testing.
// TODO(ericu): Revisit this hack for security.
@@ -887,7 +867,7 @@ bool FileSystemOperation::VerifyFileSystemPathForRead(
#endif
*type = file_system_operation_context_.src_type();
*origin_url = file_system_operation_context_.src_origin_url();
- *file_system_file_util = NULL;
+ *file_util = NULL;
return true;
}
@@ -902,10 +882,9 @@ bool FileSystemOperation::VerifyFileSystemPathForRead(
dispatcher_->DidFail(base::PLATFORM_FILE_ERROR_SECURITY);
return false;
}
- DCHECK(file_system_file_util);
- *file_system_file_util =
- file_system_context()->path_manager()->GetFileSystemFileUtil(*type);
- DCHECK(*file_system_file_util);
+ DCHECK(file_util);
+ *file_util = file_system_context()->path_manager()->GetFileUtil(*type);
+ DCHECK(*file_util);
// We notify this read access whether the read access succeeds or not.
// This must be ok since this is used to let the QM's eviction logic know
@@ -924,7 +903,7 @@ bool FileSystemOperation::VerifyFileSystemPathForRead(
bool FileSystemOperation::VerifyFileSystemPathForWrite(
const GURL& path, bool create, GURL* origin_url, FileSystemType* type,
- FilePath* virtual_path, FileSystemFileUtil** file_system_file_util) {
+ FilePath* virtual_path, FileSystemFileUtil** file_util) {
// If we have no context, we just allow any operations, for testing.
// TODO(ericu): Revisit this hack for security.
@@ -943,7 +922,7 @@ bool FileSystemOperation::VerifyFileSystemPathForWrite(
#endif
*type = file_system_operation_context_.dest_type();
*origin_url = file_system_operation_context_.dest_origin_url();
- *file_system_file_util = NULL;
+ *file_util = NULL;
return true;
}
@@ -967,10 +946,9 @@ bool FileSystemOperation::VerifyFileSystemPathForWrite(
dispatcher_->DidFail(base::PLATFORM_FILE_ERROR_SECURITY);
return false;
}
- DCHECK(file_system_file_util);
- *file_system_file_util =
- file_system_context()->path_manager()->GetFileSystemFileUtil(*type);
- DCHECK(*file_system_file_util);
+ DCHECK(file_util);
+ *file_util = file_system_context()->path_manager()->GetFileUtil(*type);
+ DCHECK(*file_util);
return true;
}
diff --git a/webkit/fileapi/file_system_operation.h b/webkit/fileapi/file_system_operation.h
index a03868e..cc1e34a 100644
--- a/webkit/fileapi/file_system_operation.h
+++ b/webkit/fileapi/file_system_operation.h
@@ -49,12 +49,12 @@ class FileSystemQuotaUtil;
class FileSystemOperation {
public:
// |dispatcher| will be owned by this class.
- // |file_system_file_util| is optional; if supplied, it will not be deleted by
+ // |file_util| is optional; if supplied, it will not be deleted by
// the class. It's expecting a pointer to a singleton.
FileSystemOperation(FileSystemCallbackDispatcher* dispatcher,
scoped_refptr<base::MessageLoopProxy> proxy,
FileSystemContext* file_system_context,
- FileSystemFileUtil* file_system_file_util);
+ FileSystemFileUtil* file_util);
virtual ~FileSystemOperation();
void OpenFileSystem(const GURL& origin_url,
@@ -184,7 +184,7 @@ class FileSystemOperation {
GURL* root_url,
FileSystemType* type,
FilePath* virtual_path,
- FileSystemFileUtil** file_system_file_util);
+ FileSystemFileUtil** file_util);
// Checks the validity of a given |path| for writing, cracks the path into
// root URL and virtual path components, and returns the correct
@@ -206,7 +206,7 @@ class FileSystemOperation {
GURL* root_url,
FileSystemType* type,
FilePath* virtual_path,
- FileSystemFileUtil** file_system_file_util);
+ FileSystemFileUtil** file_util);
#ifndef NDEBUG
enum OperationType {
diff --git a/webkit/fileapi/file_system_operation_context.cc b/webkit/fileapi/file_system_operation_context.cc
index b8a7c6f..5f0abf0 100644
--- a/webkit/fileapi/file_system_operation_context.cc
+++ b/webkit/fileapi/file_system_operation_context.cc
@@ -11,10 +11,10 @@ namespace fileapi {
FileSystemOperationContext::FileSystemOperationContext(
FileSystemContext* context,
- FileSystemFileUtil* file_system_file_util)
+ FileSystemFileUtil* file_util)
: file_system_context_(context),
- src_file_system_file_util_(file_system_file_util),
- dest_file_system_file_util_(file_system_file_util),
+ src_file_util_(file_util),
+ dest_file_util_(file_util),
src_type_(kFileSystemTypeUnknown),
dest_type_(kFileSystemTypeUnknown),
allowed_bytes_growth_(0) {
@@ -26,7 +26,7 @@ FileSystemOperationContext::~FileSystemOperationContext() {
FileSystemOperationContext*
FileSystemOperationContext::CreateInheritedContextForDest() const {
FileSystemOperationContext* context = new FileSystemOperationContext(
- file_system_context_.get(), dest_file_system_file_util_);
+ file_system_context_.get(), dest_file_util_);
context->set_src_origin_url(dest_origin_url_);
context->set_src_type(dest_type_);
context->set_allowed_bytes_growth(allowed_bytes_growth_);
diff --git a/webkit/fileapi/file_system_operation_context.h b/webkit/fileapi/file_system_operation_context.h
index 9ea088f..e61aac8 100644
--- a/webkit/fileapi/file_system_operation_context.h
+++ b/webkit/fileapi/file_system_operation_context.h
@@ -17,34 +17,33 @@ class FileSystemContext;
class FileSystemOperationContext {
public:
- // The |file_system_file_util| parameter is so that unit tests can force their
- // own preferred class in for both src and dest FSFU; in general these will
- // get set later by the FileSystemOperation.
- FileSystemOperationContext(
- FileSystemContext* context,
- FileSystemFileUtil* file_system_file_util);
+ // The |file_util| parameter is so that unit tests can force their own
+ // preferred class in for both src and dest FSFU; in general these will get
+ // set later by the FileSystemOperation.
+ FileSystemOperationContext(FileSystemContext* context,
+ FileSystemFileUtil* file_util);
~FileSystemOperationContext();
FileSystemContext* file_system_context() const {
return file_system_context_.get();
}
- void set_src_file_system_file_util(FileSystemFileUtil* util) {
- DCHECK(!src_file_system_file_util_);
- src_file_system_file_util_ = util;
+ void set_src_file_util(FileSystemFileUtil* util) {
+ DCHECK(!src_file_util_);
+ src_file_util_ = util;
}
- FileSystemFileUtil* src_file_system_file_util() const {
- return src_file_system_file_util_;
+ FileSystemFileUtil* src_file_util() const {
+ return src_file_util_;
}
- void set_dest_file_system_file_util(FileSystemFileUtil* util) {
- DCHECK(!dest_file_system_file_util_);
- dest_file_system_file_util_ = util;
+ void set_dest_file_util(FileSystemFileUtil* util) {
+ DCHECK(!dest_file_util_);
+ dest_file_util_ = util;
}
- FileSystemFileUtil* dest_file_system_file_util() const {
- return dest_file_system_file_util_;
+ FileSystemFileUtil* dest_file_util() const {
+ return dest_file_util_;
}
void set_src_origin_url(const GURL& url) {
@@ -89,11 +88,10 @@ class FileSystemOperationContext {
private:
scoped_refptr<FileSystemContext> file_system_context_;
- // These *_file_system_file_util_ are not "owned" by
- // FileSystemOperationContext. They are supposed to be pointers to objects
- // that will outlive us.
- FileSystemFileUtil* src_file_system_file_util_;
- FileSystemFileUtil* dest_file_system_file_util_;
+ // These *_file_util_ are not "owned" by FileSystemOperationContext. They
+ // are supposed to be pointers to objects that will outlive us.
+ FileSystemFileUtil* src_file_util_;
+ FileSystemFileUtil* dest_file_util_;
GURL src_origin_url_; // Also used for any single-path operation.
GURL dest_origin_url_;
diff --git a/webkit/fileapi/file_system_operation_unittest.cc b/webkit/fileapi/file_system_operation_unittest.cc
index 50e5ea8..90f0031 100644
--- a/webkit/fileapi/file_system_operation_unittest.cc
+++ b/webkit/fileapi/file_system_operation_unittest.cc
@@ -19,7 +19,7 @@
#include "webkit/fileapi/file_system_quota_util.h"
#include "webkit/fileapi/file_system_test_helper.h"
#include "webkit/fileapi/file_system_util.h"
-#include "webkit/fileapi/local_file_system_file_util.h"
+#include "webkit/fileapi/local_file_util.h"
#include "webkit/fileapi/quota_file_util.h"
#include "webkit/quota/quota_manager.h"
@@ -155,8 +155,7 @@ class FileSystemOperationTest : public testing::Test {
public:
FileSystemOperationTest()
: status_(kFileOperationStatusNotSet),
- local_file_util_(
- new LocalFileSystemFileUtil(QuotaFileUtil::CreateDefault())) {
+ local_file_util_(new LocalFileUtil(QuotaFileUtil::CreateDefault())) {
EXPECT_TRUE(base_.CreateUniqueTempDir());
}
@@ -250,7 +249,7 @@ class FileSystemOperationTest : public testing::Test {
std::vector<base::FileUtilProxy::Entry> entries_;
private:
- scoped_ptr<LocalFileSystemFileUtil> local_file_util_;
+ scoped_ptr<LocalFileUtil> local_file_util_;
scoped_refptr<QuotaManager> quota_manager_;
scoped_refptr<QuotaManagerProxy> quota_manager_proxy_;
DISALLOW_COPY_AND_ASSIGN(FileSystemOperationTest);
diff --git a/webkit/fileapi/file_system_operation_write_unittest.cc b/webkit/fileapi/file_system_operation_write_unittest.cc
index df1ebba..f434042 100644
--- a/webkit/fileapi/file_system_operation_write_unittest.cc
+++ b/webkit/fileapi/file_system_operation_write_unittest.cc
@@ -28,7 +28,7 @@
#include "webkit/fileapi/file_system_path_manager.h"
#include "webkit/fileapi/file_system_test_helper.h"
#include "webkit/fileapi/file_system_util.h"
-#include "webkit/fileapi/local_file_system_file_util.h"
+#include "webkit/fileapi/local_file_util.h"
#include "webkit/fileapi/quota_file_util.h"
#include "webkit/quota/quota_manager.h"
@@ -67,8 +67,7 @@ class MockQuotaManager : public QuotaManager {
class FileSystemOperationWriteTest : public testing::Test {
public:
FileSystemOperationWriteTest()
- : local_file_util_(
- new LocalFileSystemFileUtil(QuotaFileUtil::CreateDefault())),
+ : local_file_util_(new LocalFileUtil(QuotaFileUtil::CreateDefault())),
loop_(MessageLoop::TYPE_IO),
status_(base::PLATFORM_FILE_OK),
bytes_written_(0),
@@ -100,7 +99,7 @@ class FileSystemOperationWriteTest : public testing::Test {
return test_helper_.GetURLForPath(path);
}
- scoped_ptr<LocalFileSystemFileUtil> local_file_util_;
+ scoped_ptr<LocalFileUtil> local_file_util_;
scoped_refptr<MockQuotaManager> quota_manager_;
FileSystemTestOriginHelper test_helper_;
diff --git a/webkit/fileapi/file_system_path_manager.cc b/webkit/fileapi/file_system_path_manager.cc
index 043d6499..569c261 100644
--- a/webkit/fileapi/file_system_path_manager.cc
+++ b/webkit/fileapi/file_system_path_manager.cc
@@ -160,15 +160,15 @@ bool FileSystemPathManager::IsAccessAllowed(
return true;
}
-FileSystemFileUtil* FileSystemPathManager::GetFileSystemFileUtil(
+FileSystemFileUtil* FileSystemPathManager::GetFileUtil(
FileSystemType type) const {
switch (type) {
case kFileSystemTypeTemporary:
case kFileSystemTypePersistent:
- return sandbox_provider_->GetFileSystemFileUtil();
+ return sandbox_provider_->GetFileUtil();
case kFileSystemTypeExternal:
if (external_provider_.get()) {
- return external_provider_->GetFileSystemFileUtil();
+ return external_provider_->GetFileUtil();
} else {
NOTREACHED();
return NULL;
diff --git a/webkit/fileapi/file_system_path_manager.h b/webkit/fileapi/file_system_path_manager.h
index 5ac3561..5c9600c 100644
--- a/webkit/fileapi/file_system_path_manager.h
+++ b/webkit/fileapi/file_system_path_manager.h
@@ -78,7 +78,7 @@ class FileSystemPathManager {
bool IsAccessAllowed(const GURL& origin, FileSystemType type,
const FilePath& virtual_path);
- FileSystemFileUtil* GetFileSystemFileUtil(FileSystemType type) const;
+ FileSystemFileUtil* GetFileUtil(FileSystemType type) const;
SandboxMountPointProvider* sandbox_provider() const {
return sandbox_provider_.get();
diff --git a/webkit/fileapi/file_system_quota_client_unittest.cc b/webkit/fileapi/file_system_quota_client_unittest.cc
index 026c377..6d32938 100644
--- a/webkit/fileapi/file_system_quota_client_unittest.cc
+++ b/webkit/fileapi/file_system_quota_client_unittest.cc
@@ -17,7 +17,7 @@
#include "webkit/fileapi/file_system_types.h"
#include "webkit/fileapi/file_system_usage_cache.h"
#include "webkit/fileapi/file_system_util.h"
-#include "webkit/fileapi/obfuscated_file_system_file_util.h"
+#include "webkit/fileapi/obfuscated_file_util.h"
#include "webkit/fileapi/sandbox_mount_point_provider.h"
#include "webkit/fileapi/quota_file_util.h"
#include "webkit/quota/quota_types.h"
@@ -147,9 +147,8 @@ class FileSystemQuotaClientTest : public testing::Test {
bool CreateFileSystemDirectory(const FilePath& path,
const std::string& origin_url,
quota::StorageType type) {
- FileSystemFileUtil* file_util =
- file_system_context_->path_manager()->GetFileSystemFileUtil(
- QuotaStorageTypeToFileSystemType(type));
+ FileSystemFileUtil* file_util = file_system_context_->path_manager()->
+ GetFileUtil(QuotaStorageTypeToFileSystemType(type));
scoped_ptr<FileSystemOperationContext> context(
CreateFileSystemOperationContext(file_util, path, origin_url, type));
@@ -169,7 +168,7 @@ class FileSystemQuotaClientTest : public testing::Test {
return false;
FileSystemFileUtil* file_util = file_system_context_->path_manager()->
- sandbox_provider()->GetFileSystemFileUtil();
+ sandbox_provider()->GetFileUtil();
scoped_ptr<FileSystemOperationContext> context(
CreateFileSystemOperationContext(file_util, path, origin_url, type));
@@ -223,8 +222,7 @@ class FileSystemQuotaClientTest : public testing::Test {
GURL(files[i].origin_url) == GURL(origin_url)) {
FilePath path = FilePath().AppendASCII(files[i].name);
if (!path.empty()) {
- file_paths_cost +=
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path);
+ file_paths_cost += ObfuscatedFileUtil::ComputeFilePathCost(path);
}
}
}
diff --git a/webkit/fileapi/file_system_quota_unittest.cc b/webkit/fileapi/file_system_quota_unittest.cc
index 0879791..6eddf09 100644
--- a/webkit/fileapi/file_system_quota_unittest.cc
+++ b/webkit/fileapi/file_system_quota_unittest.cc
@@ -20,7 +20,7 @@
#include "webkit/fileapi/file_system_test_helper.h"
#include "webkit/fileapi/file_system_usage_cache.h"
#include "webkit/fileapi/file_system_util.h"
-#include "webkit/fileapi/local_file_system_file_util.h"
+#include "webkit/fileapi/local_file_util.h"
#include "webkit/fileapi/quota_file_util.h"
#include "webkit/quota/quota_manager.h"
@@ -31,8 +31,7 @@ const int kFileOperationStatusNotSet = 1;
class FileSystemQuotaTest : public testing::Test {
public:
FileSystemQuotaTest()
- : local_file_util_(
- new LocalFileSystemFileUtil(QuotaFileUtil::CreateDefault())),
+ : local_file_util_(new LocalFileUtil(QuotaFileUtil::CreateDefault())),
callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
status_(kFileOperationStatusNotSet),
quota_status_(quota::kQuotaStatusUnknown),
@@ -121,7 +120,7 @@ class FileSystemQuotaTest : public testing::Test {
ScopedTempDir work_dir_;
scoped_refptr<quota::QuotaManager> quota_manager_;
- scoped_ptr<LocalFileSystemFileUtil> local_file_util_;
+ scoped_ptr<LocalFileUtil> local_file_util_;
base::ScopedCallbackFactory<FileSystemQuotaTest> callback_factory_;
diff --git a/webkit/fileapi/file_system_test_helper.cc b/webkit/fileapi/file_system_test_helper.cc
index b064e41..55e56c3 100644
--- a/webkit/fileapi/file_system_test_helper.cc
+++ b/webkit/fileapi/file_system_test_helper.cc
@@ -38,8 +38,7 @@ void FileSystemTestOriginHelper::SetUp(
}
void FileSystemTestOriginHelper::SetUp(
- FileSystemContext* file_system_context,
- FileSystemFileUtil* file_util) {
+ FileSystemContext* file_system_context, FileSystemFileUtil* file_util) {
DCHECK(file_system_context->path_manager());
DCHECK(file_system_context->path_manager()->sandbox_provider());
@@ -47,7 +46,7 @@ void FileSystemTestOriginHelper::SetUp(
file_system_context_ = file_system_context;
if (!file_util_)
file_util_ = file_system_context->path_manager()->sandbox_provider()->
- GetFileSystemFileUtil();
+ GetFileUtil();
DCHECK(file_util_);
// Prepare the origin's root directory.
diff --git a/webkit/fileapi/file_system_test_helper.h b/webkit/fileapi/file_system_test_helper.h
index 248290e..6562318 100644
--- a/webkit/fileapi/file_system_test_helper.h
+++ b/webkit/fileapi/file_system_test_helper.h
@@ -43,9 +43,9 @@ class FileSystemTestOriginHelper {
// If you want to use more than one FileSystemTestOriginHelper in a single
// base directory, they have to share a context, so that they don't have
// multiple databases fighting over the lock to the origin directory [deep
- // down inside ObfuscatedFileSystemFileUtil].
+ // down inside ObfuscatedFileUtil].
void SetUp(FileSystemContext* file_system_context,
- FileSystemFileUtil* file_util);
+ FileSystemFileUtil* file_util);
void SetUp(const FilePath& base_dir,
bool incognito_mode,
bool unlimited_quota,
diff --git a/webkit/fileapi/file_system_url_request_job_unittest.cc b/webkit/fileapi/file_system_url_request_job_unittest.cc
index 52f1df8..3d09bd6 100644
--- a/webkit/fileapi/file_system_url_request_job_unittest.cc
+++ b/webkit/fileapi/file_system_url_request_job_unittest.cc
@@ -144,7 +144,7 @@ class FileSystemURLRequestJobTest : public testing::Test {
void CreateDirectory(const base::StringPiece& dir_name) {
FilePath path = FilePath().AppendASCII(dir_name);
FileSystemFileUtil* file_util = file_system_context_->path_manager()->
- sandbox_provider()->GetFileSystemFileUtil();
+ sandbox_provider()->GetFileUtil();
FileSystemOperationContext context(file_system_context_, file_util);
context.set_src_origin_url(GURL("http://remote"));
context.set_src_type(fileapi::kFileSystemTypeTemporary);
@@ -161,7 +161,7 @@ class FileSystemURLRequestJobTest : public testing::Test {
const char* buf, int buf_size) {
FilePath path = FilePath().AppendASCII(file_name);
FileSystemFileUtil* file_util = file_system_context_->path_manager()->
- sandbox_provider()->GetFileSystemFileUtil();
+ sandbox_provider()->GetFileUtil();
FileSystemOperationContext context(file_system_context_, file_util);
context.set_src_origin_url(GURL("http://remote"));
context.set_src_type(fileapi::kFileSystemTypeTemporary);
diff --git a/webkit/fileapi/local_file_system_file_util.cc b/webkit/fileapi/local_file_util.cc
index 0ed3b94..223beea 100644
--- a/webkit/fileapi/local_file_system_file_util.cc
+++ b/webkit/fileapi/local_file_util.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "webkit/fileapi/local_file_system_file_util.h"
+#include "webkit/fileapi/local_file_util.h"
#include "base/file_util_proxy.h"
#include "googleurl/src/gurl.h"
@@ -14,15 +14,57 @@
namespace fileapi {
-LocalFileSystemFileUtil::LocalFileSystemFileUtil(
- FileSystemFileUtil* underlying_file_util)
- : underlying_file_util_(underlying_file_util) {
+class LocalFileEnumerator : public FileSystemFileUtil::AbstractFileEnumerator {
+ public:
+ LocalFileEnumerator(const FilePath& platform_root_path,
+ const FilePath& virtual_root_path,
+ bool recursive,
+ file_util::FileEnumerator::FileType file_type)
+ : file_enum_(platform_root_path, recursive, file_type),
+ platform_root_path_(platform_root_path),
+ virtual_root_path_(virtual_root_path) {
+ }
+
+ ~LocalFileEnumerator() {}
+
+ virtual FilePath Next() OVERRIDE;
+ virtual int64 Size() OVERRIDE;
+ virtual bool IsDirectory() OVERRIDE;
+
+ private:
+ file_util::FileEnumerator file_enum_;
+ file_util::FileEnumerator::FindInfo file_util_info_;
+ FilePath platform_root_path_;
+ FilePath virtual_root_path_;
+};
+
+FilePath LocalFileEnumerator::Next() {
+ FilePath next = file_enum_.Next();
+ if (next.empty())
+ return next;
+ file_enum_.GetFindInfo(&file_util_info_);
+
+ FilePath path;
+ platform_root_path_.AppendRelativePath(next, &path);
+ return virtual_root_path_.Append(path);
}
-LocalFileSystemFileUtil::~LocalFileSystemFileUtil() {
+int64 LocalFileEnumerator::Size() {
+ return file_util::FileEnumerator::GetFilesize(file_util_info_);
}
-PlatformFileError LocalFileSystemFileUtil::CreateOrOpen(
+bool LocalFileEnumerator::IsDirectory() {
+ return file_util::FileEnumerator::IsDirectory(file_util_info_);
+}
+
+LocalFileUtil::LocalFileUtil(FileSystemFileUtil* underlying_file_util)
+ : FileSystemFileUtil(underlying_file_util) {
+}
+
+LocalFileUtil::~LocalFileUtil() {
+}
+
+PlatformFileError LocalFileUtil::CreateOrOpen(
FileSystemOperationContext* context,
const FilePath& file_path, int file_flags,
PlatformFile* file_handle, bool* created) {
@@ -31,11 +73,11 @@ PlatformFileError LocalFileSystemFileUtil::CreateOrOpen(
file_path);
if (local_path.empty())
return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- return underlying_file_util_->CreateOrOpen(
+ return underlying_file_util()->CreateOrOpen(
context, local_path, file_flags, file_handle, created);
}
-PlatformFileError LocalFileSystemFileUtil::EnsureFileExists(
+PlatformFileError LocalFileUtil::EnsureFileExists(
FileSystemOperationContext* context,
const FilePath& file_path,
bool* created) {
@@ -44,25 +86,25 @@ PlatformFileError LocalFileSystemFileUtil::EnsureFileExists(
file_path);
if (local_path.empty())
return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- return underlying_file_util_->EnsureFileExists(
+ return underlying_file_util()->EnsureFileExists(
context, local_path, created);
}
-PlatformFileError LocalFileSystemFileUtil::GetLocalFilePath(
+PlatformFileError LocalFileUtil::CreateDirectory(
FileSystemOperationContext* context,
- const FilePath& virtual_path,
- FilePath* local_path) {
- FilePath path =
+ const FilePath& file_path,
+ bool exclusive,
+ bool recursive) {
+ FilePath local_path =
GetLocalPath(context, context->src_origin_url(), context->src_type(),
- virtual_path);
- if (path.empty())
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
-
- *local_path = path;
- return base::PLATFORM_FILE_OK;
+ file_path);
+ if (local_path.empty())
+ return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
+ return underlying_file_util()->CreateDirectory(
+ context, local_path, exclusive, recursive);
}
-PlatformFileError LocalFileSystemFileUtil::GetFileInfo(
+PlatformFileError LocalFileUtil::GetFileInfo(
FileSystemOperationContext* context,
const FilePath& file_path,
base::PlatformFileInfo* file_info,
@@ -72,11 +114,11 @@ PlatformFileError LocalFileSystemFileUtil::GetFileInfo(
file_path);
if (local_path.empty())
return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- return underlying_file_util_->GetFileInfo(
+ return underlying_file_util()->GetFileInfo(
context, local_path, file_info, platform_file_path);
}
-PlatformFileError LocalFileSystemFileUtil::ReadDirectory(
+PlatformFileError LocalFileUtil::ReadDirectory(
FileSystemOperationContext* context,
const FilePath& file_path,
std::vector<base::FileUtilProxy::Entry>* entries) {
@@ -86,85 +128,40 @@ PlatformFileError LocalFileSystemFileUtil::ReadDirectory(
file_path);
if (local_path.empty())
return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- return underlying_file_util_->ReadDirectory(
+ return underlying_file_util()->ReadDirectory(
context, local_path, entries);
}
-PlatformFileError LocalFileSystemFileUtil::CreateDirectory(
+FileSystemFileUtil::AbstractFileEnumerator* LocalFileUtil::CreateFileEnumerator(
FileSystemOperationContext* context,
- const FilePath& file_path,
- bool exclusive,
- bool recursive) {
+ const FilePath& root_path) {
FilePath local_path =
GetLocalPath(context, context->src_origin_url(), context->src_type(),
- file_path);
+ root_path);
if (local_path.empty())
- return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- return underlying_file_util_->CreateDirectory(
- context, local_path, exclusive, recursive);
-}
-
-PlatformFileError LocalFileSystemFileUtil::CopyOrMoveFile(
- FileSystemOperationContext* context,
- const FilePath& src_file_path,
- const FilePath& dest_file_path,
- bool copy) {
- // TODO(ericu): If they share a root URL, this could be optimized.
- FilePath local_src_path =
- GetLocalPath(context, context->src_origin_url(), context->src_type(),
- src_file_path);
- if (local_src_path.empty())
- return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- FilePath local_dest_path =
- GetLocalPath(context, context->dest_origin_url(), context->dest_type(),
- dest_file_path);
- if (local_dest_path.empty())
- return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- return underlying_file_util_->CopyOrMoveFile(
- context, local_src_path, local_dest_path, copy);
-}
-
-// TODO(dmikurube): Make it independent from CopyOrMoveFile.
-PlatformFileError LocalFileSystemFileUtil::CopyInForeignFile(
- FileSystemOperationContext* context,
- const FilePath& src_file_path,
- const FilePath& dest_file_path) {
- if (src_file_path.empty())
- return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- FilePath local_dest_path =
- GetLocalPath(context, context->dest_origin_url(), context->dest_type(),
- dest_file_path);
- if (local_dest_path.empty())
- return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- return underlying_file_util_->CopyOrMoveFile(
- context, src_file_path, local_dest_path, true);
+ return new EmptyFileEnumerator();
+ return new LocalFileEnumerator(
+ local_path, root_path, true,
+ static_cast<file_util::FileEnumerator::FileType>(
+ file_util::FileEnumerator::FILES |
+ file_util::FileEnumerator::DIRECTORIES));
}
-PlatformFileError LocalFileSystemFileUtil::DeleteFile(
+PlatformFileError LocalFileUtil::GetLocalFilePath(
FileSystemOperationContext* context,
- const FilePath& file_path) {
- FilePath local_path =
+ const FilePath& virtual_path,
+ FilePath* local_path) {
+ FilePath path =
GetLocalPath(context, context->src_origin_url(), context->src_type(),
- file_path);
- if (local_path.empty())
- return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- return underlying_file_util_->DeleteFile(
- context, local_path);
-}
+ virtual_path);
+ if (path.empty())
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
-PlatformFileError LocalFileSystemFileUtil::DeleteSingleDirectory(
- FileSystemOperationContext* context,
- const FilePath& file_path) {
- FilePath local_path =
- GetLocalPath(context, context->src_origin_url(), context->src_type(),
- file_path);
- if (local_path.empty())
- return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- return underlying_file_util_->DeleteSingleDirectory(
- context, local_path);
+ *local_path = path;
+ return base::PLATFORM_FILE_OK;
}
-PlatformFileError LocalFileSystemFileUtil::Touch(
+PlatformFileError LocalFileUtil::Touch(
FileSystemOperationContext* context,
const FilePath& file_path,
const base::Time& last_access_time,
@@ -174,11 +171,11 @@ PlatformFileError LocalFileSystemFileUtil::Touch(
file_path);
if (local_path.empty())
return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- return underlying_file_util_->Touch(
+ return underlying_file_util()->Touch(
context, local_path, last_access_time, last_modified_time);
}
-PlatformFileError LocalFileSystemFileUtil::Truncate(
+PlatformFileError LocalFileUtil::Truncate(
FileSystemOperationContext* context,
const FilePath& file_path,
int64 length) {
@@ -187,11 +184,11 @@ PlatformFileError LocalFileSystemFileUtil::Truncate(
file_path);
if (local_path.empty())
return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- return underlying_file_util_->Truncate(
+ return underlying_file_util()->Truncate(
context, local_path, length);
}
-bool LocalFileSystemFileUtil::PathExists(
+bool LocalFileUtil::PathExists(
FileSystemOperationContext* context,
const FilePath& file_path) {
FilePath local_path =
@@ -199,11 +196,11 @@ bool LocalFileSystemFileUtil::PathExists(
file_path);
if (local_path.empty())
return false;
- return underlying_file_util_->PathExists(
+ return underlying_file_util()->PathExists(
context, local_path);
}
-bool LocalFileSystemFileUtil::DirectoryExists(
+bool LocalFileUtil::DirectoryExists(
FileSystemOperationContext* context,
const FilePath& file_path) {
FilePath local_path =
@@ -211,11 +208,11 @@ bool LocalFileSystemFileUtil::DirectoryExists(
file_path);
if (local_path.empty())
return false;
- return underlying_file_util_->DirectoryExists(
+ return underlying_file_util()->DirectoryExists(
context, local_path);
}
-bool LocalFileSystemFileUtil::IsDirectoryEmpty(
+bool LocalFileUtil::IsDirectoryEmpty(
FileSystemOperationContext* context,
const FilePath& file_path) {
FilePath local_path =
@@ -223,71 +220,71 @@ bool LocalFileSystemFileUtil::IsDirectoryEmpty(
file_path);
if (local_path.empty())
return true;
- return underlying_file_util_->IsDirectoryEmpty(
+ return underlying_file_util()->IsDirectoryEmpty(
context, local_path);
}
-class LocalFileSystemFileEnumerator
- : public FileSystemFileUtil::AbstractFileEnumerator {
- public:
- LocalFileSystemFileEnumerator(const FilePath& platform_root_path,
- const FilePath& virtual_root_path,
- bool recursive,
- file_util::FileEnumerator::FileType file_type)
- : file_enum_(platform_root_path, recursive, file_type),
- platform_root_path_(platform_root_path),
- virtual_root_path_(virtual_root_path) {
- }
-
- ~LocalFileSystemFileEnumerator() {}
-
- virtual FilePath Next() OVERRIDE;
- virtual int64 Size() OVERRIDE;
- virtual bool IsDirectory() OVERRIDE;
-
- private:
- file_util::FileEnumerator file_enum_;
- file_util::FileEnumerator::FindInfo file_util_info_;
- FilePath platform_root_path_;
- FilePath virtual_root_path_;
-};
-
-FilePath LocalFileSystemFileEnumerator::Next() {
- FilePath next = file_enum_.Next();
- if (next.empty())
- return next;
- file_enum_.GetFindInfo(&file_util_info_);
-
- FilePath path;
- platform_root_path_.AppendRelativePath(next, &path);
- return virtual_root_path_.Append(path);
+PlatformFileError LocalFileUtil::CopyOrMoveFile(
+ FileSystemOperationContext* context,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path,
+ bool copy) {
+ // TODO(ericu): If they share a root URL, this could be optimized.
+ FilePath local_src_path =
+ GetLocalPath(context, context->src_origin_url(), context->src_type(),
+ src_file_path);
+ if (local_src_path.empty())
+ return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
+ FilePath local_dest_path =
+ GetLocalPath(context, context->dest_origin_url(), context->dest_type(),
+ dest_file_path);
+ if (local_dest_path.empty())
+ return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
+ return underlying_file_util()->CopyOrMoveFile(
+ context, local_src_path, local_dest_path, copy);
}
-int64 LocalFileSystemFileEnumerator::Size() {
- return file_util::FileEnumerator::GetFilesize(file_util_info_);
+// TODO(dmikurube): Make it independent from CopyOrMoveFile.
+PlatformFileError LocalFileUtil::CopyInForeignFile(
+ FileSystemOperationContext* context,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path) {
+ if (src_file_path.empty())
+ return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
+ FilePath local_dest_path =
+ GetLocalPath(context, context->dest_origin_url(), context->dest_type(),
+ dest_file_path);
+ if (local_dest_path.empty())
+ return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
+ return underlying_file_util()->CopyOrMoveFile(
+ context, src_file_path, local_dest_path, true);
}
-bool LocalFileSystemFileEnumerator::IsDirectory() {
- return file_util::FileEnumerator::IsDirectory(file_util_info_);
+PlatformFileError LocalFileUtil::DeleteFile(
+ FileSystemOperationContext* context,
+ const FilePath& file_path) {
+ FilePath local_path =
+ GetLocalPath(context, context->src_origin_url(), context->src_type(),
+ file_path);
+ if (local_path.empty())
+ return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
+ return underlying_file_util()->DeleteFile(
+ context, local_path);
}
-FileSystemFileUtil::AbstractFileEnumerator*
-LocalFileSystemFileUtil::CreateFileEnumerator(
+PlatformFileError LocalFileUtil::DeleteSingleDirectory(
FileSystemOperationContext* context,
- const FilePath& root_path) {
+ const FilePath& file_path) {
FilePath local_path =
GetLocalPath(context, context->src_origin_url(), context->src_type(),
- root_path);
+ file_path);
if (local_path.empty())
- return new EmptyFileEnumerator();
- return new LocalFileSystemFileEnumerator(
- local_path, root_path, true,
- static_cast<file_util::FileEnumerator::FileType>(
- file_util::FileEnumerator::FILES |
- file_util::FileEnumerator::DIRECTORIES));
+ return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
+ return underlying_file_util()->DeleteSingleDirectory(
+ context, local_path);
}
-FilePath LocalFileSystemFileUtil::GetLocalPath(
+FilePath LocalFileUtil::GetLocalPath(
FileSystemOperationContext* context,
const GURL& origin_url,
FileSystemType type,
diff --git a/webkit/fileapi/local_file_system_file_util.h b/webkit/fileapi/local_file_util.h
index 314895e..cd564a4 100644
--- a/webkit/fileapi/local_file_system_file_util.h
+++ b/webkit/fileapi/local_file_util.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef WEBKIT_FILEAPI_LOCAL_FILE_SYSTEM_FILE_UTIL_H_
-#define WEBKIT_FILEAPI_LOCAL_FILE_SYSTEM_FILE_UTIL_H_
+#ifndef WEBKIT_FILEAPI_LOCAL_FILE_UTIL_H_
+#define WEBKIT_FILEAPI_LOCAL_FILE_UTIL_H_
#include <vector>
@@ -33,93 +33,77 @@ using base::PlatformFileError;
class FileSystemOperationContext;
// An instance of this class is created and owned by *MountPointProvider.
-class LocalFileSystemFileUtil : public FileSystemFileUtil {
+class LocalFileUtil : public FileSystemFileUtil {
public:
// |underlying_file_util| is owned by the instance. It will be deleted by
// the owner instance. For example, it can be instanciated as follows:
- // FileSystemFileUtil* file_system_file_util =
- // new LocalFileSystemFileUtil(new FileSystemFileUtil());
- explicit LocalFileSystemFileUtil(FileSystemFileUtil* underlying_file_util);
- virtual ~LocalFileSystemFileUtil();
+ // FileSystemFileUtil* file_util = new LocalFileUtil(new NativeFileUtil());
+ explicit LocalFileUtil(FileSystemFileUtil* underlying_file_util);
+ virtual ~LocalFileUtil();
virtual PlatformFileError CreateOrOpen(
FileSystemOperationContext* context,
const FilePath& file_path,
int file_flags,
PlatformFile* file_handle,
- bool* created);
-
+ bool* created) OVERRIDE;
virtual PlatformFileError EnsureFileExists(
FileSystemOperationContext* context,
- const FilePath& file_path, bool* created);
-
- virtual PlatformFileError GetLocalFilePath(
+ const FilePath& file_path, bool* created) OVERRIDE;
+ virtual PlatformFileError CreateDirectory(
FileSystemOperationContext* context,
- const FilePath& virtual_file,
- FilePath* local_path);
-
+ const FilePath& file_path,
+ bool exclusive,
+ bool recursive) OVERRIDE;
virtual PlatformFileError GetFileInfo(
FileSystemOperationContext* context,
const FilePath& file,
base::PlatformFileInfo* file_info,
- FilePath* platform_file);
-
+ FilePath* platform_file) OVERRIDE;
virtual PlatformFileError ReadDirectory(
FileSystemOperationContext* context,
const FilePath& file_path,
- std::vector<base::FileUtilProxy::Entry>* entries);
-
- virtual PlatformFileError CreateDirectory(
- FileSystemOperationContext* context,
- const FilePath& file_path,
- bool exclusive,
- bool recursive);
-
- virtual PlatformFileError CopyOrMoveFile(
- FileSystemOperationContext* context,
- const FilePath& src_file_path,
- const FilePath& dest_file_path,
- bool copy);
-
- virtual PlatformFileError CopyInForeignFile(
- FileSystemOperationContext* context,
- const FilePath& src_file_path,
- const FilePath& dest_file_path);
-
- virtual PlatformFileError DeleteFile(
+ std::vector<base::FileUtilProxy::Entry>* entries) OVERRIDE;
+ virtual AbstractFileEnumerator* CreateFileEnumerator(
FileSystemOperationContext* context,
- const FilePath& file_path);
-
- virtual PlatformFileError DeleteSingleDirectory(
+ const FilePath& root_path) OVERRIDE;
+ virtual PlatformFileError GetLocalFilePath(
FileSystemOperationContext* context,
- const FilePath& file_path);
-
+ const FilePath& virtual_file,
+ FilePath* local_path) OVERRIDE;
virtual PlatformFileError Touch(
FileSystemOperationContext* context,
const FilePath& file_path,
const base::Time& last_access_time,
- const base::Time& last_modified_time);
-
+ const base::Time& last_modified_time) OVERRIDE;
virtual PlatformFileError Truncate(
FileSystemOperationContext* context,
const FilePath& path,
- int64 length);
-
+ int64 length) OVERRIDE;
virtual bool PathExists(
FileSystemOperationContext* context,
- const FilePath& file_path);
-
+ const FilePath& file_path) OVERRIDE;
virtual bool DirectoryExists(
FileSystemOperationContext* context,
- const FilePath& file_path);
-
+ const FilePath& file_path) OVERRIDE;
virtual bool IsDirectoryEmpty(
FileSystemOperationContext* context,
- const FilePath& file_path);
-
- virtual AbstractFileEnumerator* CreateFileEnumerator(
+ const FilePath& file_path) OVERRIDE;
+ virtual PlatformFileError CopyOrMoveFile(
+ FileSystemOperationContext* context,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path,
+ bool copy) OVERRIDE;
+ virtual PlatformFileError CopyInForeignFile(
+ FileSystemOperationContext* context,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path) OVERRIDE;
+ virtual PlatformFileError DeleteFile(
FileSystemOperationContext* context,
- const FilePath& root_path);
+ const FilePath& file_path) OVERRIDE;
+ virtual PlatformFileError DeleteSingleDirectory(
+ FileSystemOperationContext* context,
+ const FilePath& file_path) OVERRIDE;
private:
// Given the filesystem's root URL and a virtual path, produces a real, full
@@ -130,11 +114,9 @@ class LocalFileSystemFileUtil : public FileSystemFileUtil {
FileSystemType type,
const FilePath& virtual_path);
- scoped_ptr<FileSystemFileUtil> underlying_file_util_;
-
- DISALLOW_COPY_AND_ASSIGN(LocalFileSystemFileUtil);
+ DISALLOW_COPY_AND_ASSIGN(LocalFileUtil);
};
} // namespace fileapi
-#endif // WEBKIT_FILEAPI_LOCAL_FILE_SYSTEM_FILE_UTIL_H_
+#endif // WEBKIT_FILEAPI_LOCAL_FILE_UTIL_H_
diff --git a/webkit/fileapi/local_file_system_file_util_unittest.cc b/webkit/fileapi/local_file_util_unittest.cc
index 5f3906e..119d919 100644
--- a/webkit/fileapi/local_file_system_file_util_unittest.cc
+++ b/webkit/fileapi/local_file_util_unittest.cc
@@ -18,16 +18,16 @@
#include "webkit/fileapi/file_system_path_manager.h"
#include "webkit/fileapi/file_system_test_helper.h"
#include "webkit/fileapi/file_system_types.h"
-#include "webkit/fileapi/local_file_system_file_util.h"
+#include "webkit/fileapi/local_file_util.h"
+#include "webkit/fileapi/native_file_util.h"
namespace fileapi {
-// TODO(dmikurube): Cover all public methods in LocalFileSystemFileUtil.
-class LocalFileSystemFileUtilTest : public testing::Test {
+// TODO(dmikurube): Cover all public methods in LocalFileUtil.
+class LocalFileUtilTest : public testing::Test {
public:
- LocalFileSystemFileUtilTest()
- : local_file_util_(
- new LocalFileSystemFileUtil(new FileSystemFileUtil())),
+ LocalFileUtilTest()
+ : local_file_util_(new LocalFileUtil(new NativeFileUtil())),
callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
}
@@ -46,7 +46,7 @@ class LocalFileSystemFileUtilTest : public testing::Test {
return context;
}
- LocalFileSystemFileUtil* FileUtil() {
+ LocalFileUtil* FileUtil() {
return local_file_util_.get();
}
@@ -94,16 +94,16 @@ class LocalFileSystemFileUtilTest : public testing::Test {
}
private:
- scoped_ptr<LocalFileSystemFileUtil> local_file_util_;
+ scoped_ptr<LocalFileUtil> local_file_util_;
ScopedTempDir data_dir_;
FileSystemTestOriginHelper test_helper_;
- base::ScopedCallbackFactory<LocalFileSystemFileUtilTest> callback_factory_;
+ base::ScopedCallbackFactory<LocalFileUtilTest> callback_factory_;
- DISALLOW_COPY_AND_ASSIGN(LocalFileSystemFileUtilTest);
+ DISALLOW_COPY_AND_ASSIGN(LocalFileUtilTest);
};
-TEST_F(LocalFileSystemFileUtilTest, CreateAndClose) {
+TEST_F(LocalFileUtilTest, CreateAndClose) {
const char *file_name = "test_file";
base::PlatformFile file_handle;
bool created;
@@ -119,7 +119,7 @@ TEST_F(LocalFileSystemFileUtilTest, CreateAndClose) {
FileUtil()->Close(context.get(), file_handle));
}
-TEST_F(LocalFileSystemFileUtilTest, EnsureFileExists) {
+TEST_F(LocalFileUtilTest, EnsureFileExists) {
const char *file_name = "foobar";
bool created;
ASSERT_EQ(base::PLATFORM_FILE_OK, EnsureFileExists(file_name, &created));
@@ -132,7 +132,7 @@ TEST_F(LocalFileSystemFileUtilTest, EnsureFileExists) {
EXPECT_FALSE(created);
}
-TEST_F(LocalFileSystemFileUtilTest, Truncate) {
+TEST_F(LocalFileUtilTest, Truncate) {
const char *file_name = "truncated";
bool created;
ASSERT_EQ(base::PLATFORM_FILE_OK, EnsureFileExists(file_name, &created));
@@ -148,7 +148,7 @@ TEST_F(LocalFileSystemFileUtilTest, Truncate) {
EXPECT_EQ(1020, GetSize(file_name));
}
-TEST_F(LocalFileSystemFileUtilTest, CopyFile) {
+TEST_F(LocalFileUtilTest, CopyFile) {
const char *from_file = "fromfile";
const char *to_file1 = "tofile1";
const char *to_file2 = "tofile2";
@@ -180,7 +180,7 @@ TEST_F(LocalFileSystemFileUtilTest, CopyFile) {
EXPECT_EQ(1020, GetSize(to_file2));
}
-TEST_F(LocalFileSystemFileUtilTest, CopyDirectory) {
+TEST_F(LocalFileUtilTest, CopyDirectory) {
const char *from_dir = "fromdir";
const char *from_file = "fromdir/fromfile";
const char *to_dir = "todir";
@@ -215,7 +215,7 @@ TEST_F(LocalFileSystemFileUtilTest, CopyDirectory) {
EXPECT_EQ(1020, GetSize(to_file));
}
-TEST_F(LocalFileSystemFileUtilTest, MoveFile) {
+TEST_F(LocalFileUtilTest, MoveFile) {
const char *from_file = "fromfile";
const char *to_file = "tofile";
bool created;
@@ -239,7 +239,7 @@ TEST_F(LocalFileSystemFileUtilTest, MoveFile) {
EXPECT_EQ(1020, GetSize(to_file));
}
-TEST_F(LocalFileSystemFileUtilTest, MoveDirectory) {
+TEST_F(LocalFileUtilTest, MoveDirectory) {
const char *from_dir = "fromdir";
const char *from_file = "fromdir/fromfile";
const char *to_dir = "todir";
diff --git a/webkit/fileapi/native_file_util.cc b/webkit/fileapi/native_file_util.cc
new file mode 100644
index 0000000..c7ee8fc
--- /dev/null
+++ b/webkit/fileapi/native_file_util.cc
@@ -0,0 +1,291 @@
+// Copyright (c) 2011 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 "webkit/fileapi/native_file_util.h"
+
+#include <vector>
+
+#include "base/file_util.h"
+#include "base/memory/scoped_ptr.h"
+#include "webkit/fileapi/file_system_operation_context.h"
+
+namespace fileapi {
+
+class NativeFileEnumerator : public FileSystemFileUtil::AbstractFileEnumerator {
+ public:
+ NativeFileEnumerator(const FilePath& root_path,
+ bool recursive,
+ file_util::FileEnumerator::FileType file_type)
+ : file_enum_(root_path, recursive, file_type) {
+ }
+
+ ~NativeFileEnumerator() {}
+
+ virtual FilePath Next() OVERRIDE;
+ virtual int64 Size() OVERRIDE;
+ virtual bool IsDirectory() OVERRIDE;
+
+ private:
+ file_util::FileEnumerator file_enum_;
+ file_util::FileEnumerator::FindInfo file_util_info_;
+};
+
+FilePath NativeFileEnumerator::Next() {
+ FilePath rv = file_enum_.Next();
+ if (!rv.empty())
+ file_enum_.GetFindInfo(&file_util_info_);
+ return rv;
+}
+
+int64 NativeFileEnumerator::Size() {
+ return file_util::FileEnumerator::GetFilesize(file_util_info_);
+}
+
+bool NativeFileEnumerator::IsDirectory() {
+ return file_util::FileEnumerator::IsDirectory(file_util_info_);
+}
+
+PlatformFileError NativeFileUtil::CreateOrOpen(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path, int file_flags,
+ PlatformFile* file_handle, bool* created) {
+ if (!file_util::DirectoryExists(file_path.DirName())) {
+ // If its parent does not exist, should return NOT_FOUND error.
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ }
+ PlatformFileError error_code = base::PLATFORM_FILE_OK;
+ *file_handle = base::CreatePlatformFile(file_path, file_flags,
+ created, &error_code);
+ return error_code;
+}
+
+PlatformFileError NativeFileUtil::Close(
+ FileSystemOperationContext* unused,
+ PlatformFile file_handle) {
+ if (!base::ClosePlatformFile(file_handle))
+ return base::PLATFORM_FILE_ERROR_FAILED;
+ return base::PLATFORM_FILE_OK;
+}
+
+PlatformFileError NativeFileUtil::EnsureFileExists(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path,
+ bool* created) {
+ if (!file_util::DirectoryExists(file_path.DirName()))
+ // If its parent does not exist, should return NOT_FOUND error.
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ PlatformFileError error_code = base::PLATFORM_FILE_OK;
+ // Tries to create the |file_path| exclusively. This should fail
+ // with base::PLATFORM_FILE_ERROR_EXISTS if the path already exists.
+ PlatformFile handle = base::CreatePlatformFile(
+ file_path,
+ base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_READ,
+ created, &error_code);
+ if (error_code == base::PLATFORM_FILE_ERROR_EXISTS) {
+ // Make sure created_ is false.
+ if (created)
+ *created = false;
+ error_code = base::PLATFORM_FILE_OK;
+ }
+ if (handle != base::kInvalidPlatformFileValue)
+ base::ClosePlatformFile(handle);
+ return error_code;
+}
+
+PlatformFileError NativeFileUtil::CreateDirectory(
+ FileSystemOperationContext* context,
+ const FilePath& file_path,
+ bool exclusive,
+ bool recursive) {
+ // If parent dir of file doesn't exist.
+ if (!recursive && !file_util::PathExists(file_path.DirName()))
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+
+ bool path_exists = file_util::PathExists(file_path);
+ if (exclusive && path_exists)
+ return base::PLATFORM_FILE_ERROR_EXISTS;
+
+ // If file exists at the path.
+ if (path_exists && !file_util::DirectoryExists(file_path))
+ return base::PLATFORM_FILE_ERROR_EXISTS;
+
+ if (!file_util::CreateDirectory(file_path))
+ return base::PLATFORM_FILE_ERROR_FAILED;
+ return base::PLATFORM_FILE_OK;
+}
+
+PlatformFileError NativeFileUtil::GetFileInfo(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path,
+ base::PlatformFileInfo* file_info,
+ FilePath* platform_file_path) {
+ if (!file_util::PathExists(file_path))
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ // TODO(rkc): Fix this hack once we have refactored file_util to handle
+ // symlinks correctly.
+ // http://code.google.com/p/chromium-os/issues/detail?id=15948
+ if (file_util::IsLink(file_path))
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ if (!file_util::GetFileInfo(file_path, file_info))
+ return base::PLATFORM_FILE_ERROR_FAILED;
+ *platform_file_path = file_path;
+ return base::PLATFORM_FILE_OK;
+}
+
+PlatformFileError NativeFileUtil::ReadDirectory(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path,
+ std::vector<base::FileUtilProxy::Entry>* entries) {
+ // TODO(kkanetkar): Implement directory read in multiple chunks.
+ if (!file_util::DirectoryExists(file_path))
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+
+ file_util::FileEnumerator file_enum(
+ file_path, false, static_cast<file_util::FileEnumerator::FileType>(
+ file_util::FileEnumerator::FILES |
+ file_util::FileEnumerator::DIRECTORIES));
+ FilePath current;
+ while (!(current = file_enum.Next()).empty()) {
+ base::FileUtilProxy::Entry entry;
+ file_util::FileEnumerator::FindInfo info;
+ file_enum.GetFindInfo(&info);
+ entry.is_directory = file_enum.IsDirectory(info);
+ // This will just give the entry's name instead of entire path
+ // if we use current.value().
+ entry.name = file_util::FileEnumerator::GetFilename(info).value();
+ entry.size = file_util::FileEnumerator::GetFilesize(info);
+ entry.last_modified_time =
+ file_util::FileEnumerator::GetLastModifiedTime(info);
+ // TODO(rkc): Fix this also once we've refactored file_util
+ // http://code.google.com/p/chromium-os/issues/detail?id=15948
+ // This currently just prevents a file from showing up at all
+ // if it's a link, hence preventing arbitary 'read' exploits.
+ if (!file_util::IsLink(file_path.Append(entry.name)))
+ entries->push_back(entry);
+ }
+ return base::PLATFORM_FILE_OK;
+}
+
+FileSystemFileUtil::AbstractFileEnumerator*
+NativeFileUtil::CreateFileEnumerator(
+ FileSystemOperationContext* unused,
+ const FilePath& root_path) {
+ return new NativeFileEnumerator(
+ root_path, true, static_cast<file_util::FileEnumerator::FileType>(
+ file_util::FileEnumerator::FILES |
+ file_util::FileEnumerator::DIRECTORIES));
+}
+
+PlatformFileError NativeFileUtil::GetLocalFilePath(
+ FileSystemOperationContext* unused,
+ const FilePath& virtual_path,
+ FilePath* local_path) {
+ *local_path = virtual_path;
+ return base::PLATFORM_FILE_OK;
+}
+
+PlatformFileError NativeFileUtil::Touch(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path,
+ const base::Time& last_access_time,
+ const base::Time& last_modified_time) {
+ if (!file_util::TouchFile(
+ file_path, last_access_time, last_modified_time))
+ return base::PLATFORM_FILE_ERROR_FAILED;
+ return base::PLATFORM_FILE_OK;
+}
+
+PlatformFileError NativeFileUtil::Truncate(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path,
+ int64 length) {
+ PlatformFileError error_code(base::PLATFORM_FILE_ERROR_FAILED);
+ PlatformFile file =
+ base::CreatePlatformFile(
+ file_path,
+ base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE,
+ NULL,
+ &error_code);
+ if (error_code != base::PLATFORM_FILE_OK) {
+ return error_code;
+ }
+ DCHECK_NE(base::kInvalidPlatformFileValue, file);
+ if (!base::TruncatePlatformFile(file, length))
+ error_code = base::PLATFORM_FILE_ERROR_FAILED;
+ base::ClosePlatformFile(file);
+ return error_code;
+}
+
+bool NativeFileUtil::PathExists(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path) {
+ return file_util::PathExists(file_path);
+}
+
+bool NativeFileUtil::DirectoryExists(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path) {
+ return file_util::DirectoryExists(file_path);
+}
+
+bool NativeFileUtil::IsDirectoryEmpty(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path) {
+ return file_util::IsDirectoryEmpty(file_path);
+}
+
+PlatformFileError NativeFileUtil::CopyOrMoveFile(
+ FileSystemOperationContext* unused,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path,
+ bool copy) {
+ if (copy) {
+ if (file_util::CopyFile(src_file_path, dest_file_path))
+ return base::PLATFORM_FILE_OK;
+ } else {
+ DCHECK(!file_util::DirectoryExists(src_file_path));
+ if (file_util::Move(src_file_path, dest_file_path))
+ return base::PLATFORM_FILE_OK;
+ }
+ return base::PLATFORM_FILE_ERROR_FAILED;
+}
+
+PlatformFileError NativeFileUtil::CopyInForeignFile(
+ FileSystemOperationContext* context,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path) {
+ return CopyOrMoveFile(context, src_file_path, dest_file_path, true);
+}
+
+PlatformFileError NativeFileUtil::DeleteFile(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path) {
+ if (!file_util::PathExists(file_path))
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ if (file_util::DirectoryExists(file_path))
+ return base::PLATFORM_FILE_ERROR_NOT_A_FILE;
+ if (!file_util::Delete(file_path, false))
+ return base::PLATFORM_FILE_ERROR_FAILED;
+ return base::PLATFORM_FILE_OK;
+}
+
+PlatformFileError NativeFileUtil::DeleteSingleDirectory(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path) {
+ if (!file_util::PathExists(file_path))
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ if (!file_util::DirectoryExists(file_path)) {
+ // TODO(dmikurube): Check if this error code is appropriate.
+ return base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY;
+ }
+ if (!file_util::IsDirectoryEmpty(file_path)) {
+ // TODO(dmikurube): Check if this error code is appropriate.
+ return base::PLATFORM_FILE_ERROR_NOT_EMPTY;
+ }
+ if (!file_util::Delete(file_path, false))
+ return base::PLATFORM_FILE_ERROR_FAILED;
+ return base::PLATFORM_FILE_OK;
+}
+
+} // namespace fileapi
diff --git a/webkit/fileapi/native_file_util.h b/webkit/fileapi/native_file_util.h
new file mode 100644
index 0000000..5669680
--- /dev/null
+++ b/webkit/fileapi/native_file_util.h
@@ -0,0 +1,103 @@
+// Copyright (c) 2011 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_FILEAPI_NATIVE_FILE_UTIL_H_
+#define WEBKIT_FILEAPI_NATIVE_FILE_UTIL_H_
+
+#include "base/file_path.h"
+#include "base/file_util_proxy.h"
+#include "base/platform_file.h"
+#include "webkit/fileapi/file_system_file_util.h"
+
+namespace base {
+class Time;
+}
+
+namespace fileapi {
+
+using base::PlatformFile;
+using base::PlatformFileError;
+class FileSystemOperationContext;
+
+// TODO(dmikurube): Add unit tests for NativeFileUtil.
+// This class handles accessing the OS native filesystem.
+class NativeFileUtil : public FileSystemFileUtil {
+ public:
+ NativeFileUtil() {}
+ virtual ~NativeFileUtil() {}
+
+ virtual PlatformFileError CreateOrOpen(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path,
+ int file_flags,
+ PlatformFile* file_handle,
+ bool* created) OVERRIDE;
+ virtual PlatformFileError Close(
+ FileSystemOperationContext* unused,
+ PlatformFile) OVERRIDE;
+ virtual PlatformFileError EnsureFileExists(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path, bool* created) OVERRIDE;
+ virtual PlatformFileError CreateDirectory(
+ FileSystemOperationContext* context,
+ const FilePath& file_path,
+ bool exclusive,
+ bool recursive) OVERRIDE;
+ virtual PlatformFileError GetFileInfo(
+ FileSystemOperationContext* unused,
+ const FilePath& file_,
+ base::PlatformFileInfo* file_info,
+ FilePath* platform_path) OVERRIDE;
+ virtual PlatformFileError ReadDirectory(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path,
+ std::vector<base::FileUtilProxy::Entry>* entries) OVERRIDE;
+ virtual AbstractFileEnumerator* CreateFileEnumerator(
+ FileSystemOperationContext* unused,
+ const FilePath& root_path) OVERRIDE;
+ virtual PlatformFileError GetLocalFilePath(
+ FileSystemOperationContext* unused,
+ const FilePath& virtual_path,
+ FilePath* local_path) OVERRIDE;
+ virtual PlatformFileError Touch(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path,
+ const base::Time& last_access_time,
+ const base::Time& last_modified_time) OVERRIDE;
+ virtual PlatformFileError Truncate(
+ FileSystemOperationContext* unused,
+ const FilePath& path,
+ int64 length) OVERRIDE;
+ virtual bool PathExists(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path) OVERRIDE;
+ virtual bool DirectoryExists(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path) OVERRIDE;
+ virtual bool IsDirectoryEmpty(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path) OVERRIDE;
+ virtual PlatformFileError CopyOrMoveFile(
+ FileSystemOperationContext* unused,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path,
+ bool copy) OVERRIDE;
+ virtual PlatformFileError CopyInForeignFile(
+ FileSystemOperationContext* unused,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path) OVERRIDE;
+ virtual PlatformFileError DeleteFile(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path) OVERRIDE;
+ virtual PlatformFileError DeleteSingleDirectory(
+ FileSystemOperationContext* unused,
+ const FilePath& file_path) OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(NativeFileUtil);
+};
+
+} // namespace fileapi
+
+#endif // WEBKIT_FILEAPI_NATIVE_FILE_UTIL_H_
diff --git a/webkit/fileapi/obfuscated_file_system_file_util.cc b/webkit/fileapi/obfuscated_file_util.cc
index 6c51cba..385393b 100644
--- a/webkit/fileapi/obfuscated_file_system_file_util.cc
+++ b/webkit/fileapi/obfuscated_file_util.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "webkit/fileapi/obfuscated_file_system_file_util.h"
+#include "webkit/fileapi/obfuscated_file_util.h"
#include <queue>
#include <string>
@@ -104,18 +104,165 @@ namespace fileapi {
using base::PlatformFile;
using base::PlatformFileError;
-ObfuscatedFileSystemFileUtil::ObfuscatedFileSystemFileUtil(
+class ObfuscatedFileEnumerator
+ : public FileSystemFileUtil::AbstractFileEnumerator {
+ public:
+ ObfuscatedFileEnumerator(
+ const FilePath& base_path,
+ FileSystemDirectoryDatabase* db,
+ FileSystemOperationContext* context,
+ FileSystemFileUtil* underlying_file_util,
+ const FilePath& virtual_root_path)
+ : base_path_(base_path),
+ db_(db),
+ context_(context),
+ underlying_file_util_(underlying_file_util) {
+ DCHECK(db_);
+ DCHECK(context_);
+ DCHECK(underlying_file_util_);
+
+ FileId file_id;
+ FileInfo file_info;
+ if (!db_->GetFileWithPath(virtual_root_path, &file_id))
+ return;
+ if (!db_->GetFileInfo(file_id, &file_info))
+ return;
+ if (!file_info.is_directory())
+ return;
+ FileRecord record = { file_id, file_info, virtual_root_path };
+ display_queue_.push(record);
+ Next(); // Enumerators don't include the directory itself.
+ }
+
+ ~ObfuscatedFileEnumerator() {}
+
+ virtual FilePath Next() OVERRIDE {
+ ProcessRecurseQueue();
+ if (display_queue_.empty())
+ return FilePath();
+ current_ = display_queue_.front();
+ display_queue_.pop();
+ if (current_.file_info.is_directory())
+ recurse_queue_.push(current_);
+ return current_.file_path;
+ }
+
+ virtual int64 Size() OVERRIDE {
+ if (IsDirectory())
+ return 0;
+
+ base::PlatformFileInfo file_info;
+ FilePath platform_file_path;
+
+ FilePath local_path = base_path_.Append(current_.file_info.data_path);
+ base::PlatformFileError error = underlying_file_util_->GetFileInfo(
+ context_, local_path, &file_info, &platform_file_path);
+ if (error != base::PLATFORM_FILE_OK) {
+ LOG(WARNING) << "Lost a backing file.";
+ return 0;
+ }
+ return file_info.size;
+ }
+
+ virtual bool IsDirectory() OVERRIDE {
+ return current_.file_info.is_directory();
+ }
+
+ private:
+ typedef FileSystemDirectoryDatabase::FileId FileId;
+ typedef FileSystemDirectoryDatabase::FileInfo FileInfo;
+
+ struct FileRecord {
+ FileId file_id;
+ FileInfo file_info;
+ FilePath file_path;
+ };
+
+ void ProcessRecurseQueue() {
+ while (display_queue_.empty() && !recurse_queue_.empty()) {
+ FileRecord directory = recurse_queue_.front();
+ std::vector<FileId> children;
+ recurse_queue_.pop();
+ if (!db_->ListChildren(directory.file_id, &children))
+ return;
+ std::vector<FileId>::iterator iter;
+ for (iter = children.begin(); iter != children.end(); ++iter) {
+ FileRecord child;
+ child.file_id = *iter;
+ if (!db_->GetFileInfo(child.file_id, &child.file_info))
+ return;
+ child.file_path = directory.file_path.Append(child.file_info.name);
+ display_queue_.push(child);
+ }
+ }
+ }
+
+ std::queue<FileRecord> display_queue_;
+ std::queue<FileRecord> recurse_queue_;
+ FileRecord current_;
+ FilePath base_path_;
+ FileSystemDirectoryDatabase* db_;
+ FileSystemOperationContext* context_;
+ FileSystemFileUtil* underlying_file_util_;
+};
+
+class ObfuscatedOriginEnumerator
+ : public ObfuscatedFileUtil::AbstractOriginEnumerator {
+ public:
+ typedef FileSystemOriginDatabase::OriginRecord OriginRecord;
+ ObfuscatedOriginEnumerator(
+ FileSystemOriginDatabase* origin_database,
+ const FilePath& base_path)
+ : base_path_(base_path) {
+ if (origin_database)
+ origin_database->ListAllOrigins(&origins_);
+ }
+
+ ~ObfuscatedOriginEnumerator() {}
+
+ // Returns the next origin. Returns empty if there are no more origins.
+ virtual GURL Next() OVERRIDE {
+ OriginRecord record;
+ if (!origins_.empty()) {
+ record = origins_.back();
+ origins_.pop_back();
+ }
+ current_ = record;
+ return GetOriginURLFromIdentifier(record.origin);
+ }
+
+ // Returns the current origin's information.
+ virtual bool HasFileSystemType(FileSystemType type) const OVERRIDE {
+ if (current_.path.empty())
+ return false;
+ FilePath::StringType type_string =
+ ObfuscatedFileUtil::GetDirectoryNameForType(type);
+ if (type_string.empty()) {
+ NOTREACHED();
+ return false;
+ }
+ FilePath path = base_path_.Append(current_.path).Append(type_string);
+ return file_util::DirectoryExists(path);
+ }
+
+ private:
+ std::vector<OriginRecord> origins_;
+ OriginRecord current_;
+ FilePath base_path_;
+};
+
+ObfuscatedFileUtil::ObfuscatedFileUtil(
const FilePath& file_system_directory,
FileSystemFileUtil* underlying_file_util)
- : file_system_directory_(file_system_directory),
- underlying_file_util_(underlying_file_util) {
+ : FileSystemFileUtil(underlying_file_util),
+ file_system_directory_(file_system_directory) {
}
-ObfuscatedFileSystemFileUtil::~ObfuscatedFileSystemFileUtil() {
+ObfuscatedFileUtil::~ObfuscatedFileUtil() {
DropDatabases();
}
-PlatformFileError ObfuscatedFileSystemFileUtil::CreateOrOpen(
+PlatformFileError ObfuscatedFileUtil::CreateOrOpen(
FileSystemOperationContext* context,
const FilePath& virtual_path, int file_flags,
PlatformFile* file_handle, bool* created) {
@@ -158,7 +305,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CreateOrOpen(
return base::PLATFORM_FILE_ERROR_NOT_A_FILE;
FilePath local_path = DataPathToLocalPath(context->src_origin_url(),
context->src_type(), file_info.data_path);
- base::PlatformFileError error = underlying_file_util_->CreateOrOpen(
+ base::PlatformFileError error = underlying_file_util()->CreateOrOpen(
context, local_path, file_flags, file_handle, created);
if (error == base::PLATFORM_FILE_ERROR_NOT_FOUND) {
// TODO(tzik): Also invalidate on-memory usage cache in UsageTracker.
@@ -172,7 +319,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CreateOrOpen(
return error;
}
-PlatformFileError ObfuscatedFileSystemFileUtil::EnsureFileExists(
+PlatformFileError ObfuscatedFileUtil::EnsureFileExists(
FileSystemOperationContext* context,
const FilePath& virtual_path,
bool* created) {
@@ -208,21 +355,62 @@ PlatformFileError ObfuscatedFileSystemFileUtil::EnsureFileExists(
return error;
}
-PlatformFileError ObfuscatedFileSystemFileUtil::GetLocalFilePath(
+PlatformFileError ObfuscatedFileUtil::CreateDirectory(
FileSystemOperationContext* context,
const FilePath& virtual_path,
- FilePath* local_path) {
- FilePath path =
- GetLocalPath(context->src_origin_url(), context->src_type(),
- virtual_path);
- if (path.empty())
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ bool exclusive,
+ bool recursive) {
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
+ context->src_origin_url(), context->src_type(), true);
+ if (!db)
+ return base::PLATFORM_FILE_ERROR_FAILED;
+ FileId file_id;
+ if (db->GetFileWithPath(virtual_path, &file_id)) {
+ FileInfo file_info;
+ if (exclusive)
+ return base::PLATFORM_FILE_ERROR_EXISTS;
+ if (!db->GetFileInfo(file_id, &file_info)) {
+ NOTREACHED();
+ return base::PLATFORM_FILE_ERROR_FAILED;
+ }
+ if (!file_info.is_directory())
+ return base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY;
+ return base::PLATFORM_FILE_OK;
+ }
- *local_path = path;
+ std::vector<FilePath::StringType> components;
+ virtual_path.GetComponents(&components);
+ FileId parent_id = 0;
+ size_t index;
+ for (index = 0; index < components.size(); ++index) {
+ FilePath::StringType name = components[index];
+ if (name == FILE_PATH_LITERAL("/"))
+ continue;
+ if (!db->GetChildWithName(parent_id, name, &parent_id))
+ break;
+ }
+ if (!recursive && components.size() - index > 1)
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ for (; index < components.size(); ++index) {
+ FileInfo file_info;
+ file_info.name = components[index];
+ if (file_info.name == FILE_PATH_LITERAL("/"))
+ continue;
+ file_info.modification_time = base::Time::Now();
+ file_info.parent_id = parent_id;
+ if (!AllocateQuotaForPath(context, 1, file_info.name.size()))
+ return base::PLATFORM_FILE_ERROR_NO_SPACE;
+ if (!db->AddFileInfo(file_info, &parent_id)) {
+ NOTREACHED();
+ return base::PLATFORM_FILE_ERROR_FAILED;
+ }
+ UpdatePathQuotaUsage(context, context->src_origin_url(),
+ context->src_type(), 1, file_info.name.size());
+ }
return base::PLATFORM_FILE_OK;
}
-PlatformFileError ObfuscatedFileSystemFileUtil::GetFileInfo(
+PlatformFileError ObfuscatedFileUtil::GetFileInfo(
FileSystemOperationContext* context,
const FilePath& virtual_path,
base::PlatformFileInfo* file_info,
@@ -239,7 +427,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::GetFileInfo(
&local_info, file_info, platform_file_path);
}
-PlatformFileError ObfuscatedFileSystemFileUtil::ReadDirectory(
+PlatformFileError ObfuscatedFileUtil::ReadDirectory(
FileSystemOperationContext* context,
const FilePath& virtual_path,
std::vector<base::FileUtilProxy::Entry>* entries) {
@@ -295,62 +483,145 @@ PlatformFileError ObfuscatedFileSystemFileUtil::ReadDirectory(
return base::PLATFORM_FILE_OK;
}
-PlatformFileError ObfuscatedFileSystemFileUtil::CreateDirectory(
+FileSystemFileUtil::AbstractFileEnumerator*
+ObfuscatedFileUtil::CreateFileEnumerator(
+ FileSystemOperationContext* context,
+ const FilePath& root_path) {
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
+ context->src_origin_url(), context->src_type(), false);
+ if (!db)
+ return new FileSystemFileUtil::EmptyFileEnumerator();
+ return new ObfuscatedFileEnumerator(
+ GetDirectoryForOriginAndType(context->src_origin_url(),
+ context->src_type(), false),
+ db,
+ context,
+ underlying_file_util(),
+ root_path);
+}
+
+PlatformFileError ObfuscatedFileUtil::GetLocalFilePath(
FileSystemOperationContext* context,
const FilePath& virtual_path,
- bool exclusive,
- bool recursive) {
+ FilePath* local_path) {
+ FilePath path =
+ GetLocalPath(context->src_origin_url(), context->src_type(),
+ virtual_path);
+ if (path.empty())
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+
+ *local_path = path;
+ return base::PLATFORM_FILE_OK;
+}
+
+PlatformFileError ObfuscatedFileUtil::Touch(
+ FileSystemOperationContext* context,
+ const FilePath& virtual_path,
+ const base::Time& last_access_time,
+ const base::Time& last_modified_time) {
FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
- context->src_origin_url(), context->src_type(), true);
+ context->src_origin_url(), context->src_type(), false);
if (!db)
- return base::PLATFORM_FILE_ERROR_FAILED;
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
FileId file_id;
- if (db->GetFileWithPath(virtual_path, &file_id)) {
- FileInfo file_info;
- if (exclusive)
- return base::PLATFORM_FILE_ERROR_EXISTS;
- if (!db->GetFileInfo(file_id, &file_info)) {
- NOTREACHED();
+ if (!db->GetFileWithPath(virtual_path, &file_id))
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+
+ FileInfo file_info;
+ if (!db->GetFileInfo(file_id, &file_info)) {
+ NOTREACHED();
+ return base::PLATFORM_FILE_ERROR_FAILED;
+ }
+ if (file_info.is_directory()) {
+ file_info.modification_time = last_modified_time;
+ if (!db->UpdateFileInfo(file_id, file_info))
return base::PLATFORM_FILE_ERROR_FAILED;
- }
- if (!file_info.is_directory())
- return base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY;
return base::PLATFORM_FILE_OK;
}
+ FilePath data_path = DataPathToLocalPath(context->src_origin_url(),
+ context->src_type(), file_info.data_path);
+ return underlying_file_util()->Touch(
+ context, data_path, last_access_time, last_modified_time);
+}
- std::vector<FilePath::StringType> components;
- virtual_path.GetComponents(&components);
- FileId parent_id = 0;
- size_t index;
- for (index = 0; index < components.size(); ++index) {
- FilePath::StringType name = components[index];
- if (name == FILE_PATH_LITERAL("/"))
- continue;
- if (!db->GetChildWithName(parent_id, name, &parent_id))
- break;
- }
- if (!recursive && components.size() - index > 1)
+PlatformFileError ObfuscatedFileUtil::Truncate(
+ FileSystemOperationContext* context,
+ const FilePath& virtual_path,
+ int64 length) {
+ FilePath local_path =
+ GetLocalPath(context->src_origin_url(), context->src_type(),
+ virtual_path);
+ if (local_path.empty())
return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- for (; index < components.size(); ++index) {
- FileInfo file_info;
- file_info.name = components[index];
- if (file_info.name == FILE_PATH_LITERAL("/"))
- continue;
- file_info.modification_time = base::Time::Now();
- file_info.parent_id = parent_id;
- if (!AllocateQuotaForPath(context, 1, file_info.name.size()))
- return base::PLATFORM_FILE_ERROR_NO_SPACE;
- if (!db->AddFileInfo(file_info, &parent_id)) {
- NOTREACHED();
- return base::PLATFORM_FILE_ERROR_FAILED;
- }
- UpdatePathQuotaUsage(context, context->src_origin_url(),
- context->src_type(), 1, file_info.name.size());
+ return underlying_file_util()->Truncate(
+ context, local_path, length);
+}
+
+bool ObfuscatedFileUtil::PathExists(
+ FileSystemOperationContext* context,
+ const FilePath& virtual_path) {
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
+ context->src_origin_url(), context->src_type(), false);
+ if (!db)
+ return false;
+ FileId file_id;
+ return db->GetFileWithPath(virtual_path, &file_id);
+}
+
+bool ObfuscatedFileUtil::DirectoryExists(
+ FileSystemOperationContext* context,
+ const FilePath& virtual_path) {
+ if (IsRootDirectory(virtual_path)) {
+ // It's questionable whether we should return true or false for the
+ // root directory of nonexistent origin, but here we return true
+ // as the current implementation of ReadDirectory always returns an empty
+ // array (rather than erroring out with NOT_FOUND_ERR even) for
+ // nonexistent origins.
+ // Note: if you're going to change this behavior please also consider
+ // changiing the ReadDirectory's behavior!
+ return true;
}
- return base::PLATFORM_FILE_OK;
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
+ context->src_origin_url(), context->src_type(), false);
+ if (!db)
+ return false;
+ FileId file_id;
+ if (!db->GetFileWithPath(virtual_path, &file_id))
+ return false;
+ FileInfo file_info;
+ if (!db->GetFileInfo(file_id, &file_info)) {
+ NOTREACHED();
+ return false;
+ }
+ return file_info.is_directory();
}
-PlatformFileError ObfuscatedFileSystemFileUtil::CopyOrMoveFile(
+bool ObfuscatedFileUtil::IsDirectoryEmpty(
+ FileSystemOperationContext* context,
+ const FilePath& virtual_path) {
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
+ context->src_origin_url(), context->src_type(), false);
+ if (!db)
+ return true; // Not a great answer, but it's what others do.
+ FileId file_id;
+ if (!db->GetFileWithPath(virtual_path, &file_id))
+ return true; // Ditto.
+ FileInfo file_info;
+ if (!db->GetFileInfo(file_id, &file_info)) {
+ DCHECK(!file_id);
+ // It's the root directory and the database hasn't been initialized yet.
+ return true;
+ }
+ if (!file_info.is_directory())
+ return true;
+ std::vector<FileId> children;
+ // TODO(ericu): This could easily be made faster with help from the database.
+ if (!db->ListChildren(file_id, &children))
+ return true;
+ return children.empty();
+}
+
+PlatformFileError ObfuscatedFileUtil::CopyOrMoveFile(
FileSystemOperationContext* context,
const FilePath& src_file_path,
const FilePath& dest_file_path,
@@ -399,7 +670,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CopyOrMoveFile(
if (copy) {
FilePath src_data_path = DataPathToLocalPath(context->src_origin_url(),
context->src_type(), src_file_info.data_path);
- if (!underlying_file_util_->PathExists(context, src_data_path)) {
+ if (!underlying_file_util()->PathExists(context, src_data_path)) {
// TODO(tzik): Also invalidate on-memory usage cache in UsageTracker.
context->file_system_context()->GetQuotaUtil(context->src_type())->
InvalidateUsageCache(context->src_origin_url(),
@@ -411,7 +682,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CopyOrMoveFile(
if (overwrite) {
FilePath dest_data_path = DataPathToLocalPath(context->src_origin_url(),
context->src_type(), dest_file_info.data_path);
- return underlying_file_util_->CopyOrMoveFile(context,
+ return underlying_file_util()->CopyOrMoveFile(context,
src_data_path, dest_data_path, copy);
} else {
FileId dest_parent_id;
@@ -436,7 +707,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CopyOrMoveFile(
FilePath dest_data_path = DataPathToLocalPath(context->src_origin_url(),
context->src_type(), dest_file_info.data_path);
if (base::PLATFORM_FILE_OK !=
- underlying_file_util_->DeleteFile(context, dest_data_path))
+ underlying_file_util()->DeleteFile(context, dest_data_path))
LOG(WARNING) << "Leaked a backing file.";
UpdatePathQuotaUsage(context, context->src_origin_url(),
context->src_type(), -1,
@@ -468,7 +739,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CopyOrMoveFile(
return base::PLATFORM_FILE_ERROR_FAILED;
}
-PlatformFileError ObfuscatedFileSystemFileUtil::CopyInForeignFile(
+PlatformFileError ObfuscatedFileUtil::CopyInForeignFile(
FileSystemOperationContext* context,
const FilePath& src_file_path,
const FilePath& dest_file_path) {
@@ -487,7 +758,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CopyInForeignFile(
}
FilePath dest_data_path = DataPathToLocalPath(context->dest_origin_url(),
context->dest_type(), dest_file_info.data_path);
- return underlying_file_util_->CopyOrMoveFile(context,
+ return underlying_file_util()->CopyOrMoveFile(context,
src_file_path, dest_data_path, true /* copy */);
} else {
FileId dest_parent_id;
@@ -505,7 +776,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CopyInForeignFile(
return base::PLATFORM_FILE_ERROR_FAILED;
}
-PlatformFileError ObfuscatedFileSystemFileUtil::DeleteFile(
+PlatformFileError ObfuscatedFileUtil::DeleteFile(
FileSystemOperationContext* context,
const FilePath& virtual_path) {
FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
@@ -530,12 +801,12 @@ PlatformFileError ObfuscatedFileSystemFileUtil::DeleteFile(
FilePath data_path = DataPathToLocalPath(context->src_origin_url(),
context->src_type(), file_info.data_path);
if (base::PLATFORM_FILE_OK !=
- underlying_file_util_->DeleteFile(context, data_path))
+ underlying_file_util()->DeleteFile(context, data_path))
LOG(WARNING) << "Leaked a backing file.";
return base::PLATFORM_FILE_OK;
}
-PlatformFileError ObfuscatedFileSystemFileUtil::DeleteSingleDirectory(
+PlatformFileError ObfuscatedFileUtil::DeleteSingleDirectory(
FileSystemOperationContext* context,
const FilePath& virtual_path) {
FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
@@ -558,287 +829,178 @@ PlatformFileError ObfuscatedFileSystemFileUtil::DeleteSingleDirectory(
return base::PLATFORM_FILE_OK;
}
-PlatformFileError ObfuscatedFileSystemFileUtil::Touch(
- FileSystemOperationContext* context,
- const FilePath& virtual_path,
- const base::Time& last_access_time,
- const base::Time& last_modified_time) {
- FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
- context->src_origin_url(), context->src_type(), false);
- if (!db)
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- FileId file_id;
- if (!db->GetFileWithPath(virtual_path, &file_id))
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
-
- FileInfo file_info;
- if (!db->GetFileInfo(file_id, &file_info)) {
- NOTREACHED();
- return base::PLATFORM_FILE_ERROR_FAILED;
- }
- if (file_info.is_directory()) {
- file_info.modification_time = last_modified_time;
- if (!db->UpdateFileInfo(file_id, file_info))
- return base::PLATFORM_FILE_ERROR_FAILED;
- return base::PLATFORM_FILE_OK;
+FilePath ObfuscatedFileUtil::GetDirectoryForOriginAndType(
+ const GURL& origin, FileSystemType type, bool create) {
+ FilePath origin_dir = GetDirectoryForOrigin(origin, create);
+ if (origin_dir.empty())
+ return FilePath();
+ FilePath::StringType type_string = GetDirectoryNameForType(type);
+ if (type_string.empty()) {
+ LOG(WARNING) << "Unknown filesystem type requested:" << type;
+ return FilePath();
}
- FilePath data_path = DataPathToLocalPath(context->src_origin_url(),
- context->src_type(), file_info.data_path);
- return underlying_file_util_->Touch(
- context, data_path, last_access_time, last_modified_time);
+ FilePath path = origin_dir.Append(type_string);
+ if (!file_util::DirectoryExists(path) &&
+ (!create || !file_util::CreateDirectory(path)))
+ return FilePath();
+ return path;
}
-PlatformFileError ObfuscatedFileSystemFileUtil::Truncate(
- FileSystemOperationContext* context,
- const FilePath& virtual_path,
- int64 length) {
- FilePath local_path =
- GetLocalPath(context->src_origin_url(), context->src_type(),
- virtual_path);
- if (local_path.empty())
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- return underlying_file_util_->Truncate(
- context, local_path, length);
-}
+bool ObfuscatedFileUtil::DeleteDirectoryForOriginAndType(
+ const GURL& origin, FileSystemType type) {
+ FilePath origin_type_path = GetDirectoryForOriginAndType(origin, type, false);
+ if (!file_util::PathExists(origin_type_path))
+ return true;
-bool ObfuscatedFileSystemFileUtil::PathExists(
- FileSystemOperationContext* context,
- const FilePath& virtual_path) {
- FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
- context->src_origin_url(), context->src_type(), false);
- if (!db)
+ // TODO(dmikurube): Consider the return value of DestroyDirectoryDatabase.
+ // We ignore its error now since 1) it doesn't matter the final result, and
+ // 2) it always returns false in Windows because of LevelDB's implementation.
+ // Information about failure would be useful for debugging.
+ DestroyDirectoryDatabase(origin, type);
+ if (!file_util::Delete(origin_type_path, true /* recursive */))
return false;
- FileId file_id;
- return db->GetFileWithPath(virtual_path, &file_id);
-}
-bool ObfuscatedFileSystemFileUtil::DirectoryExists(
- FileSystemOperationContext* context,
- const FilePath& virtual_path) {
- if (IsRootDirectory(virtual_path)) {
- // It's questionable whether we should return true or false for the
- // root directory of nonexistent origin, but here we return true
- // as the current implementation of ReadDirectory always returns an empty
- // array (rather than erroring out with NOT_FOUND_ERR even) for
- // nonexistent origins.
- // Note: if you're going to change this behavior please also consider
- // changiing the ReadDirectory's behavior!
- return true;
- }
- FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
- context->src_origin_url(), context->src_type(), false);
- if (!db)
- return false;
- FileId file_id;
- if (!db->GetFileWithPath(virtual_path, &file_id))
- return false;
- FileInfo file_info;
- if (!db->GetFileInfo(file_id, &file_info)) {
- NOTREACHED();
- return false;
+ FilePath origin_path = origin_type_path.DirName();
+ DCHECK_EQ(origin_path.value(), GetDirectoryForOrigin(origin, false).value());
+
+ // Delete the origin directory if the deleted one was the last remaining
+ // type for the origin.
+ if (file_util::Delete(origin_path, false /* recursive */)) {
+ InitOriginDatabase(false);
+ if (origin_database_.get())
+ origin_database_->RemovePathForOrigin(GetOriginIdentifierFromURL(origin));
}
- return file_info.is_directory();
+
+ // At this point we are sure we had successfully deleted the origin/type
+ // directory, so just returning true here.
+ return true;
}
-bool ObfuscatedFileSystemFileUtil::IsDirectoryEmpty(
- FileSystemOperationContext* context,
- const FilePath& virtual_path) {
+bool ObfuscatedFileUtil::MigrateFromOldSandbox(
+ const GURL& origin_url, FileSystemType type, const FilePath& src_root) {
+ if (!DestroyDirectoryDatabase(origin_url, type))
+ return false;
+ FilePath dest_root = GetDirectoryForOriginAndType(origin_url, type, true);
+ if (dest_root.empty())
+ return false;
FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
- context->src_origin_url(), context->src_type(), false);
+ origin_url, type, true);
if (!db)
- return true; // Not a great answer, but it's what others do.
- FileId file_id;
- if (!db->GetFileWithPath(virtual_path, &file_id))
- return true; // Ditto.
- FileInfo file_info;
- if (!db->GetFileInfo(file_id, &file_info)) {
- DCHECK(!file_id);
- // It's the root directory and the database hasn't been initialized yet.
- return true;
- }
- if (!file_info.is_directory())
- return true;
- std::vector<FileId> children;
- // TODO(ericu): This could easily be made faster with help from the database.
- if (!db->ListChildren(file_id, &children))
- return true;
- return children.empty();
-}
-
-class ObfuscatedFileSystemFileEnumerator
- : public FileSystemFileUtil::AbstractFileEnumerator {
- public:
- ObfuscatedFileSystemFileEnumerator(
- const FilePath& base_path,
- FileSystemDirectoryDatabase* db,
- FileSystemOperationContext* context,
- FileSystemFileUtil* underlying_file_util,
- const FilePath& virtual_root_path)
- : base_path_(base_path),
- db_(db),
- context_(context),
- underlying_file_util_(underlying_file_util) {
- DCHECK(db_);
- DCHECK(context_);
- DCHECK(underlying_file_util_);
-
- FileId file_id;
- FileInfo file_info;
- if (!db_->GetFileWithPath(virtual_root_path, &file_id))
- return;
- if (!db_->GetFileInfo(file_id, &file_info))
- return;
- if (!file_info.is_directory())
- return;
- FileRecord record = { file_id, file_info, virtual_root_path };
- display_queue_.push(record);
- Next(); // Enumerators don't include the directory itself.
- }
-
- ~ObfuscatedFileSystemFileEnumerator() {}
-
- virtual FilePath Next() OVERRIDE {
- ProcessRecurseQueue();
- if (display_queue_.empty())
- return FilePath();
- current_ = display_queue_.front();
- display_queue_.pop();
- if (current_.file_info.is_directory())
- recurse_queue_.push(current_);
- return current_.file_path;
- }
-
- virtual int64 Size() OVERRIDE {
- if (IsDirectory())
- return 0;
-
- base::PlatformFileInfo file_info;
- FilePath platform_file_path;
+ return false;
- FilePath local_path = base_path_.Append(current_.file_info.data_path);
- base::PlatformFileError error = underlying_file_util_->GetFileInfo(
- context_, local_path, &file_info, &platform_file_path);
- if (error != base::PLATFORM_FILE_OK) {
- LOG(WARNING) << "Lost a backing file.";
- return 0;
+ file_util::FileEnumerator file_enum(src_root, true,
+ static_cast<file_util::FileEnumerator::FileType>(
+ file_util::FileEnumerator::FILES |
+ file_util::FileEnumerator::DIRECTORIES));
+ FilePath src_full_path;
+ size_t root_path_length = src_root.value().length() + 1; // +1 for the slash
+ while (!(src_full_path = file_enum.Next()).empty()) {
+ file_util::FileEnumerator::FindInfo info;
+ file_enum.GetFindInfo(&info);
+ FilePath relative_virtual_path =
+ FilePath(src_full_path.value().substr(root_path_length));
+ if (relative_virtual_path.empty()) {
+ LOG(WARNING) << "Failed to convert path to relative: " <<
+ src_full_path.value();
+ return false;
}
- return file_info.size;
- }
-
- virtual bool IsDirectory() OVERRIDE {
- return current_.file_info.is_directory();
- }
-
- private:
- typedef FileSystemDirectoryDatabase::FileId FileId;
- typedef FileSystemDirectoryDatabase::FileInfo FileInfo;
-
- struct FileRecord {
FileId file_id;
- FileInfo file_info;
- FilePath file_path;
- };
-
- void ProcessRecurseQueue() {
- while (display_queue_.empty() && !recurse_queue_.empty()) {
- FileRecord directory = recurse_queue_.front();
- std::vector<FileId> children;
- recurse_queue_.pop();
- if (!db_->ListChildren(directory.file_id, &children))
- return;
- std::vector<FileId>::iterator iter;
- for (iter = children.begin(); iter != children.end(); ++iter) {
- FileRecord child;
- child.file_id = *iter;
- if (!db_->GetFileInfo(child.file_id, &child.file_info))
- return;
- child.file_path = directory.file_path.Append(child.file_info.name);
- display_queue_.push(child);
- }
+ if (db->GetFileWithPath(relative_virtual_path, &file_id)) {
+ NOTREACHED(); // File already exists.
+ return false;
}
- }
-
- std::queue<FileRecord> display_queue_;
- std::queue<FileRecord> recurse_queue_;
- FileRecord current_;
- FilePath base_path_;
- FileSystemDirectoryDatabase* db_;
- FileSystemOperationContext* context_;
- FileSystemFileUtil* underlying_file_util_;
-};
-
-class ObfuscatedFileSystemOriginEnumerator
- : public ObfuscatedFileSystemFileUtil::AbstractOriginEnumerator {
- public:
- typedef FileSystemOriginDatabase::OriginRecord OriginRecord;
- ObfuscatedFileSystemOriginEnumerator(
- FileSystemOriginDatabase* origin_database,
- const FilePath& base_path)
- : base_path_(base_path) {
- if (origin_database)
- origin_database->ListAllOrigins(&origins_);
- }
-
- ~ObfuscatedFileSystemOriginEnumerator() {}
-
- // Returns the next origin. Returns empty if there are no more origins.
- virtual GURL Next() OVERRIDE {
- OriginRecord record;
- if (!origins_.empty()) {
- record = origins_.back();
- origins_.pop_back();
+ if (!db->GetFileWithPath(relative_virtual_path.DirName(), &file_id)) {
+ NOTREACHED(); // Parent doesn't exist.
+ return false;
}
- current_ = record;
- return GetOriginURLFromIdentifier(record.origin);
- }
- // Returns the current origin's information.
- virtual bool HasFileSystemType(FileSystemType type) const OVERRIDE {
- if (current_.path.empty())
- return false;
- FilePath::StringType type_string =
- ObfuscatedFileSystemFileUtil::GetDirectoryNameForType(type);
- if (type_string.empty()) {
+ FileInfo file_info;
+ file_info.name = src_full_path.BaseName().value();
+ if (file_util::FileEnumerator::IsDirectory(info)) {
+#if defined(OS_WIN)
+ file_info.modification_time =
+ base::Time::FromFileTime(info.ftLastWriteTime);
+#elif defined(OS_POSIX)
+ file_info.modification_time = base::Time::FromTimeT(info.stat.st_mtime);
+#endif
+ } else {
+ file_info.data_path =
+ FilePath(kLegacyDataDirectory).Append(relative_virtual_path);
+ }
+ file_info.parent_id = file_id;
+ if (!db->AddFileInfo(file_info, &file_id)) {
NOTREACHED();
return false;
}
- FilePath path = base_path_.Append(current_.path).Append(type_string);
- return file_util::DirectoryExists(path);
}
+ // TODO(ericu): Should we adjust the mtime of the root directory to match as
+ // well?
+ FilePath legacy_dest_dir = dest_root.Append(kLegacyDataDirectory);
- private:
- std::vector<OriginRecord> origins_;
- OriginRecord current_;
- FilePath base_path_;
-};
+ if (!file_util::Move(src_root, legacy_dest_dir)) {
+ LOG(WARNING) <<
+ "The final step of a migration failed; I'll try to clean up.";
+ db = NULL;
+ DestroyDirectoryDatabase(origin_url, type);
+ return false;
+ }
+ return true;
+}
-ObfuscatedFileSystemFileUtil::AbstractOriginEnumerator*
-ObfuscatedFileSystemFileUtil::CreateOriginEnumerator() {
+// static
+FilePath::StringType ObfuscatedFileUtil::GetDirectoryNameForType(
+ FileSystemType type) {
+ switch (type) {
+ case kFileSystemTypeTemporary:
+ return kTemporaryDirectoryName;
+ case kFileSystemTypePersistent:
+ return kPersistentDirectoryName;
+ case kFileSystemTypeUnknown:
+ default:
+ return FilePath::StringType();
+ }
+}
+
+ObfuscatedFileUtil::AbstractOriginEnumerator*
+ObfuscatedFileUtil::CreateOriginEnumerator() {
std::vector<FileSystemOriginDatabase::OriginRecord> origins;
InitOriginDatabase(false);
- return new ObfuscatedFileSystemOriginEnumerator(
+ return new ObfuscatedOriginEnumerator(
origin_database_.get(), file_system_directory_);
}
-FileSystemFileUtil::AbstractFileEnumerator*
-ObfuscatedFileSystemFileUtil::CreateFileEnumerator(
- FileSystemOperationContext* context,
- const FilePath& root_path) {
- FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
- context->src_origin_url(), context->src_type(), false);
- if (!db)
- return new FileSystemFileUtil::EmptyFileEnumerator();
- return new ObfuscatedFileSystemFileEnumerator(
- GetDirectoryForOriginAndType(context->src_origin_url(),
- context->src_type(), false),
- db,
- context,
- underlying_file_util_.get(),
- root_path);
+bool ObfuscatedFileUtil::DestroyDirectoryDatabase(
+ const GURL& origin, FileSystemType type) {
+ std::string type_string =
+ FileSystemPathManager::GetFileSystemTypeString(type);
+ if (type_string.empty()) {
+ LOG(WARNING) << "Unknown filesystem type requested:" << type;
+ return true;
+ }
+ std::string key = GetOriginIdentifierFromURL(origin) + type_string;
+ DirectoryMap::iterator iter = directories_.find(key);
+ if (iter != directories_.end()) {
+ FileSystemDirectoryDatabase* database = iter->second;
+ directories_.erase(iter);
+ delete database;
+ }
+
+ FilePath path = GetDirectoryForOriginAndType(origin, type, false);
+ if (path.empty())
+ return true;
+ if (!file_util::DirectoryExists(path))
+ return true;
+ path = path.AppendASCII(kDirectoryDatabaseName);
+ return FileSystemDirectoryDatabase::DestroyDatabase(path);
}
-PlatformFileError ObfuscatedFileSystemFileUtil::GetFileInfoInternal(
+// static
+int64 ObfuscatedFileUtil::ComputeFilePathCost(const FilePath& path) {
+ return GetPathQuotaUsage(1, path.BaseName().value().size());
+}
+
+PlatformFileError ObfuscatedFileUtil::GetFileInfoInternal(
FileSystemDirectoryDatabase* db,
FileSystemOperationContext* context,
FileId file_id,
@@ -867,11 +1029,11 @@ PlatformFileError ObfuscatedFileSystemFileUtil::GetFileInfoInternal(
return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
FilePath data_path = DataPathToLocalPath(context->src_origin_url(),
context->src_type(), local_info->data_path);
- return underlying_file_util_->GetFileInfo(
+ return underlying_file_util()->GetFileInfo(
context, data_path, file_info, platform_file_path);
}
-PlatformFileError ObfuscatedFileSystemFileUtil::CreateFile(
+PlatformFileError ObfuscatedFileUtil::CreateFile(
FileSystemOperationContext* context,
const GURL& origin_url, FileSystemType type, const FilePath& source_path,
FileInfo* file_info, int file_flags, PlatformFile* handle) {
@@ -894,7 +1056,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CreateFile(
local_path = local_path.AppendASCII(StringPrintf("%02" PRIu64,
directory_number));
PlatformFileError error;
- error = underlying_file_util_->CreateDirectory(
+ error = underlying_file_util()->CreateDirectory(
context, local_path, false /* exclusive */, false /* recursive */);
if (base::PLATFORM_FILE_OK != error)
return error;
@@ -906,12 +1068,12 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CreateFile(
if (!source_path.empty()) {
DCHECK(!file_flags);
DCHECK(!handle);
- error = underlying_file_util_->CopyOrMoveFile(
+ error = underlying_file_util()->CopyOrMoveFile(
context, source_path, local_path, true /* copy */);
created = true;
} else {
FilePath path;
- underlying_file_util_->GetLocalFilePath(context, local_path, &path);
+ underlying_file_util()->GetLocalFilePath(context, local_path, &path);
if (file_util::PathExists(path)) {
if (!file_util::Delete(path, true)) {
NOTREACHED();
@@ -923,12 +1085,12 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CreateFile(
}
if (handle) {
- error = underlying_file_util_->CreateOrOpen(
+ error = underlying_file_util()->CreateOrOpen(
context, local_path, file_flags, handle, &created);
// If this succeeds, we must close handle on any subsequent error.
} else {
DCHECK(!file_flags); // file_flags is only used by CreateOrOpen.
- error = underlying_file_util_->EnsureFileExists(
+ error = underlying_file_util()->EnsureFileExists(
context, local_path, &created);
}
}
@@ -940,7 +1102,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CreateFile(
if (handle) {
DCHECK_NE(base::kInvalidPlatformFileValue, *handle);
base::ClosePlatformFile(*handle);
- underlying_file_util_->DeleteFile(context, local_path);
+ underlying_file_util()->DeleteFile(context, local_path);
}
return base::PLATFORM_FILE_ERROR_FAILED;
}
@@ -951,7 +1113,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CreateFile(
DCHECK_NE(base::kInvalidPlatformFileValue, *handle);
base::ClosePlatformFile(*handle);
}
- underlying_file_util_->DeleteFile(context, local_path);
+ underlying_file_util()->DeleteFile(context, local_path);
return base::PLATFORM_FILE_ERROR_FAILED;
}
UpdatePathQuotaUsage(context, origin_url, type, 1, file_info->name.size());
@@ -959,7 +1121,7 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CreateFile(
return base::PLATFORM_FILE_OK;
}
-FilePath ObfuscatedFileSystemFileUtil::GetLocalPath(
+FilePath ObfuscatedFileUtil::GetLocalPath(
const GURL& origin_url,
FileSystemType type,
const FilePath& virtual_path) {
@@ -978,139 +1140,7 @@ FilePath ObfuscatedFileSystemFileUtil::GetLocalPath(
return DataPathToLocalPath(origin_url, type, file_info.data_path);
}
-FilePath ObfuscatedFileSystemFileUtil::GetDirectoryForOriginAndType(
- const GURL& origin, FileSystemType type, bool create) {
- FilePath origin_dir = GetDirectoryForOrigin(origin, create);
- if (origin_dir.empty())
- return FilePath();
- FilePath::StringType type_string = GetDirectoryNameForType(type);
- if (type_string.empty()) {
- LOG(WARNING) << "Unknown filesystem type requested:" << type;
- return FilePath();
- }
- FilePath path = origin_dir.Append(type_string);
- if (!file_util::DirectoryExists(path) &&
- (!create || !file_util::CreateDirectory(path)))
- return FilePath();
- return path;
-}
-
-bool ObfuscatedFileSystemFileUtil::DeleteDirectoryForOriginAndType(
- const GURL& origin, FileSystemType type) {
- FilePath origin_type_path = GetDirectoryForOriginAndType(origin, type, false);
- if (!file_util::PathExists(origin_type_path))
- return true;
-
- // TODO(dmikurube): Consider the return value of DestroyDirectoryDatabase.
- // We ignore its error now since 1) it doesn't matter the final result, and
- // 2) it always returns false in Windows because of LevelDB's implementation.
- // Information about failure would be useful for debugging.
- DestroyDirectoryDatabase(origin, type);
- if (!file_util::Delete(origin_type_path, true /* recursive */))
- return false;
-
- FilePath origin_path = origin_type_path.DirName();
- DCHECK_EQ(origin_path.value(), GetDirectoryForOrigin(origin, false).value());
-
- // Delete the origin directory if the deleted one was the last remaining
- // type for the origin.
- if (file_util::Delete(origin_path, false /* recursive */)) {
- InitOriginDatabase(false);
- if (origin_database_.get())
- origin_database_->RemovePathForOrigin(GetOriginIdentifierFromURL(origin));
- }
-
- // At this point we are sure we had successfully deleted the origin/type
- // directory, so just returning true here.
- return true;
-}
-
-bool ObfuscatedFileSystemFileUtil::MigrateFromOldSandbox(
- const GURL& origin_url, FileSystemType type, const FilePath& src_root) {
- if (!DestroyDirectoryDatabase(origin_url, type))
- return false;
- FilePath dest_root = GetDirectoryForOriginAndType(origin_url, type, true);
- if (dest_root.empty())
- return false;
- FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
- origin_url, type, true);
- if (!db)
- return false;
-
- file_util::FileEnumerator file_enum(src_root, true,
- static_cast<file_util::FileEnumerator::FileType>(
- file_util::FileEnumerator::FILES |
- file_util::FileEnumerator::DIRECTORIES));
- FilePath src_full_path;
- size_t root_path_length = src_root.value().length() + 1; // +1 for the slash
- while (!(src_full_path = file_enum.Next()).empty()) {
- file_util::FileEnumerator::FindInfo info;
- file_enum.GetFindInfo(&info);
- FilePath relative_virtual_path =
- FilePath(src_full_path.value().substr(root_path_length));
- if (relative_virtual_path.empty()) {
- LOG(WARNING) << "Failed to convert path to relative: " <<
- src_full_path.value();
- return false;
- }
- FileId file_id;
- if (db->GetFileWithPath(relative_virtual_path, &file_id)) {
- NOTREACHED(); // File already exists.
- return false;
- }
- if (!db->GetFileWithPath(relative_virtual_path.DirName(), &file_id)) {
- NOTREACHED(); // Parent doesn't exist.
- return false;
- }
-
- FileInfo file_info;
- file_info.name = src_full_path.BaseName().value();
- if (file_util::FileEnumerator::IsDirectory(info)) {
-#if defined(OS_WIN)
- file_info.modification_time =
- base::Time::FromFileTime(info.ftLastWriteTime);
-#elif defined(OS_POSIX)
- file_info.modification_time = base::Time::FromTimeT(info.stat.st_mtime);
-#endif
- } else {
- file_info.data_path =
- FilePath(kLegacyDataDirectory).Append(relative_virtual_path);
- }
- file_info.parent_id = file_id;
- if (!db->AddFileInfo(file_info, &file_id)) {
- NOTREACHED();
- return false;
- }
- }
- // TODO(ericu): Should we adjust the mtime of the root directory to match as
- // well?
- FilePath legacy_dest_dir = dest_root.Append(kLegacyDataDirectory);
-
- if (!file_util::Move(src_root, legacy_dest_dir)) {
- LOG(WARNING) <<
- "The final step of a migration failed; I'll try to clean up.";
- db = NULL;
- DestroyDirectoryDatabase(origin_url, type);
- return false;
- }
- return true;
-}
-
-// static
-FilePath::StringType ObfuscatedFileSystemFileUtil::GetDirectoryNameForType(
- FileSystemType type) {
- switch (type) {
- case kFileSystemTypeTemporary:
- return kTemporaryDirectoryName;
- case kFileSystemTypePersistent:
- return kPersistentDirectoryName;
- case kFileSystemTypeUnknown:
- default:
- return FilePath::StringType();
- }
-}
-
-FilePath ObfuscatedFileSystemFileUtil::DataPathToLocalPath(
+FilePath ObfuscatedFileUtil::DataPathToLocalPath(
const GURL& origin, FileSystemType type, const FilePath& data_path) {
FilePath root = GetDirectoryForOriginAndType(origin, type, false);
if (root.empty())
@@ -1118,7 +1148,7 @@ FilePath ObfuscatedFileSystemFileUtil::DataPathToLocalPath(
return root.Append(data_path);
}
-FilePath ObfuscatedFileSystemFileUtil::LocalPathToDataPath(
+FilePath ObfuscatedFileUtil::LocalPathToDataPath(
const GURL& origin, FileSystemType type, const FilePath& local_path) {
FilePath root = GetDirectoryForOriginAndType(origin, type, false);
if (root.empty())
@@ -1131,7 +1161,7 @@ FilePath ObfuscatedFileSystemFileUtil::LocalPathToDataPath(
// TODO: How to do the whole validation-without-creation thing? We may not have
// quota even to create the database. Ah, in that case don't even get here?
// Still doesn't answer the quota issue, though.
-FileSystemDirectoryDatabase* ObfuscatedFileSystemFileUtil::GetDirectoryDatabase(
+FileSystemDirectoryDatabase* ObfuscatedFileUtil::GetDirectoryDatabase(
const GURL& origin, FileSystemType type, bool create) {
std::string type_string =
FileSystemPathManager::GetFileSystemTypeString(type);
@@ -1162,7 +1192,7 @@ FileSystemDirectoryDatabase* ObfuscatedFileSystemFileUtil::GetDirectoryDatabase(
return database;
}
-FilePath ObfuscatedFileSystemFileUtil::GetDirectoryForOrigin(
+FilePath ObfuscatedFileUtil::GetDirectoryForOrigin(
const GURL& origin, bool create) {
if (!InitOriginDatabase(create))
return FilePath();
@@ -1191,52 +1221,22 @@ FilePath ObfuscatedFileSystemFileUtil::GetDirectoryForOrigin(
return path;
}
-void ObfuscatedFileSystemFileUtil::MarkUsed() {
+void ObfuscatedFileUtil::MarkUsed() {
if (timer_.IsRunning())
timer_.Reset();
else
timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(kFlushDelaySeconds),
- this, &ObfuscatedFileSystemFileUtil::DropDatabases);
+ this, &ObfuscatedFileUtil::DropDatabases);
}
-void ObfuscatedFileSystemFileUtil::DropDatabases() {
+void ObfuscatedFileUtil::DropDatabases() {
origin_database_.reset();
STLDeleteContainerPairSecondPointers(
directories_.begin(), directories_.end());
directories_.clear();
}
-// static
-int64 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(const FilePath& path) {
- return GetPathQuotaUsage(1, path.BaseName().value().size());
-}
-
-bool ObfuscatedFileSystemFileUtil::DestroyDirectoryDatabase(
- const GURL& origin, FileSystemType type) {
- std::string type_string =
- FileSystemPathManager::GetFileSystemTypeString(type);
- if (type_string.empty()) {
- LOG(WARNING) << "Unknown filesystem type requested:" << type;
- return true;
- }
- std::string key = GetOriginIdentifierFromURL(origin) + type_string;
- DirectoryMap::iterator iter = directories_.find(key);
- if (iter != directories_.end()) {
- FileSystemDirectoryDatabase* database = iter->second;
- directories_.erase(iter);
- delete database;
- }
-
- FilePath path = GetDirectoryForOriginAndType(origin, type, false);
- if (path.empty())
- return true;
- if (!file_util::DirectoryExists(path))
- return true;
- path = path.AppendASCII(kDirectoryDatabaseName);
- return FileSystemDirectoryDatabase::DestroyDatabase(path);
-}
-
-bool ObfuscatedFileSystemFileUtil::InitOriginDatabase(bool create) {
+bool ObfuscatedFileUtil::InitOriginDatabase(bool create) {
if (!origin_database_.get()) {
if (!create && !file_util::DirectoryExists(file_system_directory_))
return false;
diff --git a/webkit/fileapi/obfuscated_file_system_file_util.h b/webkit/fileapi/obfuscated_file_util.h
index 782fc07..c814b53 100644
--- a/webkit/fileapi/obfuscated_file_system_file_util.h
+++ b/webkit/fileapi/obfuscated_file_util.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef WEBKIT_FILEAPI_OBFUSCATED_FILE_SYSTEM_FILE_UTIL_H_
-#define WEBKIT_FILEAPI_OBFUSCATED_FILE_SYSTEM_FILE_UTIL_H_
+#ifndef WEBKIT_FILEAPI_OBFUSCATED_FILE_UTIL_H_
+#define WEBKIT_FILEAPI_OBFUSCATED_FILE_UTIL_H_
#include <map>
#include <string>
@@ -45,17 +45,29 @@ class FileSystemOperationContext;
//
// TODO(ericu): We don't ever update directory mtimes; which operations should
// do that?
-class ObfuscatedFileSystemFileUtil : public FileSystemFileUtil,
- public base::RefCountedThreadSafe<ObfuscatedFileSystemFileUtil> {
+class ObfuscatedFileUtil : public FileSystemFileUtil,
+ public base::RefCountedThreadSafe<ObfuscatedFileUtil> {
public:
+ // Origin enumerator interface.
+ // An instance of this interface is assumed to be called on the file thread.
+ class AbstractOriginEnumerator {
+ public:
+ virtual ~AbstractOriginEnumerator() {}
+
+ // Returns the next origin. Returns empty if there are no more origins.
+ virtual GURL Next() = 0;
+
+ // Returns the current origin's information.
+ virtual bool HasFileSystemType(FileSystemType type) const = 0;
+ };
+
// |underlying_file_util| is owned by the instance. It will be deleted by
// the owner instance. For example, it can be instanciated as follows:
- // FileSystemFileUtil* file_system_file_util =
- // new ObfuscatedFileSystemFileUtil(new FileSystemFileUtil());
- ObfuscatedFileSystemFileUtil(
- const FilePath& file_system_directory,
- FileSystemFileUtil* underlying_file_util);
- virtual ~ObfuscatedFileSystemFileUtil();
+ // FileSystemFileUtil* file_util =
+ // new ObfuscatedFileUtil(new NativeFileUtil());
+ ObfuscatedFileUtil(const FilePath& file_system_directory,
+ FileSystemFileUtil* underlying_file_util);
+ virtual ~ObfuscatedFileUtil();
virtual base::PlatformFileError CreateOrOpen(
FileSystemOperationContext* context,
@@ -68,10 +80,11 @@ class ObfuscatedFileSystemFileUtil : public FileSystemFileUtil,
FileSystemOperationContext* context,
const FilePath& file_path, bool* created) OVERRIDE;
- virtual base::PlatformFileError GetLocalFilePath(
+ virtual base::PlatformFileError CreateDirectory(
FileSystemOperationContext* context,
- const FilePath& virtual_file,
- FilePath* local_path) OVERRIDE;
+ const FilePath& file_path,
+ bool exclusive,
+ bool recursive) OVERRIDE;
virtual base::PlatformFileError GetFileInfo(
FileSystemOperationContext* context,
@@ -84,30 +97,14 @@ class ObfuscatedFileSystemFileUtil : public FileSystemFileUtil,
const FilePath& file_path,
std::vector<base::FileUtilProxy::Entry>* entries) OVERRIDE;
- virtual base::PlatformFileError CreateDirectory(
- FileSystemOperationContext* context,
- const FilePath& file_path,
- bool exclusive,
- bool recursive) OVERRIDE;
-
- virtual base::PlatformFileError CopyOrMoveFile(
- FileSystemOperationContext* context,
- const FilePath& src_file_path,
- const FilePath& dest_file_path,
- bool copy) OVERRIDE;
-
- virtual PlatformFileError CopyInForeignFile(
- FileSystemOperationContext* context,
- const FilePath& src_file_path,
- const FilePath& dest_file_path) OVERRIDE;
-
- virtual base::PlatformFileError DeleteFile(
+ virtual AbstractFileEnumerator* CreateFileEnumerator(
FileSystemOperationContext* context,
- const FilePath& file_path) OVERRIDE;
+ const FilePath& root_path) OVERRIDE;
- virtual base::PlatformFileError DeleteSingleDirectory(
+ virtual base::PlatformFileError GetLocalFilePath(
FileSystemOperationContext* context,
- const FilePath& file_path) OVERRIDE;
+ const FilePath& virtual_file,
+ FilePath* local_path) OVERRIDE;
virtual base::PlatformFileError Touch(
FileSystemOperationContext* context,
@@ -132,6 +129,25 @@ class ObfuscatedFileSystemFileUtil : public FileSystemFileUtil,
FileSystemOperationContext* context,
const FilePath& file_path) OVERRIDE;
+ virtual base::PlatformFileError CopyOrMoveFile(
+ FileSystemOperationContext* context,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path,
+ bool copy) OVERRIDE;
+
+ virtual PlatformFileError CopyInForeignFile(
+ FileSystemOperationContext* context,
+ const FilePath& src_file_path,
+ const FilePath& dest_file_path) OVERRIDE;
+
+ virtual base::PlatformFileError DeleteFile(
+ FileSystemOperationContext* context,
+ const FilePath& file_path) OVERRIDE;
+
+ virtual base::PlatformFileError DeleteSingleDirectory(
+ FileSystemOperationContext* context,
+ const FilePath& file_path) OVERRIDE;
+
// Gets the topmost directory specific to this origin and type. This will
// contain both the directory database's files and all the backing file
// subdirectories.
@@ -160,28 +176,11 @@ class ObfuscatedFileSystemFileUtil : public FileSystemFileUtil,
// SandboxMountPointProvider would be better?
static FilePath::StringType GetDirectoryNameForType(FileSystemType type);
- // Origin enumerator interface.
- // An instance of this interface is assumed to be called on the file thread.
- class AbstractOriginEnumerator {
- public:
- virtual ~AbstractOriginEnumerator() {}
-
- // Returns the next origin. Returns empty if there are no more origins.
- virtual GURL Next() = 0;
-
- // Returns the current origin's information.
- virtual bool HasFileSystemType(FileSystemType type) const = 0;
- };
-
// This method and all methods of its returned class must be called only on
// the FILE thread. The caller is responsible for deleting the returned
// object.
AbstractOriginEnumerator* CreateOriginEnumerator();
- virtual AbstractFileEnumerator* CreateFileEnumerator(
- FileSystemOperationContext* context,
- const FilePath& root_path) OVERRIDE;
-
// Deletes a directory database from the database list in the ObfuscatedFSFU
// and destroys the database on the disk.
bool DestroyDirectoryDatabase(const GURL& origin, FileSystemType type);
@@ -221,6 +220,7 @@ class ObfuscatedFileSystemFileUtil : public FileSystemFileUtil,
const GURL& origin_url, FileSystemType type,
const FilePath& source_path, FileInfo* file_info,
int file_flags, base::PlatformFile* handle);
+
// Given the filesystem's root URL and a virtual path, produces a real, full
// local path to the underlying data file. This does a database lookup, and
// verifies that the file exists.
@@ -228,23 +228,28 @@ class ObfuscatedFileSystemFileUtil : public FileSystemFileUtil,
const GURL& origin_url,
FileSystemType type,
const FilePath& virtual_path);
+
// This converts from a relative path [as is stored in the FileInfo.data_path
// field] to an absolute local path that can be given to the operating system.
// It does no checks as to whether the file actually exists; it's pure path
// manipulation.
FilePath DataPathToLocalPath(
const GURL& origin, FileSystemType type, const FilePath& data_path);
+
// This does the reverse of DataPathToLocalPath.
FilePath LocalPathToDataPath(
const GURL& origin, FileSystemType type, const FilePath& local_path);
+
// This returns NULL if |create| flag is false and a filesystem does not
// exist for the given |origin_url| and |type|.
// For read operations |create| should be false.
FileSystemDirectoryDatabase* GetDirectoryDatabase(
const GURL& origin_url, FileSystemType type, bool create);
+
// Gets the topmost directory specific to this origin. This will
// contain both the filesystem type subdirectories.
FilePath GetDirectoryForOrigin(const GURL& origin, bool create);
+
void MarkUsed();
void DropDatabases();
bool InitOriginDatabase(bool create);
@@ -253,12 +258,11 @@ class ObfuscatedFileSystemFileUtil : public FileSystemFileUtil,
DirectoryMap directories_;
scoped_ptr<FileSystemOriginDatabase> origin_database_;
FilePath file_system_directory_;
- base::OneShotTimer<ObfuscatedFileSystemFileUtil> timer_;
- scoped_ptr<FileSystemFileUtil> underlying_file_util_;
+ base::OneShotTimer<ObfuscatedFileUtil> timer_;
- DISALLOW_COPY_AND_ASSIGN(ObfuscatedFileSystemFileUtil);
+ DISALLOW_COPY_AND_ASSIGN(ObfuscatedFileUtil);
};
} // namespace fileapi
-#endif // WEBKIT_FILEAPI_OBFUSCATED_FILE_SYSTEM_FILE_UTIL_H_
+#endif // WEBKIT_FILEAPI_OBFUSCATED_FILE_UTIL_H_
diff --git a/webkit/fileapi/obfuscated_file_system_file_util_unittest.cc b/webkit/fileapi/obfuscated_file_util_unittest.cc
index 879338f..ec40c67 100644
--- a/webkit/fileapi/obfuscated_file_system_file_util_unittest.cc
+++ b/webkit/fileapi/obfuscated_file_util_unittest.cc
@@ -20,7 +20,7 @@
#include "webkit/fileapi/file_system_path_manager.h"
#include "webkit/fileapi/file_system_test_helper.h"
#include "webkit/fileapi/file_system_usage_cache.h"
-#include "webkit/fileapi/obfuscated_file_system_file_util.h"
+#include "webkit/fileapi/obfuscated_file_util.h"
#include "webkit/quota/mock_special_storage_policy.h"
#include "webkit/quota/quota_manager.h"
#include "webkit/quota/quota_types.h"
@@ -128,9 +128,9 @@ const OriginEnumerationTestRecord kOriginEnumerationTestRecords[] = {
// could theoretically be shared. It would basically be a FSFU interface
// compliance test, and only the subclass-specific bits that look into the
// implementation would need to be written per-subclass.
-class ObfuscatedFileSystemFileUtilTest : public testing::Test {
+class ObfuscatedFileUtilTest : public testing::Test {
public:
- ObfuscatedFileSystemFileUtilTest()
+ ObfuscatedFileUtilTest()
: origin_(GURL("http://www.example.com")),
type_(kFileSystemTypeTemporary),
callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
@@ -151,7 +151,7 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
// Every time we create a new helper, it creates another context, which
// creates another path manager, another sandbox_mount_point_provider, and
- // another OFSFU. We need to pass in the context to skip all that.
+ // another OFU. We need to pass in the context to skip all that.
file_system_context_ = new FileSystemContext(
base::MessageLoopProxy::current(),
base::MessageLoopProxy::current(),
@@ -163,13 +163,11 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
false /* unlimited_quota */,
NULL /* path_manager */);
- obfuscated_file_system_file_util_ =
- static_cast<ObfuscatedFileSystemFileUtil*>(
- file_system_context_->path_manager()->GetFileSystemFileUtil(type_));
-
+ obfuscated_file_util_ = static_cast<ObfuscatedFileUtil*>(
+ file_system_context_->path_manager()->GetFileUtil(type_));
test_helper_.SetUp(file_system_context_.get(),
- obfuscated_file_system_file_util_.get());
+ obfuscated_file_util_.get());
}
FileSystemOperationContext* NewContext(FileSystemTestOriginHelper* helper) {
@@ -183,7 +181,7 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
}
// This can only be used after SetUp has run and created file_system_context_
- // and obfuscated_file_system_file_util_.
+ // and obfuscated_file_util_.
// Use this for tests which need to run in multiple origins; we need a test
// helper per origin.
FileSystemTestOriginHelper* NewHelper(
@@ -192,12 +190,12 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
new FileSystemTestOriginHelper(origin, type);
helper->SetUp(file_system_context_.get(),
- obfuscated_file_system_file_util_.get());
+ obfuscated_file_util_.get());
return helper;
}
- ObfuscatedFileSystemFileUtil* ofsfu() {
- return obfuscated_file_system_file_util_.get();
+ ObfuscatedFileUtil* ofu() {
+ return obfuscated_file_util_.get();
}
const FilePath& test_directory() const {
@@ -216,7 +214,7 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
quota_manager_->GetUsageAndQuota(
origin(), test_helper_.storage_type(),
callback_factory_.NewCallback(
- &ObfuscatedFileSystemFileUtilTest::OnGetUsage));
+ &ObfuscatedFileUtilTest::OnGetUsage));
MessageLoop::current()->RunAllPending();
EXPECT_EQ(quota::kQuotaStatusOk, quota_status_);
}
@@ -242,12 +240,12 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
const FilePath& virtual_path, PlatformFile file_handle) {
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
FilePath local_path;
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetLocalFilePath(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetLocalFilePath(
context.get(), virtual_path, &local_path));
base::PlatformFileInfo file_info0;
FilePath data_path;
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
context.get(), virtual_path, &file_info0, &data_path));
EXPECT_EQ(data_path, local_path);
EXPECT_TRUE(FileExists(data_path));
@@ -274,7 +272,7 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
base::PlatformFileInfo file_info1;
EXPECT_EQ(length, GetSize(data_path));
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
context.get(), virtual_path, &file_info1, &data_path));
EXPECT_EQ(data_path, local_path);
@@ -287,12 +285,12 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
EXPECT_LE(file_info0.last_modified, file_info1.last_modified);
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->Truncate(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->Truncate(
context.get(), virtual_path, length * 2));
EXPECT_EQ(length * 2, GetSize(data_path));
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->Truncate(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->Truncate(
context.get(), virtual_path, 0));
EXPECT_EQ(0, GetSize(data_path));
}
@@ -307,14 +305,14 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
bool created = true;
context.reset(NewContext(NULL));
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(
+ ofu()->EnsureFileExists(
context.get(), root_path.Append(*iter),
&created));
ASSERT_FALSE(created);
}
for (iter = directories.begin(); iter != directories.end(); ++iter) {
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(),
+ EXPECT_TRUE(ofu()->DirectoryExists(context.get(),
root_path.Append(*iter)));
}
}
@@ -327,7 +325,7 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
context.reset(NewContext(NULL));
std::vector<base::FileUtilProxy::Entry> entries;
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->ReadDirectory(context.get(), root_path, &entries));
+ ofu()->ReadDirectory(context.get(), root_path, &entries));
EXPECT_EQ(0UL, entries.size());
files->clear();
@@ -343,7 +341,7 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
bool created = false;
context.reset(NewContext(NULL));
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(
+ ofu()->EnsureFileExists(
context.get(), root_path.Append(*iter), &created));
ASSERT_TRUE(created);
}
@@ -352,7 +350,7 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
bool recursive = false;
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CreateDirectory(
+ ofu()->CreateDirectory(
context.get(), root_path.Append(*iter), exclusive, recursive));
}
ValidateTestDirectory(root_path, *files, *directories);
@@ -367,7 +365,7 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
std::vector<base::FileUtilProxy::Entry> entries;
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->ReadDirectory(context.get(), root_path, &entries));
+ ofu()->ReadDirectory(context.get(), root_path, &entries));
std::vector<base::FileUtilProxy::Entry>::iterator entry_iter;
EXPECT_EQ(files.size() + directories.size(), entries.size());
for (entry_iter = entries.begin(); entry_iter != entries.end();
@@ -392,12 +390,12 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->Touch(
+ ofu()->Touch(
context.get(), path, last_access_time, last_modified_time));
FilePath local_path;
base::PlatformFileInfo file_info;
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
context.get(), path, &file_info, &local_path));
// We compare as time_t here to lower our resolution, to avoid false
// negatives caused by conversion to the local filesystem's native
@@ -408,13 +406,13 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
last_modified_time += base::TimeDelta::FromHours(1);
last_access_time += base::TimeDelta::FromHours(14);
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->Touch(
+ ofu()->Touch(
context.get(), path, last_access_time, last_modified_time));
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
context.get(), path, &file_info, &local_path));
EXPECT_EQ(file_info.last_modified.ToTimeT(), last_modified_time.ToTimeT());
- if (is_file) // Directories in OFSFU don't support atime.
+ if (is_file) // Directories in OFU don't support atime.
EXPECT_EQ(file_info.last_accessed.ToTimeT(), last_access_time.ToTimeT());
}
@@ -443,59 +441,59 @@ class ObfuscatedFileSystemFileUtilTest : public testing::Test {
if (overwrite) {
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), dest_path, &created));
+ ofu()->EnsureFileExists(context.get(), dest_path, &created));
EXPECT_TRUE(created);
}
const int64 path_cost =
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(dest_path);
+ ObfuscatedFileUtil::ComputeFilePathCost(dest_path);
if (!overwrite) {
// Verify that file creation requires sufficient quota for the path.
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(path_cost + src_file_length - 1);
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE,
- ofsfu()->CopyInForeignFile(context.get(), src_path, dest_path));
+ ofu()->CopyInForeignFile(context.get(), src_path, dest_path));
}
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(path_cost + src_file_length);
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CopyInForeignFile(context.get(), src_path, dest_path));
+ ofu()->CopyInForeignFile(context.get(), src_path, dest_path));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->PathExists(context.get(), dest_path));
+ EXPECT_TRUE(ofu()->PathExists(context.get(), dest_path));
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), dest_path));
+ EXPECT_FALSE(ofu()->DirectoryExists(context.get(), dest_path));
context.reset(NewContext(NULL));
base::PlatformFileInfo file_info;
FilePath data_path;
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
context.get(), dest_path, &file_info, &data_path));
EXPECT_NE(data_path, src_path);
EXPECT_TRUE(FileExists(data_path));
EXPECT_EQ(src_file_length, GetSize(data_path));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->DeleteFile(context.get(), dest_path));
+ ofu()->DeleteFile(context.get(), dest_path));
}
private:
ScopedTempDir data_dir_;
- scoped_refptr<ObfuscatedFileSystemFileUtil> obfuscated_file_system_file_util_;
+ scoped_refptr<ObfuscatedFileUtil> obfuscated_file_util_;
scoped_refptr<quota::QuotaManager> quota_manager_;
scoped_refptr<FileSystemContext> file_system_context_;
GURL origin_;
fileapi::FileSystemType type_;
- base::ScopedCallbackFactory<ObfuscatedFileSystemFileUtilTest>
+ base::ScopedCallbackFactory<ObfuscatedFileUtilTest>
callback_factory_;
FileSystemTestOriginHelper test_helper_;
quota::QuotaStatusCode quota_status_;
int64 usage_;
- DISALLOW_COPY_AND_ASSIGN(ObfuscatedFileSystemFileUtilTest);
+ DISALLOW_COPY_AND_ASSIGN(ObfuscatedFileUtilTest);
};
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestCreateAndDeleteFile) {
+TEST_F(ObfuscatedFileUtilTest, TestCreateAndDeleteFile) {
base::PlatformFile file_handle = base::kInvalidPlatformFileValue;
bool created;
FilePath path = UTF8ToFilePath("fake/file");
@@ -503,29 +501,29 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestCreateAndDeleteFile) {
int file_flags = base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE;
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
- ofsfu()->CreateOrOpen(
+ ofu()->CreateOrOpen(
context.get(), path, file_flags, &file_handle,
&created));
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
- ofsfu()->DeleteFile(context.get(), path));
+ ofu()->DeleteFile(context.get(), path));
path = UTF8ToFilePath("test file");
// Verify that file creation requires sufficient quota for the path.
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path) - 1);
+ ObfuscatedFileUtil::ComputeFilePathCost(path) - 1);
ASSERT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE,
- ofsfu()->CreateOrOpen(
+ ofu()->CreateOrOpen(
context.get(), path, file_flags, &file_handle, &created));
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path));
+ ObfuscatedFileUtil::ComputeFilePathCost(path));
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CreateOrOpen(
+ ofu()->CreateOrOpen(
context.get(), path, file_flags, &file_handle, &created));
ASSERT_TRUE(created);
EXPECT_NE(base::kInvalidPlatformFileValue, file_handle);
@@ -534,7 +532,7 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestCreateAndDeleteFile) {
context.reset(NewContext(NULL));
FilePath local_path;
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetLocalFilePath(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetLocalFilePath(
context.get(), path, &local_path));
EXPECT_TRUE(file_util::PathExists(local_path));
@@ -543,9 +541,9 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestCreateAndDeleteFile) {
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(0);
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->DeleteFile(context.get(), path));
+ ofu()->DeleteFile(context.get(), path));
EXPECT_FALSE(file_util::PathExists(local_path));
- EXPECT_EQ(ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path),
+ EXPECT_EQ(ObfuscatedFileUtil::ComputeFilePathCost(path),
context->allowed_bytes_growth());
context.reset(NewContext(NULL));
@@ -553,13 +551,13 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestCreateAndDeleteFile) {
bool recursive = true;
FilePath directory_path = UTF8ToFilePath("series/of/directories");
path = directory_path.AppendASCII("file name");
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), directory_path, exclusive, recursive));
context.reset(NewContext(NULL));
file_handle = base::kInvalidPlatformFileValue;
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CreateOrOpen(
+ ofu()->CreateOrOpen(
context.get(), path, file_flags, &file_handle, &created));
ASSERT_TRUE(created);
EXPECT_NE(base::kInvalidPlatformFileValue, file_handle);
@@ -567,57 +565,57 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestCreateAndDeleteFile) {
CheckFileAndCloseHandle(path, file_handle);
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetLocalFilePath(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetLocalFilePath(
context.get(), path, &local_path));
EXPECT_TRUE(file_util::PathExists(local_path));
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->DeleteFile(context.get(), path));
+ ofu()->DeleteFile(context.get(), path));
EXPECT_FALSE(file_util::PathExists(local_path));
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestTruncate) {
+TEST_F(ObfuscatedFileUtilTest, TestTruncate) {
bool created = false;
FilePath path = UTF8ToFilePath("file");
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
- ofsfu()->Truncate(context.get(), path, 4));
+ ofu()->Truncate(context.get(), path, 4));
context.reset(NewContext(NULL));
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), path, &created));
+ ofu()->EnsureFileExists(context.get(), path, &created));
ASSERT_TRUE(created);
context.reset(NewContext(NULL));
FilePath local_path;
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetLocalFilePath(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetLocalFilePath(
context.get(), path, &local_path));
EXPECT_EQ(0, GetSize(local_path));
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->Truncate(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->Truncate(
context.get(), path, 10));
EXPECT_EQ(10, GetSize(local_path));
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->Truncate(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->Truncate(
context.get(), path, 1));
EXPECT_EQ(1, GetSize(local_path));
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), path));
+ EXPECT_FALSE(ofu()->DirectoryExists(context.get(), path));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->PathExists(context.get(), path));
+ EXPECT_TRUE(ofu()->PathExists(context.get(), path));
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestEnsureFileExists) {
+TEST_F(ObfuscatedFileUtilTest, TestEnsureFileExists) {
FilePath path = UTF8ToFilePath("fake/file");
bool created = false;
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
- ofsfu()->EnsureFileExists(
+ ofu()->EnsureFileExists(
context.get(), path, &created));
// Verify that file creation requires sufficient quota for the path.
@@ -625,23 +623,23 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestEnsureFileExists) {
path = UTF8ToFilePath("test file");
created = false;
context->set_allowed_bytes_growth(
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path) - 1);
+ ObfuscatedFileUtil::ComputeFilePathCost(path) - 1);
ASSERT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE,
- ofsfu()->EnsureFileExists(context.get(), path, &created));
+ ofu()->EnsureFileExists(context.get(), path, &created));
ASSERT_FALSE(created);
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path));
+ ObfuscatedFileUtil::ComputeFilePathCost(path));
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), path, &created));
+ ofu()->EnsureFileExists(context.get(), path, &created));
ASSERT_TRUE(created);
CheckFileAndCloseHandle(path, base::kInvalidPlatformFileValue);
context.reset(NewContext(NULL));
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), path, &created));
+ ofu()->EnsureFileExists(context.get(), path, &created));
ASSERT_FALSE(created);
// Also test in a subdirectory.
@@ -649,65 +647,65 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestEnsureFileExists) {
context.reset(NewContext(NULL));
bool exclusive = true;
bool recursive = true;
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), path.DirName(), exclusive, recursive));
context.reset(NewContext(NULL));
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), path, &created));
+ ofu()->EnsureFileExists(context.get(), path, &created));
ASSERT_TRUE(created);
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), path));
+ EXPECT_FALSE(ofu()->DirectoryExists(context.get(), path));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->PathExists(context.get(), path));
+ EXPECT_TRUE(ofu()->PathExists(context.get(), path));
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestDirectoryOps) {
+TEST_F(ObfuscatedFileUtilTest, TestDirectoryOps) {
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
bool exclusive = false;
bool recursive = false;
FilePath path = UTF8ToFilePath("foo/bar");
- EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, ofsfu()->CreateDirectory(
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, ofu()->CreateDirectory(
context.get(), path, exclusive, recursive));
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
- ofsfu()->DeleteSingleDirectory(context.get(), path));
+ ofu()->DeleteSingleDirectory(context.get(), path));
FilePath root = UTF8ToFilePath("");
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), path));
+ EXPECT_FALSE(ofu()->DirectoryExists(context.get(), path));
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->PathExists(context.get(), path));
+ EXPECT_FALSE(ofu()->PathExists(context.get(), path));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->IsDirectoryEmpty(context.get(), root));
+ EXPECT_TRUE(ofu()->IsDirectoryEmpty(context.get(), root));
context.reset(NewContext(NULL));
exclusive = false;
recursive = true;
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), path, exclusive, recursive));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), path));
+ EXPECT_TRUE(ofu()->DirectoryExists(context.get(), path));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->PathExists(context.get(), path));
+ EXPECT_TRUE(ofu()->PathExists(context.get(), path));
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->IsDirectoryEmpty(context.get(), root));
+ EXPECT_FALSE(ofu()->IsDirectoryEmpty(context.get(), root));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), path.DirName()));
+ EXPECT_TRUE(ofu()->DirectoryExists(context.get(), path.DirName()));
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->IsDirectoryEmpty(context.get(), path.DirName()));
+ EXPECT_FALSE(ofu()->IsDirectoryEmpty(context.get(), path.DirName()));
// Can't remove a non-empty directory.
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_EMPTY,
- ofsfu()->DeleteSingleDirectory(context.get(), path.DirName()));
+ ofu()->DeleteSingleDirectory(context.get(), path.DirName()));
base::PlatformFileInfo file_info;
FilePath local_path;
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
context.get(), path, &file_info, &local_path));
EXPECT_TRUE(local_path.empty());
EXPECT_TRUE(file_info.is_directory);
@@ -715,13 +713,13 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestDirectoryOps) {
// Same create again should succeed, since exclusive is false.
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), path, exclusive, recursive));
exclusive = true;
recursive = true;
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofsfu()->CreateDirectory(
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofu()->CreateDirectory(
context.get(), path, exclusive, recursive));
// Verify that deleting a directory isn't stopped by zero quota, and that it
@@ -729,19 +727,19 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestDirectoryOps) {
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(0);
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->DeleteSingleDirectory(context.get(), path));
- EXPECT_EQ(ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path),
+ ofu()->DeleteSingleDirectory(context.get(), path));
+ EXPECT_EQ(ObfuscatedFileUtil::ComputeFilePathCost(path),
context->allowed_bytes_growth());
path = UTF8ToFilePath("foo/bop");
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), path));
+ EXPECT_FALSE(ofu()->DirectoryExists(context.get(), path));
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->PathExists(context.get(), path));
+ EXPECT_FALSE(ofu()->PathExists(context.get(), path));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->IsDirectoryEmpty(context.get(), path));
- EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, ofsfu()->GetFileInfo(
+ EXPECT_TRUE(ofu()->IsDirectoryEmpty(context.get(), path));
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, ofu()->GetFileInfo(
context.get(), path, &file_info, &local_path));
// Verify that file creation requires sufficient quota for the path.
@@ -749,91 +747,91 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestDirectoryOps) {
recursive = false;
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path) - 1);
- EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, ofsfu()->CreateDirectory(
+ ObfuscatedFileUtil::ComputeFilePathCost(path) - 1);
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, ofu()->CreateDirectory(
context.get(), path, exclusive, recursive));
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path));
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ ObfuscatedFileUtil::ComputeFilePathCost(path));
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), path, exclusive, recursive));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), path));
+ EXPECT_TRUE(ofu()->DirectoryExists(context.get(), path));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->PathExists(context.get(), path));
+ EXPECT_TRUE(ofu()->PathExists(context.get(), path));
exclusive = true;
recursive = false;
- EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofsfu()->CreateDirectory(
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofu()->CreateDirectory(
context.get(), path, exclusive, recursive));
exclusive = true;
recursive = false;
path = UTF8ToFilePath("foo");
- EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofsfu()->CreateDirectory(
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofu()->CreateDirectory(
context.get(), path, exclusive, recursive));
path = UTF8ToFilePath("blah");
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), path));
+ EXPECT_FALSE(ofu()->DirectoryExists(context.get(), path));
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->PathExists(context.get(), path));
+ EXPECT_FALSE(ofu()->PathExists(context.get(), path));
exclusive = true;
recursive = false;
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), path, exclusive, recursive));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), path));
+ EXPECT_TRUE(ofu()->DirectoryExists(context.get(), path));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->PathExists(context.get(), path));
+ EXPECT_TRUE(ofu()->PathExists(context.get(), path));
exclusive = true;
recursive = false;
- EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofsfu()->CreateDirectory(
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofu()->CreateDirectory(
context.get(), path, exclusive, recursive));
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestReadDirectory) {
+TEST_F(ObfuscatedFileUtilTest, TestReadDirectory) {
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
bool exclusive = true;
bool recursive = true;
FilePath path = UTF8ToFilePath("directory/to/use");
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), path, exclusive, recursive));
TestReadDirectoryHelper(path);
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestReadRootWithSlash) {
+TEST_F(ObfuscatedFileUtilTest, TestReadRootWithSlash) {
TestReadDirectoryHelper(UTF8ToFilePath(""));
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestReadRootWithEmptyString) {
+TEST_F(ObfuscatedFileUtilTest, TestReadRootWithEmptyString) {
TestReadDirectoryHelper(UTF8ToFilePath("/"));
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestReadDirectoryOnFile) {
+TEST_F(ObfuscatedFileUtilTest, TestReadDirectoryOnFile) {
FilePath path = UTF8ToFilePath("file");
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
bool created = false;
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), path, &created));
+ ofu()->EnsureFileExists(context.get(), path, &created));
ASSERT_TRUE(created);
context.reset(NewContext(NULL));
std::vector<base::FileUtilProxy::Entry> entries;
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
- ofsfu()->ReadDirectory(context.get(), path, &entries));
+ ofu()->ReadDirectory(context.get(), path, &entries));
- EXPECT_TRUE(ofsfu()->IsDirectoryEmpty(context.get(), path));
+ EXPECT_TRUE(ofu()->IsDirectoryEmpty(context.get(), path));
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestTouch) {
+TEST_F(ObfuscatedFileUtilTest, TestTouch) {
FilePath path = UTF8ToFilePath("file");
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
@@ -842,14 +840,14 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestTouch) {
// It's not there yet.
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
- ofsfu()->Touch(
+ ofu()->Touch(
context.get(), path, last_access_time, last_modified_time));
// OK, now create it.
context.reset(NewContext(NULL));
bool created = false;
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), path, &created));
+ ofu()->EnsureFileExists(context.get(), path, &created));
ASSERT_TRUE(created);
TestTouchHelper(path, true);
@@ -858,12 +856,12 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestTouch) {
bool exclusive = true;
bool recursive = false;
path = UTF8ToFilePath("dir");
- ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(context.get(),
+ ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(context.get(),
path, exclusive, recursive));
TestTouchHelper(path, false);
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestPathQuotas) {
+TEST_F(ObfuscatedFileUtilTest, TestPathQuotas) {
FilePath path = UTF8ToFilePath("fake/file");
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
@@ -871,15 +869,13 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestPathQuotas) {
context->set_allowed_bytes_growth(5);
bool created = false;
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE,
- ofsfu()->EnsureFileExists(
- context.get(), path, &created));
+ ofu()->EnsureFileExists(context.get(), path, &created));
EXPECT_FALSE(created);
context->set_allowed_bytes_growth(1024);
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(
- context.get(), path, &created));
+ ofu()->EnsureFileExists(context.get(), path, &created));
EXPECT_TRUE(created);
- int64 path_cost = ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path);
+ int64 path_cost = ObfuscatedFileUtil::ComputeFilePathCost(path);
EXPECT_EQ(1024 - path_cost, context->allowed_bytes_growth());
context->set_allowed_bytes_growth(1024);
@@ -891,48 +887,48 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestPathQuotas) {
path_cost = 0;
for (std::vector<FilePath::StringType>::iterator iter = components.begin();
iter != components.end(); ++iter) {
- path_cost += ObfuscatedFileSystemFileUtil::ComputeFilePathCost(
+ path_cost += ObfuscatedFileUtil::ComputeFilePathCost(
FilePath(*iter));
}
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(1024);
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), path, exclusive, recursive));
EXPECT_EQ(1024 - path_cost, context->allowed_bytes_growth());
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestCopyOrMoveFileNotFound) {
+TEST_F(ObfuscatedFileUtilTest, TestCopyOrMoveFileNotFound) {
FilePath source_path = UTF8ToFilePath("path0.txt");
FilePath dest_path = UTF8ToFilePath("path1.txt");
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
bool is_copy_not_move = false;
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
- ofsfu()->CopyOrMoveFile(context.get(), source_path, dest_path,
+ ofu()->CopyOrMoveFile(context.get(), source_path, dest_path,
is_copy_not_move));
context.reset(NewContext(NULL));
is_copy_not_move = true;
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
- ofsfu()->CopyOrMoveFile(context.get(), source_path, dest_path,
+ ofu()->CopyOrMoveFile(context.get(), source_path, dest_path,
is_copy_not_move));
source_path = UTF8ToFilePath("dir/dir/file");
bool exclusive = true;
bool recursive = true;
context.reset(NewContext(NULL));
- ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), source_path.DirName(), exclusive, recursive));
is_copy_not_move = false;
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
- ofsfu()->CopyOrMoveFile(context.get(), source_path, dest_path,
+ ofu()->CopyOrMoveFile(context.get(), source_path, dest_path,
is_copy_not_move));
context.reset(NewContext(NULL));
is_copy_not_move = true;
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
- ofsfu()->CopyOrMoveFile(context.get(), source_path, dest_path,
+ ofu()->CopyOrMoveFile(context.get(), source_path, dest_path,
is_copy_not_move));
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestCopyOrMoveFileSuccess) {
+TEST_F(ObfuscatedFileUtilTest, TestCopyOrMoveFileSuccess) {
const int64 kSourceLength = 5;
const int64 kDestLength = 50;
@@ -955,135 +951,135 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestCopyOrMoveFileSuccess) {
FilePath dest_path = UTF8ToFilePath(test_case.dest_path);
context.reset(NewContext(NULL));
- ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), source_path.DirName(), exclusive, recursive));
context.reset(NewContext(NULL));
- ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), dest_path.DirName(), exclusive, recursive));
bool created = false;
context.reset(NewContext(NULL));
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), source_path, &created));
+ ofu()->EnsureFileExists(context.get(), source_path, &created));
ASSERT_TRUE(created);
context.reset(NewContext(NULL));
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->Truncate(context.get(), source_path, kSourceLength));
+ ofu()->Truncate(context.get(), source_path, kSourceLength));
if (test_case.cause_overwrite) {
context.reset(NewContext(NULL));
created = false;
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), dest_path, &created));
+ ofu()->EnsureFileExists(context.get(), dest_path, &created));
ASSERT_TRUE(created);
context.reset(NewContext(NULL));
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->Truncate(context.get(), dest_path, kDestLength));
+ ofu()->Truncate(context.get(), dest_path, kDestLength));
}
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CopyOrMoveFile(context.get(),
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CopyOrMoveFile(context.get(),
source_path, dest_path, test_case.is_copy_not_move));
if (test_case.is_copy_not_move) {
base::PlatformFileInfo file_info;
FilePath local_path;
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
context.get(), source_path, &file_info, &local_path));
EXPECT_EQ(kSourceLength, file_info.size);
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->DeleteFile(context.get(), source_path));
+ ofu()->DeleteFile(context.get(), source_path));
} else {
base::PlatformFileInfo file_info;
FilePath local_path;
context.reset(NewContext(NULL));
- EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, ofsfu()->GetFileInfo(
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, ofu()->GetFileInfo(
context.get(), source_path, &file_info, &local_path));
}
base::PlatformFileInfo file_info;
FilePath local_path;
- EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo(
+ EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
context.get(), dest_path, &file_info, &local_path));
EXPECT_EQ(kSourceLength, file_info.size);
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->DeleteFile(context.get(), dest_path));
+ ofu()->DeleteFile(context.get(), dest_path));
}
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestCopyPathQuotas) {
+TEST_F(ObfuscatedFileUtilTest, TestCopyPathQuotas) {
FilePath src_path = UTF8ToFilePath("src path");
FilePath dest_path = UTF8ToFilePath("destination path");
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
bool created = false;
- ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->EnsureFileExists(
+ ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->EnsureFileExists(
context.get(), src_path, &created));
bool is_copy = true;
// Copy, no overwrite.
context->set_allowed_bytes_growth(
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(dest_path) - 1);
+ ObfuscatedFileUtil::ComputeFilePathCost(dest_path) - 1);
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE,
- ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
+ ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(dest_path));
+ ObfuscatedFileUtil::ComputeFilePathCost(dest_path));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
+ ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
// Copy, with overwrite.
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(0);
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
+ ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestMovePathQuotasWithRename) {
+TEST_F(ObfuscatedFileUtilTest, TestMovePathQuotasWithRename) {
FilePath src_path = UTF8ToFilePath("src path");
FilePath dest_path = UTF8ToFilePath("destination path");
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
bool created = false;
- ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->EnsureFileExists(
+ ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->EnsureFileExists(
context.get(), src_path, &created));
bool is_copy = false;
// Move, rename, no overwrite.
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(dest_path) -
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(src_path) - 1);
+ ObfuscatedFileUtil::ComputeFilePathCost(dest_path) -
+ ObfuscatedFileUtil::ComputeFilePathCost(src_path) - 1);
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE,
- ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
+ ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(dest_path) -
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(src_path));
+ ObfuscatedFileUtil::ComputeFilePathCost(dest_path) -
+ ObfuscatedFileUtil::ComputeFilePathCost(src_path));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
+ ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
context.reset(NewContext(NULL));
- ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->EnsureFileExists(
+ ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->EnsureFileExists(
context.get(), src_path, &created));
// Move, rename, with overwrite.
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(0);
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
+ ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestMovePathQuotasWithoutRename) {
+TEST_F(ObfuscatedFileUtilTest, TestMovePathQuotasWithoutRename) {
FilePath src_path = UTF8ToFilePath("src path");
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
bool created = false;
- ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->EnsureFileExists(
+ ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->EnsureFileExists(
context.get(), src_path, &created));
bool exclusive = true;
bool recursive = false;
FilePath dir_path = UTF8ToFilePath("directory path");
context.reset(NewContext(NULL));
- ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), dir_path, exclusive, recursive));
FilePath dest_path = dir_path.Append(src_path);
@@ -1094,34 +1090,34 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestMovePathQuotasWithoutRename) {
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(allowed_bytes_growth);
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
+ ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
EXPECT_EQ(allowed_bytes_growth, context->allowed_bytes_growth());
// Move, no rename, with overwrite.
context.reset(NewContext(NULL));
- ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->EnsureFileExists(
+ ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->EnsureFileExists(
context.get(), src_path, &created));
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(allowed_bytes_growth);
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
+ ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
EXPECT_EQ(
allowed_bytes_growth +
- ObfuscatedFileSystemFileUtil::ComputeFilePathCost(src_path),
+ ObfuscatedFileUtil::ComputeFilePathCost(src_path),
context->allowed_bytes_growth());
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestCopyInForeignFile) {
+TEST_F(ObfuscatedFileUtilTest, TestCopyInForeignFile) {
TestCopyInForeignFileHelper(false /* overwrite */);
TestCopyInForeignFileHelper(true /* overwrite */);
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestEnumerator) {
+TEST_F(ObfuscatedFileUtilTest, TestEnumerator) {
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
FilePath src_path = UTF8ToFilePath("source dir");
bool exclusive = true;
bool recursive = false;
- ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(
+ ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
context.get(), src_path, exclusive, recursive));
std::set<FilePath::StringType> files;
@@ -1131,25 +1127,25 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestEnumerator) {
FilePath dest_path = UTF8ToFilePath("destination dir");
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), dest_path));
+ EXPECT_FALSE(ofu()->DirectoryExists(context.get(), dest_path));
context.reset(NewContext(NULL));
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->Copy(context.get(), src_path, dest_path));
+ ofu()->Copy(context.get(), src_path, dest_path));
ValidateTestDirectory(dest_path, files, directories);
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), src_path));
+ EXPECT_TRUE(ofu()->DirectoryExists(context.get(), src_path));
context.reset(NewContext(NULL));
- EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), dest_path));
+ EXPECT_TRUE(ofu()->DirectoryExists(context.get(), dest_path));
context.reset(NewContext(NULL));
recursive = true;
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->Delete(context.get(), dest_path, recursive));
+ ofu()->Delete(context.get(), dest_path, recursive));
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), dest_path));
+ EXPECT_FALSE(ofu()->DirectoryExists(context.get(), dest_path));
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestMigration) {
+TEST_F(ObfuscatedFileUtilTest, TestMigration) {
ScopedTempDir source_dir;
ASSERT_TRUE(source_dir.CreateUniqueTempDir());
FilePath root_path = source_dir.path().AppendASCII("chrome-pLmnMWXE7NzTFRsn");
@@ -1178,11 +1174,11 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestMigration) {
}
}
- EXPECT_TRUE(ofsfu()->MigrateFromOldSandbox(origin(), type(), root_path));
+ EXPECT_TRUE(ofu()->MigrateFromOldSandbox(origin(), type(), root_path));
FilePath new_root =
test_directory().AppendASCII("File System").AppendASCII("000").Append(
- ofsfu()->GetDirectoryNameForType(type())).AppendASCII("Legacy");
+ ofu()->GetDirectoryNameForType(type())).AppendASCII("Legacy");
for (size_t i = 0; i < arraysize(kMigrationTestCases); ++i) {
SCOPED_TRACE(testing::Message() << "Validating kMigrationTestPath " << i);
const MigrationTestCaseRecord& test_case = kMigrationTestCases[i];
@@ -1191,14 +1187,14 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestMigration) {
local_data_path = local_data_path.NormalizeWindowsPathSeparators();
#endif
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
- base::PlatformFileInfo ofsfu_file_info;
+ base::PlatformFileInfo ofu_file_info;
FilePath data_path;
SCOPED_TRACE(testing::Message() << "Path is " << test_case.path);
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->GetFileInfo(context.get(), FilePath(test_case.path),
- &ofsfu_file_info, &data_path));
+ ofu()->GetFileInfo(context.get(), FilePath(test_case.path),
+ &ofu_file_info, &data_path));
if (test_case.is_directory) {
- EXPECT_TRUE(ofsfu_file_info.is_directory);
+ EXPECT_TRUE(ofu_file_info.is_directory);
} else {
base::PlatformFileInfo platform_file_info;
SCOPED_TRACE(testing::Message() << "local_data_path is " <<
@@ -1209,15 +1205,15 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestMigration) {
EXPECT_FALSE(platform_file_info.is_directory);
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
EXPECT_EQ(local_data_path, data_path);
- EXPECT_EQ(platform_file_info.size, ofsfu_file_info.size);
- EXPECT_FALSE(ofsfu_file_info.is_directory);
+ EXPECT_EQ(platform_file_info.size, ofu_file_info.size);
+ EXPECT_FALSE(ofu_file_info.is_directory);
}
}
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestOriginEnumerator) {
- scoped_ptr<ObfuscatedFileSystemFileUtil::AbstractOriginEnumerator>
- enumerator(ofsfu()->CreateOriginEnumerator());
+TEST_F(ObfuscatedFileUtilTest, TestOriginEnumerator) {
+ scoped_ptr<ObfuscatedFileUtil::AbstractOriginEnumerator>
+ enumerator(ofu()->CreateOriginEnumerator());
// The test helper starts out with a single filesystem.
EXPECT_TRUE(enumerator.get());
EXPECT_EQ(origin(), enumerator->Next());
@@ -1246,7 +1242,7 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestOriginEnumerator) {
context->set_src_type(kFileSystemTypeTemporary);
bool created = false;
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(),
+ ofu()->EnsureFileExists(context.get(),
FilePath().AppendASCII("file"), &created));
EXPECT_TRUE(created);
}
@@ -1258,12 +1254,12 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestOriginEnumerator) {
context->set_src_type(kFileSystemTypePersistent);
bool created = false;
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(),
+ ofu()->EnsureFileExists(context.get(),
FilePath().AppendASCII("file"), &created));
EXPECT_TRUE(created);
}
}
- enumerator.reset(ofsfu()->CreateOriginEnumerator());
+ enumerator.reset(ofu()->CreateOriginEnumerator());
EXPECT_TRUE(enumerator.get());
std::set<GURL> origins_found;
GURL origin_url;
@@ -1302,7 +1298,7 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestOriginEnumerator) {
EXPECT_TRUE(diff.empty());
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestRevokeUsageCache) {
+TEST_F(ObfuscatedFileUtilTest, TestRevokeUsageCache) {
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
int64 expected_quota = 0;
@@ -1311,19 +1307,19 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestRevokeUsageCache) {
SCOPED_TRACE(testing::Message() << "Creating kMigrationTestPath " << i);
const MigrationTestCaseRecord& test_case = kMigrationTestCases[i];
FilePath path(test_case.path);
- expected_quota += ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path);
+ expected_quota += ObfuscatedFileUtil::ComputeFilePathCost(path);
if (test_case.is_directory) {
bool exclusive = true;
bool recursive = false;
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CreateDirectory(context.get(), path, exclusive, recursive));
+ ofu()->CreateDirectory(context.get(), path, exclusive, recursive));
} else {
bool created = false;
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), path, &created));
+ ofu()->EnsureFileExists(context.get(), path, &created));
ASSERT_TRUE(created);
ASSERT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->Truncate(context.get(), path,
+ ofu()->Truncate(context.get(), path,
test_case.data_file_size));
expected_quota += test_case.data_file_size;
}
@@ -1336,7 +1332,7 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestRevokeUsageCache) {
EXPECT_EQ(expected_quota, usage());
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestInconsistency) {
+TEST_F(ObfuscatedFileUtilTest, TestInconsistency) {
const FilePath kPath1 = FilePath().AppendASCII("hoge");
const FilePath kPath2 = FilePath().AppendASCII("fuga");
@@ -1349,61 +1345,61 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestInconsistency) {
// Create a non-empty file.
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), kPath1, &created));
+ ofu()->EnsureFileExists(context.get(), kPath1, &created));
EXPECT_TRUE(created);
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->Truncate(context.get(), kPath1, 10));
+ ofu()->Truncate(context.get(), kPath1, 10));
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->GetFileInfo(
+ ofu()->GetFileInfo(
context.get(), kPath1, &file_info, &data_path));
EXPECT_EQ(10, file_info.size);
// Destroy database to make inconsistency between database and filesystem.
- ofsfu()->DestroyDirectoryDatabase(origin(), type());
+ ofu()->DestroyDirectoryDatabase(origin(), type());
// Try to get file info of broken file.
context.reset(NewContext(NULL));
- EXPECT_FALSE(ofsfu()->PathExists(context.get(), kPath1));
+ EXPECT_FALSE(ofu()->PathExists(context.get(), kPath1));
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), kPath1, &created));
+ ofu()->EnsureFileExists(context.get(), kPath1, &created));
EXPECT_TRUE(created);
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->GetFileInfo(
+ ofu()->GetFileInfo(
context.get(), kPath1, &file_info, &data_path));
EXPECT_EQ(0, file_info.size);
// Make another broken file to |kPath2|.
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), kPath2, &created));
+ ofu()->EnsureFileExists(context.get(), kPath2, &created));
EXPECT_TRUE(created);
// Destroy again.
- ofsfu()->DestroyDirectoryDatabase(origin(), type());
+ ofu()->DestroyDirectoryDatabase(origin(), type());
// Repair broken |kPath1|.
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
- ofsfu()->Touch(context.get(), kPath1, base::Time::Now(),
+ ofu()->Touch(context.get(), kPath1, base::Time::Now(),
base::Time::Now()));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), kPath1, &created));
+ ofu()->EnsureFileExists(context.get(), kPath1, &created));
EXPECT_TRUE(created);
// Copy from sound |kPath1| to broken |kPath2|.
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CopyOrMoveFile(context.get(), kPath1, kPath2,
+ ofu()->CopyOrMoveFile(context.get(), kPath1, kPath2,
true /* copy */));
- ofsfu()->DestroyDirectoryDatabase(origin(), type());
+ ofu()->DestroyDirectoryDatabase(origin(), type());
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->CreateOrOpen(
+ ofu()->CreateOrOpen(
context.get(), kPath1,
base::PLATFORM_FILE_READ | base::PLATFORM_FILE_CREATE,
&file, &created));
@@ -1413,7 +1409,7 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestInconsistency) {
EXPECT_TRUE(base::ClosePlatformFile(file));
}
-TEST_F(ObfuscatedFileSystemFileUtilTest, TestIncompleteDirectoryReading) {
+TEST_F(ObfuscatedFileUtilTest, TestIncompleteDirectoryReading) {
const FilePath kPath[] = {
FilePath().AppendASCII("foo"),
FilePath().AppendASCII("bar"),
@@ -1425,25 +1421,25 @@ TEST_F(ObfuscatedFileSystemFileUtilTest, TestIncompleteDirectoryReading) {
bool created = false;
context.reset(NewContext(NULL));
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->EnsureFileExists(context.get(), kPath[i], &created));
+ ofu()->EnsureFileExists(context.get(), kPath[i], &created));
EXPECT_TRUE(created);
}
context.reset(NewContext(NULL));
std::vector<base::FileUtilProxy::Entry> entries;
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->ReadDirectory(context.get(), FilePath(), &entries));
+ ofu()->ReadDirectory(context.get(), FilePath(), &entries));
EXPECT_EQ(3u, entries.size());
context.reset(NewContext(NULL));
FilePath local_path;
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->GetLocalFilePath(context.get(), kPath[0], &local_path));
+ ofu()->GetLocalFilePath(context.get(), kPath[0], &local_path));
EXPECT_TRUE(file_util::Delete(local_path, false));
context.reset(NewContext(NULL));
entries.clear();
EXPECT_EQ(base::PLATFORM_FILE_OK,
- ofsfu()->ReadDirectory(context.get(), FilePath(), &entries));
+ ofu()->ReadDirectory(context.get(), FilePath(), &entries));
EXPECT_EQ(ARRAYSIZE_UNSAFE(kPath) - 1, entries.size());
}
diff --git a/webkit/fileapi/quota_file_util.cc b/webkit/fileapi/quota_file_util.cc
index 1cdf0d2..6ccb578 100644
--- a/webkit/fileapi/quota_file_util.cc
+++ b/webkit/fileapi/quota_file_util.cc
@@ -10,6 +10,7 @@
#include "webkit/fileapi/file_system_operation_context.h"
#include "webkit/fileapi/file_system_path_manager.h"
#include "webkit/fileapi/file_system_quota_util.h"
+#include "webkit/fileapi/native_file_util.h"
#include "webkit/quota/quota_manager.h"
using quota::QuotaManagerProxy;
@@ -68,7 +69,7 @@ void NotifyUpdate(FileSystemOperationContext* operation_context,
} // namespace (anonymous)
QuotaFileUtil::QuotaFileUtil(FileSystemFileUtil* underlying_file_util)
- : underlying_file_util_(underlying_file_util) {
+ : FileSystemFileUtil(underlying_file_util) {
}
QuotaFileUtil::~QuotaFileUtil() {
@@ -76,7 +77,35 @@ QuotaFileUtil::~QuotaFileUtil() {
// static
QuotaFileUtil* QuotaFileUtil::CreateDefault() {
- return new QuotaFileUtil(new FileSystemFileUtil());
+ return new QuotaFileUtil(new NativeFileUtil());
+}
+
+base::PlatformFileError QuotaFileUtil::Truncate(
+ FileSystemOperationContext* fs_context,
+ const FilePath& path,
+ int64 length) {
+ int64 allowed_bytes_growth = fs_context->allowed_bytes_growth();
+
+ int64 growth = 0;
+ base::PlatformFileInfo file_info;
+ if (!file_util::GetFileInfo(path, &file_info))
+ return base::PLATFORM_FILE_ERROR_FAILED;
+
+ growth = length - file_info.size;
+ if (allowed_bytes_growth != kNoLimit &&
+ growth > 0 && growth > allowed_bytes_growth)
+ return base::PLATFORM_FILE_ERROR_NO_SPACE;
+
+ base::PlatformFileError error = underlying_file_util()->Truncate(
+ fs_context, path, length);
+
+ if (error == base::PLATFORM_FILE_OK)
+ NotifyUpdate(fs_context,
+ fs_context->src_origin_url(),
+ fs_context->src_type(),
+ growth);
+
+ return error;
}
base::PlatformFileError QuotaFileUtil::CopyOrMoveFile(
@@ -102,7 +131,7 @@ base::PlatformFileError QuotaFileUtil::CopyOrMoveFile(
growth = -dest_file_info.size;
}
- base::PlatformFileError error = underlying_file_util_->CopyOrMoveFile(
+ base::PlatformFileError error = underlying_file_util()->CopyOrMoveFile(
fs_context, src_file_path, dest_file_path, copy);
if (error == base::PLATFORM_FILE_OK) {
@@ -128,7 +157,7 @@ base::PlatformFileError QuotaFileUtil::DeleteFile(
file_info.size = 0;
growth = -file_info.size;
- base::PlatformFileError error = underlying_file_util_->DeleteFile(
+ base::PlatformFileError error = underlying_file_util()->DeleteFile(
fs_context, file_path);
if (error == base::PLATFORM_FILE_OK)
@@ -140,32 +169,4 @@ base::PlatformFileError QuotaFileUtil::DeleteFile(
return error;
}
-base::PlatformFileError QuotaFileUtil::Truncate(
- FileSystemOperationContext* fs_context,
- const FilePath& path,
- int64 length) {
- int64 allowed_bytes_growth = fs_context->allowed_bytes_growth();
-
- int64 growth = 0;
- base::PlatformFileInfo file_info;
- if (!file_util::GetFileInfo(path, &file_info))
- return base::PLATFORM_FILE_ERROR_FAILED;
-
- growth = length - file_info.size;
- if (allowed_bytes_growth != kNoLimit &&
- growth > 0 && growth > allowed_bytes_growth)
- return base::PLATFORM_FILE_ERROR_NO_SPACE;
-
- base::PlatformFileError error = underlying_file_util_->Truncate(
- fs_context, path, length);
-
- if (error == base::PLATFORM_FILE_OK)
- NotifyUpdate(fs_context,
- fs_context->src_origin_url(),
- fs_context->src_type(),
- growth);
-
- return error;
-}
-
} // namespace fileapi
diff --git a/webkit/fileapi/quota_file_util.h b/webkit/fileapi/quota_file_util.h
index 991497b..25be5f3 100644
--- a/webkit/fileapi/quota_file_util.h
+++ b/webkit/fileapi/quota_file_util.h
@@ -25,28 +25,24 @@ class QuotaFileUtil : public FileSystemFileUtil {
explicit QuotaFileUtil(FileSystemFileUtil* underlying_file_util);
virtual ~QuotaFileUtil();
- // Creates a QuotaFileUtil instance with an underlying FileSystemFileUtil
+ // Creates a QuotaFileUtil instance with an underlying NativeFileUtil
// instance.
static QuotaFileUtil* CreateDefault();
+ virtual base::PlatformFileError Truncate(
+ FileSystemOperationContext* fs_context,
+ const FilePath& path,
+ int64 length) OVERRIDE;
virtual base::PlatformFileError CopyOrMoveFile(
FileSystemOperationContext* fs_context,
const FilePath& src_file_path,
const FilePath& dest_file_path,
bool copy) OVERRIDE;
-
virtual base::PlatformFileError DeleteFile(
FileSystemOperationContext* fs_context,
const FilePath& file_path) OVERRIDE;
- virtual base::PlatformFileError Truncate(
- FileSystemOperationContext* fs_context,
- const FilePath& path,
- int64 length) OVERRIDE;
-
private:
- scoped_ptr<FileSystemFileUtil> underlying_file_util_;
-
DISALLOW_COPY_AND_ASSIGN(QuotaFileUtil);
};
diff --git a/webkit/fileapi/quota_file_util_unittest.cc b/webkit/fileapi/quota_file_util_unittest.cc
index d8766e7..9b53e01 100644
--- a/webkit/fileapi/quota_file_util_unittest.cc
+++ b/webkit/fileapi/quota_file_util_unittest.cc
@@ -11,7 +11,6 @@
#include "base/scoped_temp_dir.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "webkit/fileapi/file_system_context.h"
-#include "webkit/fileapi/file_system_file_util.h"
#include "webkit/fileapi/file_system_operation_context.h"
#include "webkit/fileapi/file_system_path_manager.h"
#include "webkit/fileapi/file_system_test_helper.h"
diff --git a/webkit/fileapi/sandbox_mount_point_provider.cc b/webkit/fileapi/sandbox_mount_point_provider.cc
index ebcdc37..8feb2ff 100644
--- a/webkit/fileapi/sandbox_mount_point_provider.cc
+++ b/webkit/fileapi/sandbox_mount_point_provider.cc
@@ -20,8 +20,7 @@
#include "webkit/fileapi/file_system_types.h"
#include "webkit/fileapi/file_system_usage_cache.h"
#include "webkit/fileapi/file_system_util.h"
-#include "webkit/fileapi/local_file_system_file_util.h"
-#include "webkit/fileapi/obfuscated_file_system_file_util.h"
+#include "webkit/fileapi/obfuscated_file_util.h"
#include "webkit/fileapi/quota_file_util.h"
#include "webkit/glue/webkit_glue.h"
#include "webkit/quota/quota_manager.h"
@@ -96,7 +95,7 @@ class ObfuscatedOriginEnumerator
: public fileapi::SandboxMountPointProvider::OriginEnumerator {
public:
explicit ObfuscatedOriginEnumerator(
- fileapi::ObfuscatedFileSystemFileUtil* file_util) {
+ fileapi::ObfuscatedFileUtil* file_util) {
enum_.reset(file_util->CreateOriginEnumerator());
}
virtual ~ObfuscatedOriginEnumerator() {}
@@ -110,8 +109,7 @@ class ObfuscatedOriginEnumerator
}
private:
- scoped_ptr<fileapi::ObfuscatedFileSystemFileUtil::AbstractOriginEnumerator>
- enum_;
+ scoped_ptr<fileapi::ObfuscatedFileUtil::AbstractOriginEnumerator> enum_;
};
class OldSandboxOriginEnumerator
@@ -172,7 +170,7 @@ FilePath OldGetBaseDirectoryForOriginAndType(
}
bool MigrateOneOldFileSystem(
- fileapi::ObfuscatedFileSystemFileUtil* file_util,
+ fileapi::ObfuscatedFileUtil* file_util,
const FilePath& old_base_path, const GURL& origin,
fileapi::FileSystemType type) {
FilePath base_path = OldGetBaseDirectoryForOriginAndType(
@@ -201,7 +199,7 @@ bool MigrateOneOldFileSystem(
}
void MigrateAllOldFileSystems(
- fileapi::ObfuscatedFileSystemFileUtil* file_util,
+ fileapi::ObfuscatedFileUtil* file_util,
const FilePath& old_base_path) {
scoped_ptr<OldSandboxOriginEnumerator> old_origins(
new OldSandboxOriginEnumerator(old_base_path));
@@ -250,7 +248,7 @@ void MigrateAllOldFileSystems(
// to look up the filesystem's root, so we can take care of most of them by
// putting a check there.
void MigrateIfNeeded(
- fileapi::ObfuscatedFileSystemFileUtil* file_util,
+ fileapi::ObfuscatedFileUtil* file_util,
const FilePath& old_base_path) {
if (file_util::DirectoryExists(old_base_path))
MigrateAllOldFileSystems(file_util, old_base_path);
@@ -279,7 +277,7 @@ SandboxMountPointProvider::SandboxMountPointProvider(
file_message_loop_(file_message_loop),
profile_path_(profile_path),
sandbox_file_util_(
- new ObfuscatedFileSystemFileUtil(
+ new ObfuscatedFileUtil(
profile_path.Append(kNewFileSystemDirectory),
QuotaFileUtil::CreateDefault())) {
}
@@ -306,7 +304,7 @@ class SandboxMountPointProvider::GetFileSystemRootPathTask
scoped_refptr<base::MessageLoopProxy> file_message_loop,
const GURL& origin_url,
FileSystemType type,
- ObfuscatedFileSystemFileUtil* file_util,
+ ObfuscatedFileUtil* file_util,
const FilePath& old_base_path,
FileSystemPathManager::GetRootPathCallback* callback)
: file_message_loop_(file_message_loop),
@@ -360,7 +358,7 @@ class SandboxMountPointProvider::GetFileSystemRootPathTask
scoped_refptr<base::MessageLoopProxy> origin_message_loop_proxy_;
GURL origin_url_;
FileSystemType type_;
- scoped_refptr<ObfuscatedFileSystemFileUtil> file_util_;
+ scoped_refptr<ObfuscatedFileUtil> file_util_;
FilePath old_base_path_;
scoped_ptr<FileSystemPathManager::GetRootPathCallback> callback_;
};
@@ -550,7 +548,7 @@ int64 SandboxMountPointProvider::GetOriginUsageOnFileThread(
base::PlatformFileInfo file_info;
FilePath platform_file_path;
usage += enumerator->Size();
- usage += ObfuscatedFileSystemFileUtil::ComputeFilePathCost(file_path_each);
+ usage += ObfuscatedFileUtil::ComputeFilePathCost(file_path_each);
}
// This clears the dirty flag too.
FileSystemUsageCache::UpdateUsage(usage_file_path, usage);
@@ -616,7 +614,7 @@ void SandboxMountPointProvider::InvalidateUsageCache(
FileSystemUsageCache::IncrementDirty(usage_file_path);
}
-FileSystemFileUtil* SandboxMountPointProvider::GetFileSystemFileUtil() {
+FileSystemFileUtil* SandboxMountPointProvider::GetFileUtil() {
return sandbox_file_util_.get();
}
diff --git a/webkit/fileapi/sandbox_mount_point_provider.h b/webkit/fileapi/sandbox_mount_point_provider.h
index 8480581..b6cab5b 100644
--- a/webkit/fileapi/sandbox_mount_point_provider.h
+++ b/webkit/fileapi/sandbox_mount_point_provider.h
@@ -25,7 +25,7 @@ class QuotaManagerProxy;
namespace fileapi {
-class ObfuscatedFileSystemFileUtil;
+class ObfuscatedFileUtil;
// An interface to construct or crack sandboxed filesystem paths.
// Currently each sandboxed filesystem path looks like (soon will be changed):
@@ -108,7 +108,7 @@ class SandboxMountPointProvider
FileSystemType type,
bool create) const;
- virtual FileSystemFileUtil* GetFileSystemFileUtil();
+ virtual FileSystemFileUtil* GetFileUtil();
// Deletes the data on the origin and reports the amount of deleted data
// to the quota manager via |proxy|.
@@ -171,7 +171,7 @@ class SandboxMountPointProvider
const FilePath profile_path_;
- scoped_refptr<ObfuscatedFileSystemFileUtil> sandbox_file_util_;
+ scoped_refptr<ObfuscatedFileUtil> sandbox_file_util_;
// Acccessed only on the file thread.
std::set<GURL> visited_origins_;
diff --git a/webkit/fileapi/sandbox_mount_point_provider_unittest.cc b/webkit/fileapi/sandbox_mount_point_provider_unittest.cc
index 53d94a8..6b17ea2 100644
--- a/webkit/fileapi/sandbox_mount_point_provider_unittest.cc
+++ b/webkit/fileapi/sandbox_mount_point_provider_unittest.cc
@@ -164,7 +164,7 @@ class SandboxMountPointProviderMigrationTest : public testing::Test {
}
FileSystemFileUtil* file_util() {
- return sandbox_provider()->GetFileSystemFileUtil();
+ return sandbox_provider()->GetFileUtil();
}
void OnGetRootPath(bool success, const FilePath& unused,
diff --git a/webkit/fileapi/webkit_fileapi.gypi b/webkit/fileapi/webkit_fileapi.gypi
index e8708c1..2f81151 100644
--- a/webkit/fileapi/webkit_fileapi.gypi
+++ b/webkit/fileapi/webkit_fileapi.gypi
@@ -50,10 +50,12 @@
'file_system_util.h',
'file_writer_delegate.cc',
'file_writer_delegate.h',
- 'local_file_system_file_util.cc',
- 'local_file_system_file_util.h',
- 'obfuscated_file_system_file_util.cc',
- 'obfuscated_file_system_file_util.h',
+ 'local_file_util.cc',
+ 'local_file_util.h',
+ 'native_file_util.cc',
+ 'native_file_util.h',
+ 'obfuscated_file_util.cc',
+ 'obfuscated_file_util.h',
'quota_file_util.cc',
'quota_file_util.h',
'sandbox_mount_point_provider.cc',
diff --git a/webkit/tools/test_shell/simple_file_system.cc b/webkit/tools/test_shell/simple_file_system.cc
index 6b30563..c20c0e9 100644
--- a/webkit/tools/test_shell/simple_file_system.cc
+++ b/webkit/tools/test_shell/simple_file_system.cc
@@ -21,7 +21,6 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebVector.h"
#include "webkit/fileapi/file_system_callback_dispatcher.h"
#include "webkit/fileapi/file_system_context.h"
-#include "webkit/fileapi/file_system_file_util.h"
#include "webkit/fileapi/file_system_operation.h"
#include "webkit/fileapi/file_system_path_manager.h"
#include "webkit/fileapi/file_system_types.h"
@@ -44,7 +43,6 @@ using WebKit::WebVector;
using fileapi::FileSystemCallbackDispatcher;
using fileapi::FileSystemContext;
-using fileapi::FileSystemFileUtil;
using fileapi::FileSystemOperation;
namespace {
diff --git a/webkit/tools/test_shell/simple_file_writer.cc b/webkit/tools/test_shell/simple_file_writer.cc
index fee2c55..8c07ccd 100644
--- a/webkit/tools/test_shell/simple_file_writer.cc
+++ b/webkit/tools/test_shell/simple_file_writer.cc
@@ -9,14 +9,12 @@
#include "net/url_request/url_request_context.h"
#include "webkit/fileapi/file_system_callback_dispatcher.h"
#include "webkit/fileapi/file_system_context.h"
-#include "webkit/fileapi/file_system_file_util.h"
#include "webkit/fileapi/file_system_operation.h"
#include "webkit/glue/webkit_glue.h"
#include "webkit/tools/test_shell/simple_resource_loader_bridge.h"
using fileapi::FileSystemCallbackDispatcher;
using fileapi::FileSystemContext;
-using fileapi::FileSystemFileUtil;
using fileapi::FileSystemOperation;
using fileapi::WebFileWriterBase;
using WebKit::WebFileWriterClient;
diff --git a/webkit/tools/test_shell/test_shell.gypi b/webkit/tools/test_shell/test_shell.gypi
index 2d457db..256376d 100644
--- a/webkit/tools/test_shell/test_shell.gypi
+++ b/webkit/tools/test_shell/test_shell.gypi
@@ -402,8 +402,8 @@
'../../fileapi/file_system_quota_unittest.cc',
'../../fileapi/file_system_usage_cache_unittest.cc',
'../../fileapi/file_system_util_unittest.cc',
- '../../fileapi/local_file_system_file_util_unittest.cc',
- '../../fileapi/obfuscated_file_system_file_util_unittest.cc',
+ '../../fileapi/local_file_util_unittest.cc',
+ '../../fileapi/obfuscated_file_util_unittest.cc',
'../../fileapi/quota_file_util_unittest.cc',
'../../fileapi/sandbox_mount_point_provider_unittest.cc',
'../../fileapi/file_system_test_helper.cc',