Convert base::file_util to use File instead of PlatformFile.

BUG=322664

R=brettw@chromium.org
TBR=darin@chromium.org

Review URL: https://codereview.chromium.org/101143006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@243235 0039d316-1c4b-4281-b951-d872f2087c98


CrOS-Libchrome-Original-Commit: 54124ed0423cd16e594535fdd9e779f82235fa1a
diff --git a/base/file_util.cc b/base/file_util.cc
index 1575a07..e44f713 100644
--- a/base/file_util.cc
+++ b/base/file_util.cc
@@ -166,7 +166,7 @@
 }
 
 bool GetFileSize(const FilePath& file_path, int64* file_size) {
-  PlatformFileInfo info;
+  File::Info info;
   if (!GetFileInfo(file_path, &info))
     return false;
   *file_size = info.size;
@@ -176,22 +176,19 @@
 bool TouchFile(const FilePath& path,
                const Time& last_accessed,
                const Time& last_modified) {
-  int flags = PLATFORM_FILE_OPEN | PLATFORM_FILE_WRITE_ATTRIBUTES;
+  int flags = File::FLAG_OPEN | File::FLAG_WRITE_ATTRIBUTES;
 
 #if defined(OS_WIN)
   // On Windows, FILE_FLAG_BACKUP_SEMANTICS is needed to open a directory.
   if (DirectoryExists(path))
-    flags |= PLATFORM_FILE_BACKUP_SEMANTICS;
+    flags |= File::FLAG_BACKUP_SEMANTICS;
 #endif  // OS_WIN
 
-  const PlatformFile file = CreatePlatformFile(path, flags, NULL, NULL);
-  if (file != kInvalidPlatformFileValue) {
-    bool result = TouchPlatformFile(file, last_accessed, last_modified);
-    ClosePlatformFile(file);
-    return result;
-  }
+  File file(path, flags);
+  if (!file.IsValid())
+    return false;
 
-  return false;
+  return file.SetTimes(last_accessed, last_modified);
 }
 
 bool CloseFile(FILE* file) {
diff --git a/base/file_util.h b/base/file_util.h
index 3f892e3..f841831 100644
--- a/base/file_util.h
+++ b/base/file_util.h
@@ -25,9 +25,9 @@
 
 #include "base/base_export.h"
 #include "base/basictypes.h"
+#include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/platform_file.h"
 #include "base/strings/string16.h"
 
 #if defined(OS_POSIX)
@@ -93,7 +93,7 @@
 // Returns false on failure and sets *error appropriately, if it is non-NULL.
 BASE_EXPORT bool ReplaceFile(const FilePath& from_path,
                              const FilePath& to_path,
-                             PlatformFileError* error);
+                             File::Error* error);
 
 // Copies a single file. Use CopyDirectory to copy directories.
 // This function fails if either path contains traversal components ('..').
@@ -256,7 +256,7 @@
 // Returns true on success, leaving *error unchanged.
 // Returns false on failure and sets *error appropriately, if it is non-NULL.
 BASE_EXPORT bool CreateDirectoryAndGetError(const FilePath& full_path,
-                                            PlatformFileError* error);
+                                            File::Error* error);
 
 // Backward-compatible convenience method for the above.
 BASE_EXPORT bool CreateDirectory(const FilePath& full_path);
@@ -292,7 +292,7 @@
 BASE_EXPORT bool IsLink(const FilePath& file_path);
 
 // Returns information about the given file path.
-BASE_EXPORT bool GetFileInfo(const FilePath& file_path, PlatformFileInfo* info);
+BASE_EXPORT bool GetFileInfo(const FilePath& file_path, File::Info* info);
 
 // Sets the time of the last access and the time of the last modification.
 BASE_EXPORT bool TouchFile(const FilePath& path,
@@ -311,7 +311,7 @@
 
 // Reads the given number of bytes from the file into the buffer.  Returns
 // the number of read bytes, or -1 on error.
-BASE_EXPORT int ReadFile(const base::FilePath& filename, char* data, int size);
+BASE_EXPORT int ReadFile(const FilePath& filename, char* data, int size);
 
 }  // namespace base
 
diff --git a/base/file_util_posix.cc b/base/file_util_posix.cc
index ddcd5dd..3f0ee0a 100644
--- a/base/file_util_posix.cc
+++ b/base/file_util_posix.cc
@@ -244,12 +244,12 @@
 
 bool ReplaceFile(const FilePath& from_path,
                  const FilePath& to_path,
-                 PlatformFileError* error) {
+                 File::Error* error) {
   ThreadRestrictions::AssertIOAllowed();
   if (rename(from_path.value().c_str(), to_path.value().c_str()) == 0)
     return true;
   if (error)
-    *error = ErrnoToPlatformFileError(errno);
+    *error = File::OSErrorToFileError(errno);
   return false;
 }
 
