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/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=" +