Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(882)

Unified Diff: webkit/browser/fileapi/native_file_util.cc

Issue 539143002: Migrate webkit/browser/ to storage/browser/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/browser/fileapi/native_file_util.cc
diff --git a/webkit/browser/fileapi/native_file_util.cc b/webkit/browser/fileapi/native_file_util.cc
deleted file mode 100644
index 2fa3ef9cde79ec5e69bad8c5dd85354d895a627e..0000000000000000000000000000000000000000
--- a/webkit/browser/fileapi/native_file_util.cc
+++ /dev/null
@@ -1,315 +0,0 @@
-// Copyright (c) 2012 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/browser/fileapi/native_file_util.h"
-
-#include "base/file_util.h"
-#include "base/files/file.h"
-#include "base/files/file_enumerator.h"
-#include "base/memory/scoped_ptr.h"
-#include "webkit/browser/fileapi/file_system_operation_context.h"
-#include "webkit/browser/fileapi/file_system_url.h"
-
-namespace storage {
-
-namespace {
-
-// Sets permissions on directory at |dir_path| based on the target platform.
-// Returns true on success, or false otherwise.
-//
-// TODO(benchan): Find a better place outside webkit to host this function.
-bool SetPlatformSpecificDirectoryPermissions(const base::FilePath& dir_path) {
-#if defined(OS_CHROMEOS)
- // System daemons on Chrome OS may run as a user different than the Chrome
- // process but need to access files under the directories created here.
- // Because of that, grant the execute permission on the created directory
- // to group and other users.
- if (HANDLE_EINTR(chmod(dir_path.value().c_str(),
- S_IRWXU | S_IXGRP | S_IXOTH)) != 0) {
- return false;
- }
-#endif
- // Keep the directory permissions unchanged on non-Chrome OS platforms.
- return true;
-}
-
-// Copies a file |from| to |to|, and ensure the written content is synced to
-// the disk. This is essentially base::CopyFile followed by fsync().
-bool CopyFileAndSync(const base::FilePath& from, const base::FilePath& to) {
- base::File infile(from, base::File::FLAG_OPEN | base::File::FLAG_READ);
- if (!infile.IsValid()) {
- return false;
- }
-
- base::File outfile(to,
- base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
- if (!outfile.IsValid()) {
- return false;
- }
-
- const int kBufferSize = 32768;
- std::vector<char> buffer(kBufferSize);
-
- for (;;) {
- int bytes_read = infile.ReadAtCurrentPos(&buffer[0], kBufferSize);
- if (bytes_read < 0)
- return false;
- if (bytes_read == 0)
- break;
- for (int bytes_written = 0; bytes_written < bytes_read; ) {
- int bytes_written_partial = outfile.WriteAtCurrentPos(
- &buffer[bytes_written], bytes_read - bytes_written);
- if (bytes_written_partial < 0)
- return false;
- bytes_written += bytes_written_partial;
- }
- }
-
- return outfile.Flush();
-}
-
-} // namespace
-
-using base::PlatformFile;
-
-class NativeFileEnumerator : public FileSystemFileUtil::AbstractFileEnumerator {
- public:
- NativeFileEnumerator(const base::FilePath& root_path,
- bool recursive,
- int file_type)
- : file_enum_(root_path, recursive, file_type) {
- }
-
- virtual ~NativeFileEnumerator() {}
-
- virtual base::FilePath Next() OVERRIDE;
- virtual int64 Size() OVERRIDE;
- virtual base::Time LastModifiedTime() OVERRIDE;
- virtual bool IsDirectory() OVERRIDE;
-
- private:
- base::FileEnumerator file_enum_;
- base::FileEnumerator::FileInfo file_util_info_;
-};
-
-base::FilePath NativeFileEnumerator::Next() {
- base::FilePath rv = file_enum_.Next();
- if (!rv.empty())
- file_util_info_ = file_enum_.GetInfo();
- return rv;
-}
-
-int64 NativeFileEnumerator::Size() {
- return file_util_info_.GetSize();
-}
-
-base::Time NativeFileEnumerator::LastModifiedTime() {
- return file_util_info_.GetLastModifiedTime();
-}
-
-bool NativeFileEnumerator::IsDirectory() {
- return file_util_info_.IsDirectory();
-}
-
-NativeFileUtil::CopyOrMoveMode NativeFileUtil::CopyOrMoveModeForDestination(
- const FileSystemURL& dest_url, bool copy) {
- if (copy) {
- return dest_url.mount_option().copy_sync_option() == COPY_SYNC_OPTION_SYNC ?
- COPY_SYNC : COPY_NOSYNC;
- }
- return MOVE;
-}
-
-base::File NativeFileUtil::CreateOrOpen(const base::FilePath& path,
- int file_flags) {
- if (!base::DirectoryExists(path.DirName())) {
- // If its parent does not exist, should return NOT_FOUND error.
- return base::File(base::File::FILE_ERROR_NOT_FOUND);
- }
-
- // TODO(rvargas): Check |file_flags| instead. See bug 356358.
- if (base::DirectoryExists(path))
- return base::File(base::File::FILE_ERROR_NOT_A_FILE);
-
- return base::File(path, file_flags);
-}
-
-base::File::Error NativeFileUtil::EnsureFileExists(
- const base::FilePath& path,
- bool* created) {
- if (!base::DirectoryExists(path.DirName()))
- // If its parent does not exist, should return NOT_FOUND error.
- return base::File::FILE_ERROR_NOT_FOUND;
-
- // Tries to create the |path| exclusively. This should fail
- // with base::File::FILE_ERROR_EXISTS if the path already exists.
- base::File file(path, base::File::FLAG_CREATE | base::File::FLAG_READ);
-
- if (file.IsValid()) {
- if (created)
- *created = file.created();
- return base::File::FILE_OK;
- }
-
- base::File::Error error_code = file.error_details();
- if (error_code == base::File::FILE_ERROR_EXISTS) {
- // Make sure created_ is false.
- if (created)
- *created = false;
- error_code = base::File::FILE_OK;
- }
- return error_code;
-}
-
-base::File::Error NativeFileUtil::CreateDirectory(
- const base::FilePath& path,
- bool exclusive,
- bool recursive) {
- // If parent dir of file doesn't exist.
- if (!recursive && !base::PathExists(path.DirName()))
- return base::File::FILE_ERROR_NOT_FOUND;
-
- bool path_exists = base::PathExists(path);
- if (exclusive && path_exists)
- return base::File::FILE_ERROR_EXISTS;
-
- // If file exists at the path.
- if (path_exists && !base::DirectoryExists(path))
- return base::File::FILE_ERROR_EXISTS;
-
- if (!base::CreateDirectory(path))
- return base::File::FILE_ERROR_FAILED;
-
- if (!SetPlatformSpecificDirectoryPermissions(path)) {
- // Since some file systems don't support permission setting, we do not treat
- // an error from the function as the failure of copying. Just log it.
- LOG(WARNING) << "Setting directory permission failed: "
- << path.AsUTF8Unsafe();
- }
-
- return base::File::FILE_OK;
-}
-
-base::File::Error NativeFileUtil::GetFileInfo(
- const base::FilePath& path,
- base::File::Info* file_info) {
- if (!base::PathExists(path))
- return base::File::FILE_ERROR_NOT_FOUND;
-
- if (!base::GetFileInfo(path, file_info))
- return base::File::FILE_ERROR_FAILED;
- return base::File::FILE_OK;
-}
-
-scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator>
- NativeFileUtil::CreateFileEnumerator(const base::FilePath& root_path,
- bool recursive) {
- return make_scoped_ptr(new NativeFileEnumerator(
- root_path, recursive,
- base::FileEnumerator::FILES | base::FileEnumerator::DIRECTORIES))
- .PassAs<FileSystemFileUtil::AbstractFileEnumerator>();
-}
-
-base::File::Error NativeFileUtil::Touch(
- const base::FilePath& path,
- const base::Time& last_access_time,
- const base::Time& last_modified_time) {
- if (!base::TouchFile(path, last_access_time, last_modified_time))
- return base::File::FILE_ERROR_FAILED;
- return base::File::FILE_OK;
-}
-
-base::File::Error NativeFileUtil::Truncate(const base::FilePath& path,
- int64 length) {
- base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_WRITE);
- if (!file.IsValid())
- return file.error_details();
-
- if (!file.SetLength(length))
- return base::File::FILE_ERROR_FAILED;
-
- return base::File::FILE_OK;
-}
-
-bool NativeFileUtil::PathExists(const base::FilePath& path) {
- return base::PathExists(path);
-}
-
-bool NativeFileUtil::DirectoryExists(const base::FilePath& path) {
- return base::DirectoryExists(path);
-}
-
-base::File::Error NativeFileUtil::CopyOrMoveFile(
- const base::FilePath& src_path,
- const base::FilePath& dest_path,
- FileSystemOperation::CopyOrMoveOption option,
- CopyOrMoveMode mode) {
- base::File::Info info;
- base::File::Error error = NativeFileUtil::GetFileInfo(src_path, &info);
- if (error != base::File::FILE_OK)
- return error;
- if (info.is_directory)
- return base::File::FILE_ERROR_NOT_A_FILE;
- base::Time last_modified = info.last_modified;
-
- error = NativeFileUtil::GetFileInfo(dest_path, &info);
- if (error != base::File::FILE_OK &&
- error != base::File::FILE_ERROR_NOT_FOUND)
- return error;
- if (info.is_directory)
- return base::File::FILE_ERROR_INVALID_OPERATION;
- if (error == base::File::FILE_ERROR_NOT_FOUND) {
- error = NativeFileUtil::GetFileInfo(dest_path.DirName(), &info);
- if (error != base::File::FILE_OK)
- return error;
- if (!info.is_directory)
- return base::File::FILE_ERROR_NOT_FOUND;
- }
-
- switch (mode) {
- case COPY_NOSYNC:
- if (!base::CopyFile(src_path, dest_path))
- return base::File::FILE_ERROR_FAILED;
- break;
- case COPY_SYNC:
- if (!CopyFileAndSync(src_path, dest_path))
- return base::File::FILE_ERROR_FAILED;
- break;
- case MOVE:
- if (!base::Move(src_path, dest_path))
- return base::File::FILE_ERROR_FAILED;
- break;
- }
-
- // Preserve the last modified time. Do not return error here even if
- // the setting is failed, because the copy itself is successfully done.
- if (option == FileSystemOperation::OPTION_PRESERVE_LAST_MODIFIED)
- base::TouchFile(dest_path, last_modified, last_modified);
-
- return base::File::FILE_OK;
-}
-
-base::File::Error NativeFileUtil::DeleteFile(const base::FilePath& path) {
- if (!base::PathExists(path))
- return base::File::FILE_ERROR_NOT_FOUND;
- if (base::DirectoryExists(path))
- return base::File::FILE_ERROR_NOT_A_FILE;
- if (!base::DeleteFile(path, false))
- return base::File::FILE_ERROR_FAILED;
- return base::File::FILE_OK;
-}
-
-base::File::Error NativeFileUtil::DeleteDirectory(const base::FilePath& path) {
- if (!base::PathExists(path))
- return base::File::FILE_ERROR_NOT_FOUND;
- if (!base::DirectoryExists(path))
- return base::File::FILE_ERROR_NOT_A_DIRECTORY;
- if (!base::IsDirectoryEmpty(path))
- return base::File::FILE_ERROR_NOT_EMPTY;
- if (!base::DeleteFile(path, false))
- return base::File::FILE_ERROR_FAILED;
- return base::File::FILE_OK;
-}
-
-} // namespace storage

Powered by Google App Engine
This is Rietveld 408576698