Index: webkit/fileapi/fileapi_file_util.cc |
diff --git a/webkit/fileapi/file_system_file_util.cc b/webkit/fileapi/fileapi_file_util.cc |
similarity index 54% |
rename from webkit/fileapi/file_system_file_util.cc |
rename to webkit/fileapi/fileapi_file_util.cc |
index 3600a8fd414dc8a13e47e7c19c159f87dd4a439f..f9cd93daf9c30710f935be9bd73b0baae831d432 100644 |
--- a/webkit/fileapi/file_system_file_util.cc |
+++ b/webkit/fileapi/fileapi_file_util.cc |
@@ -2,12 +2,10 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "webkit/fileapi/file_system_file_util.h" |
+#include "webkit/fileapi/fileapi_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" |
@@ -17,7 +15,7 @@ namespace { |
// This assumes that the root exists. |
bool ParentExists(FileSystemOperationContext* context, |
- FileSystemFileUtil* file_util, const FilePath& file_path) { |
+ FileApiFileUtil* file_util, const FilePath& file_path) { |
// If file_path is in the root, file_path.DirName() will be ".", |
// since we use paths with no leading '/'. |
FilePath parent = file_path.DirName(); |
@@ -28,139 +26,17 @@ 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; |
+FileApiFileUtil::FileApiFileUtil() { |
} |
-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; |
+FileApiFileUtil::FileApiFileUtil(FileApiFileUtil* underlying_file_util) |
+ : underlying_file_util_(underlying_file_util) { |
} |
-PlatformFileError FileSystemFileUtil::CreateDirectory( |
- FileSystemOperationContext* fs_context, |
- const FilePath& file_path, |
- bool exclusive, |
- bool recursive) { |
- if (fs_context->do_not_write_actually()) |
- return base::PLATFORM_FILE_OK; |
- |
- // 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; |
+FileApiFileUtil::~FileApiFileUtil() { |
} |
-PlatformFileError FileSystemFileUtil::Copy( |
+PlatformFileError FileApiFileUtil::Copy( |
FileSystemOperationContext* context, |
const FilePath& src_file_path, |
const FilePath& dest_file_path) { |
@@ -178,7 +54,7 @@ PlatformFileError FileSystemFileUtil::Copy( |
true /* copy */); |
} |
-PlatformFileError FileSystemFileUtil::Move( |
+PlatformFileError FileApiFileUtil::Move( |
FileSystemOperationContext* context, |
const FilePath& src_file_path, |
const FilePath& dest_file_path) { |
@@ -197,7 +73,7 @@ PlatformFileError FileSystemFileUtil::Move( |
false /* copy */); |
} |
-PlatformFileError FileSystemFileUtil::Delete( |
+PlatformFileError FileApiFileUtil::Delete( |
FileSystemOperationContext* context, |
const FilePath& file_path, |
bool recursive) { |
@@ -211,51 +87,18 @@ PlatformFileError FileSystemFileUtil::Delete( |
} |
} |
-PlatformFileError FileSystemFileUtil::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 FileSystemFileUtil::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; |
-} |
- |
PlatformFileError |
-FileSystemFileUtil::PerformCommonCheckAndPreparationForMoveAndCopy( |
+FileApiFileUtil::PerformCommonCheckAndPreparationForMoveAndCopy( |
FileSystemOperationContext* context, |
const FilePath& src_file_path, |
const FilePath& dest_file_path) { |
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(); |
+ FileApiFileUtil* dest_util = context->dest_file_util(); |
DCHECK(dest_util); |
if (same_file_system) |
- DCHECK(context->src_file_system_file_util() == |
- context->dest_file_system_file_util()); |
+ DCHECK(context->src_file_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. |
@@ -313,35 +156,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( |
+PlatformFileError FileApiFileUtil::CopyOrMoveDirectory( |
FileSystemOperationContext* context, |
const FilePath& src_file_path, |
const FilePath& dest_file_path, |
bool copy) { |
- FileSystemFileUtil* dest_util = context->dest_file_system_file_util(); |
+ FileApiFileUtil* dest_util = context->dest_file_util(); |
scoped_ptr<FileSystemOperationContext> dest_context( |
context->CreateInheritedContextForDest()); |
@@ -397,7 +217,7 @@ PlatformFileError FileSystemFileUtil::CopyOrMoveDirectory( |
return base::PLATFORM_FILE_OK; |
} |
-PlatformFileError FileSystemFileUtil::CopyOrMoveFileHelper( |
+PlatformFileError FileApiFileUtil::CopyOrMoveFileHelper( |
FileSystemOperationContext* context, |
const FilePath& src_file_path, |
const FilePath& dest_file_path, |
@@ -405,8 +225,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; |
@@ -417,46 +236,15 @@ 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( |
+PlatformFileError FileApiFileUtil::DeleteDirectoryRecursive( |
FileSystemOperationContext* context, |
const FilePath& file_path) { |
scoped_ptr<AbstractFileEnumerator> file_enum( |
@@ -498,60 +286,212 @@ PlatformFileError FileSystemFileUtil::DeleteDirectoryRecursive( |
return DeleteSingleDirectory(context, file_path); |
} |
-bool FileSystemFileUtil::PathExists( |
- FileSystemOperationContext* unused, |
- const FilePath& file_path) { |
- return file_util::PathExists(file_path); |
+PlatformFileError FileApiFileUtil::CreateOrOpen( |
ericu
2011/08/22 17:59:37
It's good for implementations of methods to match
Dai Mikurube (NOT FULLTIME)
2011/08/24 11:57:30
Agreed, and reordered the functions.
|
+ 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 it has no" |
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
} |
-bool FileSystemFileUtil::DirectoryExists( |
- FileSystemOperationContext* unused, |
- const FilePath& file_path) { |
- return file_util::DirectoryExists(file_path); |
+PlatformFileError FileApiFileUtil::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 it has no" |
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
} |
-bool FileSystemFileUtil::IsDirectoryEmpty( |
- FileSystemOperationContext* unused, |
- const FilePath& file_path) { |
- return file_util::IsDirectoryEmpty(file_path); |
+PlatformFileError FileApiFileUtil::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 it has no" |
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
+} |
+ |
+PlatformFileError FileApiFileUtil::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 it has no" |
ericu
2011/08/22 17:59:37
s/it has/they have/g
Dai Mikurube (NOT FULLTIME)
2011/08/24 11:57:30
Done.
|
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
+} |
+ |
+PlatformFileError FileApiFileUtil::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 it has no" |
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
+} |
+ |
+PlatformFileError FileApiFileUtil::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 it has no" |
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
+} |
+ |
+PlatformFileError FileApiFileUtil::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 it has no" |
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
+} |
+ |
+PlatformFileError FileApiFileUtil::Touch( |
+ FileSystemOperationContext* context, |
+ const FilePath& file_path, |
+ const base::Time& last_access_time, |
+ const base::Time& last_modified_time) { |
+ 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 it has no" |
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
} |
-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) { |
+PlatformFileError FileApiFileUtil::Truncate( |
+ FileSystemOperationContext* context, |
+ const FilePath& file_path, |
+ int64 length) { |
+ if (underlying_file_util_.get()) { |
+ return underlying_file_util_->Truncate(context, file_path, length); |
} |
+ NOTREACHED() << "Subclasses must provide implementation if it has no" |
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
+} |
- ~FileSystemFileEnumerator() {} |
+PlatformFileError FileApiFileUtil::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); |
+ } |
+ NOTREACHED() << "Subclasses must provide implementation if it has no" |
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
+} |
- virtual FilePath Next(); |
- virtual bool IsDirectory(); |
+PlatformFileError FileApiFileUtil::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 it has no" |
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
+} |
- private: |
- file_util::FileEnumerator file_enum_; |
-}; |
+PlatformFileError FileApiFileUtil::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 it has no" |
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
+} |
+ |
+PlatformFileError FileApiFileUtil::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 it has no" |
+ << "underlying_file_util"; |
+ return base::PLATFORM_FILE_ERROR_FAILED; |
+} |
+ |
+bool FileApiFileUtil::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 it has no" |
+ << "underlying_file_util"; |
+ return false; |
+} |
-FilePath FileSystemFileEnumerator::Next() { |
- return file_enum_.Next(); |
+bool FileApiFileUtil::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 it has no" |
+ << "underlying_file_util"; |
+ return false; |
} |
-bool FileSystemFileEnumerator::IsDirectory() { |
- file_util::FileEnumerator::FindInfo file_util_info; |
- file_enum_.GetFindInfo(&file_util_info); |
- return file_util::FileEnumerator::IsDirectory(file_util_info); |
+bool FileApiFileUtil::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 it has no" |
+ << "underlying_file_util"; |
+ return false; |
} |
-FileSystemFileUtil::AbstractFileEnumerator* |
-FileSystemFileUtil::CreateFileEnumerator( |
- FileSystemOperationContext* unused, |
+FileApiFileUtil::AbstractFileEnumerator* FileApiFileUtil::CreateFileEnumerator( |
+ FileSystemOperationContext* context, |
const FilePath& root_path) { |
- return new FileSystemFileEnumerator( |
- root_path, true, static_cast<file_util::FileEnumerator::FileType>( |
- file_util::FileEnumerator::FILES | |
- file_util::FileEnumerator::DIRECTORIES)); |
+ if (underlying_file_util_.get()) { |
+ return underlying_file_util_->CreateFileEnumerator(context, root_path); |
+ } |
+ NOTREACHED() << "Subclasses must provide implementation if it has no" |
+ << "underlying_file_util"; |
+ return NULL; |
} |
} // namespace fileapi |