| Index: webkit/fileapi/file_system_file_util.cc
|
| diff --git a/webkit/fileapi/file_system_file_util.cc b/webkit/fileapi/file_system_file_util.cc
|
| deleted file mode 100644
|
| index afb6453b55e4c87275f5e857f4d7200da9cff76d..0000000000000000000000000000000000000000
|
| --- a/webkit/fileapi/file_system_file_util.cc
|
| +++ /dev/null
|
| @@ -1,557 +0,0 @@
|
| -// 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/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"
|
| -
|
| -namespace fileapi {
|
| -
|
| -namespace {
|
| -
|
| -// This assumes that the root exists.
|
| -bool ParentExists(FileSystemOperationContext* context,
|
| - FileSystemFileUtil* 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();
|
| - if (parent == FilePath(FILE_PATH_LITERAL(".")))
|
| - return true;
|
| - return file_util->DirectoryExists(context, parent);
|
| -}
|
| -
|
| -} // 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;
|
| -}
|
| -
|
| -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::FILE_TYPE>(
|
| - 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;
|
| -}
|
| -
|
| -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;
|
| -}
|
| -
|
| -PlatformFileError FileSystemFileUtil::Copy(
|
| - FileSystemOperationContext* context,
|
| - const FilePath& src_file_path,
|
| - const FilePath& dest_file_path) {
|
| - PlatformFileError error_code;
|
| - error_code =
|
| - PerformCommonCheckAndPreparationForMoveAndCopy(
|
| - context, src_file_path, dest_file_path);
|
| - if (error_code != base::PLATFORM_FILE_OK)
|
| - return error_code;
|
| -
|
| - if (DirectoryExists(context, src_file_path))
|
| - return CopyOrMoveDirectory(context, src_file_path, dest_file_path,
|
| - true /* copy */);
|
| - return CopyOrMoveFileHelper(context, src_file_path, dest_file_path,
|
| - true /* copy */);
|
| -}
|
| -
|
| -PlatformFileError FileSystemFileUtil::Move(
|
| - FileSystemOperationContext* context,
|
| - const FilePath& src_file_path,
|
| - const FilePath& dest_file_path) {
|
| - PlatformFileError error_code;
|
| - error_code =
|
| - PerformCommonCheckAndPreparationForMoveAndCopy(
|
| - context, src_file_path, dest_file_path);
|
| - if (error_code != base::PLATFORM_FILE_OK)
|
| - return error_code;
|
| -
|
| - // TODO(dmikurube): ReplaceFile if in the same domain and filesystem type.
|
| - if (DirectoryExists(context, src_file_path))
|
| - return CopyOrMoveDirectory(context, src_file_path, dest_file_path,
|
| - false /* copy */);
|
| - return CopyOrMoveFileHelper(context, src_file_path, dest_file_path,
|
| - false /* copy */);
|
| -}
|
| -
|
| -PlatformFileError FileSystemFileUtil::Delete(
|
| - FileSystemOperationContext* context,
|
| - const FilePath& file_path,
|
| - bool recursive) {
|
| - if (DirectoryExists(context, file_path)) {
|
| - if (!recursive)
|
| - return DeleteSingleDirectory(context, file_path);
|
| - else
|
| - return DeleteDirectoryRecursive(context, file_path);
|
| - } else {
|
| - return DeleteFile(context, file_path);
|
| - }
|
| -}
|
| -
|
| -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(
|
| - 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();
|
| - DCHECK(dest_util);
|
| - if (same_file_system)
|
| - DCHECK(context->src_file_system_file_util() ==
|
| - context->dest_file_system_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.
|
| - scoped_ptr<FileSystemOperationContext> dest_context(
|
| - context->CreateInheritedContextForDest());
|
| -
|
| - // Exits earlier if the source path does not exist.
|
| - if (!PathExists(context, src_file_path))
|
| - return base::PLATFORM_FILE_ERROR_NOT_FOUND;
|
| -
|
| - // The parent of the |dest_file_path| does not exist.
|
| - if (!ParentExists(dest_context.get(), dest_util, dest_file_path))
|
| - return base::PLATFORM_FILE_ERROR_NOT_FOUND;
|
| -
|
| - // It is an error to try to copy/move an entry into its child.
|
| - if (same_file_system && src_file_path.IsParent(dest_file_path))
|
| - return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
|
| -
|
| - // Now it is ok to return if the |dest_file_path| does not exist.
|
| - if (!dest_util->PathExists(dest_context.get(), dest_file_path))
|
| - return base::PLATFORM_FILE_OK;
|
| -
|
| - // |src_file_path| exists and is a directory.
|
| - // |dest_file_path| exists and is a file.
|
| - bool src_is_directory = DirectoryExists(context, src_file_path);
|
| - bool dest_is_directory =
|
| - dest_util->DirectoryExists(dest_context.get(), dest_file_path);
|
| - if (src_is_directory && !dest_is_directory)
|
| - return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
|
| -
|
| - // |src_file_path| exists and is a file.
|
| - // |dest_file_path| exists and is a directory.
|
| - if (!src_is_directory && dest_is_directory)
|
| - return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
|
| -
|
| - // It is an error to copy/move an entry into the same path.
|
| - if (same_file_system && (src_file_path.value() == dest_file_path.value()))
|
| - return base::PLATFORM_FILE_ERROR_EXISTS;
|
| -
|
| - if (dest_is_directory) {
|
| - // It is an error to copy/move an entry to a non-empty directory.
|
| - // Otherwise the copy/move attempt must overwrite the destination, but
|
| - // the file_util's Copy or Move method doesn't perform overwrite
|
| - // on all platforms, so we delete the destination directory here.
|
| - // TODO(kinuko): may be better to change the file_util::{Copy,Move}.
|
| - PlatformFileError error = dest_util->Delete(
|
| - dest_context.get(), dest_file_path, false /* recursive */);
|
| - context->ImportAllowedBytesGrowth(*dest_context);
|
| - if (base::PLATFORM_FILE_OK != error) {
|
| - if (!dest_util->IsDirectoryEmpty(dest_context.get(), dest_file_path))
|
| - return base::PLATFORM_FILE_ERROR_NOT_EMPTY;
|
| - return base::PLATFORM_FILE_ERROR_FAILED;
|
| - }
|
| - }
|
| - 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();
|
| - scoped_ptr<FileSystemOperationContext> dest_context(
|
| - context->CreateInheritedContextForDest());
|
| -
|
| - // Re-check PerformCommonCheckAndPreparationForMoveAndCopy() by DCHECK.
|
| - DCHECK(DirectoryExists(context, src_file_path));
|
| - DCHECK(ParentExists(dest_context.get(), dest_util, dest_file_path));
|
| - DCHECK(!dest_util->PathExists(dest_context.get(), dest_file_path));
|
| - if ((context->src_origin_url() == context->dest_origin_url()) &&
|
| - (context->src_type() == context->dest_type()))
|
| - DCHECK(!src_file_path.IsParent(dest_file_path));
|
| -
|
| - if (!dest_util->DirectoryExists(dest_context.get(), dest_file_path)) {
|
| - PlatformFileError error = dest_util->CreateDirectory(dest_context.get(),
|
| - dest_file_path, false, false);
|
| - context->ImportAllowedBytesGrowth(*dest_context);
|
| - if (error != base::PLATFORM_FILE_OK)
|
| - return error;
|
| - }
|
| -
|
| - scoped_ptr<AbstractFileEnumerator> file_enum(
|
| - CreateFileEnumerator(context, src_file_path));
|
| - FilePath src_file_path_each;
|
| - while (!(src_file_path_each = file_enum->Next()).empty()) {
|
| - FilePath dest_file_path_each(dest_file_path);
|
| - src_file_path.AppendRelativePath(src_file_path_each, &dest_file_path_each);
|
| -
|
| - if (file_enum->IsDirectory()) {
|
| - scoped_ptr<FileSystemOperationContext> new_directory_context(
|
| - dest_context->CreateInheritedContextWithNewVirtualPaths(
|
| - dest_file_path_each, FilePath()));
|
| - PlatformFileError error = dest_util->CreateDirectory(
|
| - new_directory_context.get(), dest_file_path_each, false, false);
|
| - context->ImportAllowedBytesGrowth(*new_directory_context);
|
| - if (error != base::PLATFORM_FILE_OK)
|
| - return error;
|
| - } else {
|
| - scoped_ptr<FileSystemOperationContext> copy_context(
|
| - context->CreateInheritedContextWithNewVirtualPaths(
|
| - src_file_path_each, dest_file_path_each));
|
| - PlatformFileError error = CopyOrMoveFileHelper(
|
| - copy_context.get(), src_file_path_each, dest_file_path_each, copy);
|
| - context->ImportAllowedBytesGrowth(*copy_context);
|
| - if (error != base::PLATFORM_FILE_OK)
|
| - return error;
|
| - }
|
| - }
|
| -
|
| - if (!copy) {
|
| - PlatformFileError error = Delete(context, src_file_path, true);
|
| - if (error != base::PLATFORM_FILE_OK)
|
| - return error;
|
| - }
|
| - return base::PLATFORM_FILE_OK;
|
| -}
|
| -
|
| -PlatformFileError FileSystemFileUtil::CopyOrMoveFileHelper(
|
| - FileSystemOperationContext* context,
|
| - const FilePath& src_file_path,
|
| - const FilePath& dest_file_path,
|
| - bool copy) {
|
| - // 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());
|
| - return CopyOrMoveFile(context, src_file_path, dest_file_path, copy);
|
| - }
|
| - base::PlatformFileInfo file_info;
|
| - FilePath platform_file_path;
|
| - PlatformFileError error_code;
|
| - error_code =
|
| - GetFileInfo(context, src_file_path, &file_info, &platform_file_path);
|
| - 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(
|
| - 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) {
|
| - scoped_ptr<AbstractFileEnumerator> file_enum(
|
| - CreateFileEnumerator(context, file_path));
|
| - FilePath file_path_each;
|
| -
|
| - std::stack<FilePath> directories;
|
| - while (!(file_path_each = file_enum->Next()).empty()) {
|
| - if (file_enum->IsDirectory()) {
|
| - directories.push(file_path_each);
|
| - } else {
|
| - // DeleteFile here is the virtual overridden member function.
|
| - scoped_ptr<FileSystemOperationContext> inherited_context(
|
| - context->CreateInheritedContextWithNewVirtualPaths(
|
| - file_path_each, FilePath()));
|
| - PlatformFileError error =
|
| - DeleteFile(inherited_context.get(), file_path_each);
|
| - context->ImportAllowedBytesGrowth(*inherited_context);
|
| - if (error == base::PLATFORM_FILE_ERROR_NOT_FOUND)
|
| - return base::PLATFORM_FILE_ERROR_FAILED;
|
| - else if (error != base::PLATFORM_FILE_OK)
|
| - return error;
|
| - }
|
| - }
|
| -
|
| - while (!directories.empty()) {
|
| - scoped_ptr<FileSystemOperationContext> inherited_context(
|
| - context->CreateInheritedContextWithNewVirtualPaths(
|
| - directories.top(), FilePath()));
|
| - PlatformFileError error =
|
| - DeleteSingleDirectory(inherited_context.get(), directories.top());
|
| - context->ImportAllowedBytesGrowth(*inherited_context);
|
| - if (error == base::PLATFORM_FILE_ERROR_NOT_FOUND)
|
| - return base::PLATFORM_FILE_ERROR_FAILED;
|
| - else if (error != base::PLATFORM_FILE_OK)
|
| - return error;
|
| - directories.pop();
|
| - }
|
| - 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::FILE_TYPE file_type)
|
| - : file_enum_(root_path, recursive, file_type) {
|
| - }
|
| -
|
| - ~FileSystemFileEnumerator() {}
|
| -
|
| - virtual FilePath Next();
|
| - virtual bool IsDirectory();
|
| -
|
| - private:
|
| - file_util::FileEnumerator file_enum_;
|
| -};
|
| -
|
| -FilePath FileSystemFileEnumerator::Next() {
|
| - return file_enum_.Next();
|
| -}
|
| -
|
| -bool FileSystemFileEnumerator::IsDirectory() {
|
| - file_util::FileEnumerator::FindInfo file_util_info;
|
| - file_enum_.GetFindInfo(&file_util_info);
|
| - 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::FILE_TYPE>(
|
| - file_util::FileEnumerator::FILES |
|
| - file_util::FileEnumerator::DIRECTORIES));
|
| -}
|
| -
|
| -} // namespace fileapi
|
|
|