Added new ReadFileToString API with a max_size argument

The CL creates a new API that takes a max_size argument. When the file size exceed the max_size, the API primes the cache and returns false.

BUG=339417

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

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


CrOS-Libchrome-Original-Commit: 0710fdd560c67f86874fd797c081c7fd032bdef5
diff --git a/base/file_util_unittest.cc b/base/file_util_unittest.cc
index df447ab..d36d4b2 100644
--- a/base/file_util_unittest.cc
+++ b/base/file_util_unittest.cc
@@ -1941,6 +1941,51 @@
   EXPECT_EQ(L"hellohello", read_content);
 }
 
+TEST_F(FileUtilTest, ReadFileToString) {
+  const char kTestData[] = "0123";
+  std::string data;
+
+  FilePath file_path =
+      temp_dir_.path().Append(FILE_PATH_LITERAL("ReadFileToStringTest"));
+
+  ASSERT_EQ(4, file_util::WriteFile(file_path, kTestData, 4));
+
+  EXPECT_TRUE(ReadFileToString(file_path, &data));
+  EXPECT_EQ(kTestData, data);
+
+  data = "temp";
+  EXPECT_FALSE(ReadFileToString(file_path, &data, 0));
+  EXPECT_EQ(data.length(), 0u);
+
+  data = "temp";
+  EXPECT_FALSE(ReadFileToString(file_path, &data, 2));
+  EXPECT_EQ("01", data);
+
+  data.clear();
+  EXPECT_FALSE(ReadFileToString(file_path, &data, 3));
+  EXPECT_EQ("012", data);
+
+  data.clear();
+  EXPECT_TRUE(ReadFileToString(file_path, &data, 4));
+  EXPECT_EQ("0123", data);
+
+  data.clear();
+  EXPECT_TRUE(ReadFileToString(file_path, &data, 6));
+  EXPECT_EQ("0123", data);
+
+  EXPECT_TRUE(ReadFileToString(file_path, NULL, 6));
+
+  EXPECT_TRUE(ReadFileToString(file_path, NULL));
+
+  EXPECT_TRUE(base::DeleteFile(file_path, false));
+
+  EXPECT_FALSE(ReadFileToString(file_path, &data));
+  EXPECT_EQ(data.length(), 0u);
+
+  EXPECT_FALSE(ReadFileToString(file_path, &data, 6));
+  EXPECT_EQ(data.length(), 0u);
+}
+
 TEST_F(FileUtilTest, TouchFile) {
   FilePath data_dir =
       temp_dir_.path().Append(FILE_PATH_LITERAL("FilePathTest"));