@@ -589,7 +589,7 @@
 }
 
 bool CreateDirectoryAndGetError(const FilePath& full_path,
-                                PlatformFileError* error) {
+                                File::Error* error) {
   ThreadRestrictions::AssertIOAllowed();  // For call to mkdir().
   std::vector<FilePath> subpaths;
 
@@ -616,7 +616,7 @@
     int saved_errno = errno;
     if (!DirectoryExists(*i)) {
       if (error)
-        *error = ErrnoToPlatformFileError(saved_errno);
+        *error = File::OSErrorToFileError(saved_errno);
       return false;
     }
   }
@@ -654,7 +654,7 @@
     return false;
 }
 
-bool GetFileInfo(const FilePath& file_path, PlatformFileInfo* results) {
+bool GetFileInfo(const FilePath& file_path, File::Info* results) {
   stat_wrapper_t file_info;
 #if defined(OS_ANDROID)
   if (file_path.IsContentUri()) {
diff --git a/base/file_util_unittest.cc b/base/file_util_unittest.cc
index b65e171..96e144d 100644
--- a/base/file_util_unittest.cc
+++ b/base/file_util_unittest.cc
@@ -485,25 +485,6 @@
       &win32_path));
 }
 
-TEST_F(FileUtilTest, GetPlatformFileInfoForDirectory) {
-  FilePath empty_dir = temp_dir_.path().Append(FPL("gpfi_test"));
-  ASSERT_TRUE(CreateDirectory(empty_dir));
-  win::ScopedHandle dir(
-      ::CreateFile(empty_dir.value().c_str(),
-                   FILE_ALL_ACCESS,
-                   FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
-                   NULL,
-                   OPEN_EXISTING,
-                   FILE_FLAG_BACKUP_SEMANTICS,  // Needed to open a directory.
-                   NULL));
-  ASSERT_TRUE(dir.IsValid());
-  PlatformFileInfo info;
-  EXPECT_TRUE(GetPlatformFileInfo(dir.Get(), &info));
-  EXPECT_TRUE(info.is_directory);
-  EXPECT_FALSE(info.is_symbolic_link);
-  EXPECT_EQ(0, info.size);
-}
-
 TEST_F(FileUtilTest, CreateTemporaryFileInDirLongPathTest) {
   // Test that CreateTemporaryFileInDir() creates a path and returns a long path
   // if it is available. This test requires that:
@@ -1912,7 +1893,7 @@
               &modification_time));
 
   ASSERT_TRUE(TouchFile(foobar, access_time, modification_time));
-  PlatformFileInfo file_info;
+  File::Info file_info;
   ASSERT_TRUE(GetFileInfo(foobar, &file_info));
   EXPECT_EQ(file_info.last_accessed.ToInternalValue(),
             access_time.ToInternalValue());
diff --git a/base/files/file_unittest.cc b/base/files/file_unittest.cc
index 16eece1..224776f 100644
--- a/base/files/file_unittest.cc
+++ b/base/files/file_unittest.cc
@@ -374,3 +374,28 @@
   EXPECT_EQ(std::string(buffer, buffer + kDataSize),
             std::string(kData));
 }
+
+#if defined(OS_WIN)
+TEST(File, GetInfoForDirectory) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+  FilePath empty_dir = temp_dir.path().Append(FILE_PATH_LITERAL("gpfi_test"));
+  ASSERT_TRUE(CreateDirectory(empty_dir));
+
+  base::File dir(
+      ::CreateFile(empty_dir.value().c_str(),
+                   FILE_ALL_ACCESS,
+                   FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+                   NULL,
+                   OPEN_EXISTING,
+                   FILE_FLAG_BACKUP_SEMANTICS,  // Needed to open a directory.
+                   NULL));
+  ASSERT_TRUE(dir.IsValid());
+
+  base::File::Info info;
+  EXPECT_TRUE(dir.GetInfo(&info));
+  EXPECT_TRUE(info.is_directory);
+  EXPECT_FALSE(info.is_symbolic_link);
+  EXPECT_EQ(0, info.size);
+}
+#endif  // defined(OS_WIN)
diff --git a/base/files/file_util_proxy.cc b/base/files/file_util_proxy.cc
index 40cac11..8307234 100644
--- a/base/files/file_util_proxy.cc
+++ b/base/files/file_util_proxy.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/file_util.h"
+#include "base/files/file.h"
 #include "base/location.h"
 #include "base/message_loop/message_loop_proxy.h"
 #include "base/task_runner.h"
@@ -111,7 +112,8 @@
       error_ = PLATFORM_FILE_ERROR_NOT_FOUND;
       return;
     }
-    if (!GetFileInfo(file_path, &file_info_))
+    // TODO(rvargas): switch this file to base::File.
+    if (!GetFileInfo(file_path, reinterpret_cast<File::Info*>(&file_info_)))
       error_ = PLATFORM_FILE_ERROR_FAILED;
   }
 
diff --git a/base/files/file_util_proxy_unittest.cc b/base/files/file_util_proxy_unittest.cc
index 17c7a3f..762d92b 100644
--- a/base/files/file_util_proxy_unittest.cc
+++ b/base/files/file_util_proxy_unittest.cc
@@ -225,7 +225,7 @@
 TEST_F(FileUtilProxyTest, GetFileInfo_File) {
   // Setup.
   ASSERT_EQ(4, file_util::WriteFile(test_path(), "test", 4));
-  PlatformFileInfo expected_info;
+  File::Info expected_info;
   GetFileInfo(test_path(), &expected_info);
 
   // Run.
@@ -248,7 +248,7 @@
 TEST_F(FileUtilProxyTest, GetFileInfo_Directory) {
   // Setup.
   ASSERT_TRUE(base::CreateDirectory(test_path()));
-  PlatformFileInfo expected_info;
+  File::Info expected_info;
   GetFileInfo(test_path(), &expected_info);
 
   // Run.
@@ -341,7 +341,7 @@
   MessageLoop::current()->Run();
   EXPECT_EQ(PLATFORM_FILE_OK, error_);
 
-  PlatformFileInfo info;
+  File::Info info;
   GetFileInfo(test_path(), &info);
 
   // The returned values may only have the seconds precision, so we cast
@@ -356,7 +356,7 @@
   // Setup.
   const char kTestData[] = "0123456789";
   ASSERT_EQ(10, file_util::WriteFile(test_path(), kTestData, 10));
-  PlatformFileInfo info;
+  File::Info info;
   GetFileInfo(test_path(), &info);
   ASSERT_EQ(10, info.size);
 
@@ -383,7 +383,7 @@
   // Setup.
   const char kTestData[] = "9876543210";
   ASSERT_EQ(10, file_util::WriteFile(test_path(), kTestData, 10));
-  PlatformFileInfo info;
+  File::Info info;
   GetFileInfo(test_path(), &info);
   ASSERT_EQ(10, info.size);
 
diff --git a/base/files/important_file_writer.cc b/base/files/important_file_writer.cc
index 261c987..9cbbd73 100644
--- a/base/files/important_file_writer.cc
+++ b/base/files/important_file_writer.cc
@@ -17,6 +17,7 @@
 #include "base/bind.h"
 #include "base/critical_closure.h"
 #include "base/file_util.h"
+#include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/metrics/histogram.h"
@@ -63,25 +64,18 @@
     return false;
   }
 
-  int flags = PLATFORM_FILE_OPEN | PLATFORM_FILE_WRITE;
-  PlatformFile tmp_file =
-      CreatePlatformFile(tmp_file_path, flags, NULL, NULL);
-  if (tmp_file == kInvalidPlatformFileValue) {
+  File tmp_file(tmp_file_path, File::FLAG_OPEN | File::FLAG_WRITE);
+  if (!tmp_file.IsValid()) {
     LogFailure(path, FAILED_OPENING, "could not open temporary file");
     return false;
   }
 
   // If this happens in the wild something really bad is going on.
   CHECK_LE(data.length(), static_cast<size_t>(kint32max));
-  int bytes_written = WritePlatformFile(
-      tmp_file, 0, data.data(), static_cast<int>(data.length()));
-  FlushPlatformFile(tmp_file);  // Ignore return value.
-
-  if (!ClosePlatformFile(tmp_file)) {
-    LogFailure(path, FAILED_CLOSING, "failed to close temporary file");
-    base::DeleteFile(tmp_file_path, false);
-    return false;
-  }
+  int bytes_written = tmp_file.Write(0, data.data(),
+                                     static_cast<int>(data.length()));
+  tmp_file.Flush();  // Ignore return value.
+  tmp_file.Close();
 
   if (bytes_written < static_cast<int>(data.length())) {
     LogFailure(path, FAILED_WRITING, "error writing, bytes_written=" +
diff --git a/base/nix/mime_util_xdg.cc b/base/nix/mime_util_xdg.cc
index dd2c7eb..215a4d3 100644
--- a/base/nix/mime_util_xdg.cc
+++ b/base/nix/mime_util_xdg.cc
@@ -387,7 +387,7 @@
 bool CheckDirExistsAndGetMtime(const FilePath& dir, Time* last_modified) {
   if (!DirectoryExists(dir))
     return false;
-  PlatformFileInfo file_info;
+  File::Info file_info;
   if (!GetFileInfo(dir, &file_info))
     return false;
   *last_modified = file_info.last_modified;
diff --git a/base/sys_info_chromeos.cc b/base/sys_info_chromeos.cc
index 7cf6975..4f32f9b 100644
--- a/base/sys_info_chromeos.cc
+++ b/base/sys_info_chromeos.cc
@@ -7,6 +7,7 @@
 #include "base/basictypes.h"
 #include "base/environment.h"
 #include "base/file_util.h"
+#include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/lazy_instance.h"
 #include "base/strings/string_number_conversions.h"
@@ -71,7 +72,7 @@
       ThreadRestrictions::ScopedAllowIO allow_io;
       FilePath path(kLinuxStandardBaseReleaseFile);
       ReadFileToString(path, &lsb_release);
-      PlatformFileInfo fileinfo;
+      File::Info fileinfo;
       if (GetFileInfo(path, &fileinfo))
         lsb_release_time_ = fileinfo.creation_time;
     }