| Index: webkit/fileapi/obfuscated_file_util_unittest.cc
|
| diff --git a/webkit/fileapi/obfuscated_file_util_unittest.cc b/webkit/fileapi/obfuscated_file_util_unittest.cc
|
| index 75ba9568e8cf9d60c1d78cb705ef5c8005497f34..af46597e33c1db8839d4a9f260728d53cdfd4d88 100644
|
| --- a/webkit/fileapi/obfuscated_file_util_unittest.cc
|
| +++ b/webkit/fileapi/obfuscated_file_util_unittest.cc
|
| @@ -476,6 +476,66 @@ class ObfuscatedFileUtilTest : public testing::Test {
|
| ofu()->DeleteFile(context.get(), dest_path));
|
| }
|
|
|
| + void ClearTimestamp(const FilePath& path) {
|
| + scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->Touch(context.get(), path, base::Time(), base::Time()));
|
| + EXPECT_EQ(base::Time(), GetModifiedTime(path));
|
| + }
|
| +
|
| + base::Time GetModifiedTime(const FilePath& path) {
|
| + scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
|
| + FilePath data_path;
|
| + base::PlatformFileInfo file_info;
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->GetFileInfo(context.get(), path, &file_info, &data_path));
|
| + return file_info.last_modified;
|
| + }
|
| +
|
| + void TestDirectoryTimestampHelper(const FilePath& base_dir,
|
| + bool copy,
|
| + bool overwrite) {
|
| + scoped_ptr<FileSystemOperationContext> context;
|
| + const FilePath src_dir_path(base_dir.AppendASCII("foo_dir"));
|
| + const FilePath dest_dir_path(base_dir.AppendASCII("bar_dir"));
|
| +
|
| + const FilePath src_file_path(src_dir_path.AppendASCII("hoge"));
|
| + const FilePath dest_file_path(dest_dir_path.AppendASCII("fuga"));
|
| +
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->CreateDirectory(context.get(), src_dir_path, true, true));
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->CreateDirectory(context.get(), dest_dir_path, true, true));
|
| +
|
| + bool created = false;
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->EnsureFileExists(context.get(), src_file_path, &created));
|
| + if (overwrite) {
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->EnsureFileExists(context.get(),
|
| + dest_file_path, &created));
|
| + }
|
| +
|
| + ClearTimestamp(src_dir_path);
|
| + ClearTimestamp(dest_dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->CopyOrMoveFile(context.get(),
|
| + src_file_path, dest_file_path,
|
| + copy));
|
| +
|
| + if (copy)
|
| + EXPECT_EQ(base::Time(), GetModifiedTime(src_dir_path));
|
| + else
|
| + EXPECT_NE(base::Time(), GetModifiedTime(src_dir_path));
|
| + EXPECT_NE(base::Time(), GetModifiedTime(dest_dir_path));
|
| + }
|
| +
|
| private:
|
| ScopedTempDir data_dir_;
|
| scoped_refptr<ObfuscatedFileUtil> obfuscated_file_util_;
|
| @@ -1440,3 +1500,206 @@ TEST_F(ObfuscatedFileUtilTest, TestIncompleteDirectoryReading) {
|
| ofu()->ReadDirectory(context.get(), FilePath(), &entries));
|
| EXPECT_EQ(ARRAYSIZE_UNSAFE(kPath) - 1, entries.size());
|
| }
|
| +
|
| +TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForCreation) {
|
| + scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
|
| + const FilePath dir_path(FILE_PATH_LITERAL("foo_dir"));
|
| +
|
| + // Create working directory.
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->CreateDirectory(context.get(), dir_path, false, false));
|
| +
|
| + // EnsureFileExists, create case.
|
| + FilePath path(dir_path.AppendASCII("EnsureFileExists_file"));
|
| + bool created = false;
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->EnsureFileExists(context.get(), path, &created));
|
| + EXPECT_TRUE(created);
|
| + EXPECT_NE(base::Time(), GetModifiedTime(dir_path));
|
| +
|
| + // non create case.
|
| + created = true;
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->EnsureFileExists(context.get(), path, &created));
|
| + EXPECT_FALSE(created);
|
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path));
|
| +
|
| + // fail case.
|
| + path = dir_path.AppendASCII("EnsureFileExists_dir");
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->CreateDirectory(context.get(), path, false, false));
|
| +
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_A_FILE,
|
| + ofu()->EnsureFileExists(context.get(), path, &created));
|
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path));
|
| +
|
| + // CreateOrOpen, create case.
|
| + path = dir_path.AppendASCII("CreateOrOpen_file");
|
| + PlatformFile file_handle = base::kInvalidPlatformFileValue;
|
| + created = false;
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->CreateOrOpen(
|
| + context.get(), path,
|
| + base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE,
|
| + &file_handle, &created));
|
| + EXPECT_NE(base::kInvalidPlatformFileValue, file_handle);
|
| + EXPECT_TRUE(created);
|
| + EXPECT_TRUE(base::ClosePlatformFile(file_handle));
|
| + EXPECT_NE(base::Time(), GetModifiedTime(dir_path));
|
| +
|
| + // open case.
|
| + file_handle = base::kInvalidPlatformFileValue;
|
| + created = true;
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->CreateOrOpen(
|
| + context.get(), path,
|
| + base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE,
|
| + &file_handle, &created));
|
| + EXPECT_NE(base::kInvalidPlatformFileValue, file_handle);
|
| + EXPECT_FALSE(created);
|
| + EXPECT_TRUE(base::ClosePlatformFile(file_handle));
|
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path));
|
| +
|
| + // fail case
|
| + file_handle = base::kInvalidPlatformFileValue;
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS,
|
| + ofu()->CreateOrOpen(
|
| + context.get(), path,
|
| + base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE,
|
| + &file_handle, &created));
|
| + EXPECT_EQ(base::kInvalidPlatformFileValue, file_handle);
|
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path));
|
| +
|
| + // CreateDirectory, create case.
|
| + // Creating CreateDirectory_dir and CreateDirectory_dir/subdir.
|
| + path = dir_path.AppendASCII("CreateDirectory_dir");
|
| + FilePath subdir_path(path.AppendASCII("subdir"));
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->CreateDirectory(context.get(), subdir_path,
|
| + true /* exclusive */, true /* recursive */));
|
| + EXPECT_NE(base::Time(), GetModifiedTime(dir_path));
|
| +
|
| + // create subdir case.
|
| + // Creating CreateDirectory_dir/subdir2.
|
| + subdir_path = path.AppendASCII("subdir2");
|
| + ClearTimestamp(dir_path);
|
| + ClearTimestamp(path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->CreateDirectory(context.get(), subdir_path,
|
| + true /* exclusive */, true /* recursive */));
|
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path));
|
| + EXPECT_NE(base::Time(), GetModifiedTime(path));
|
| +
|
| + // fail case.
|
| + path = dir_path.AppendASCII("CreateDirectory_dir");
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS,
|
| + ofu()->CreateDirectory(context.get(), path,
|
| + true /* exclusive */, true /* recursive */));
|
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path));
|
| +
|
| + // CopyInForeignFile, create case.
|
| + path = dir_path.AppendASCII("CopyInForeignFile_file");
|
| + FilePath src_path = dir_path.AppendASCII("CopyInForeignFile_src_file");
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->EnsureFileExists(context.get(), src_path, &created));
|
| + EXPECT_TRUE(created);
|
| + FilePath src_local_path;
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->GetLocalFilePath(context.get(), src_path, &src_local_path));
|
| +
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->CopyInForeignFile(context.get(), src_local_path, path));
|
| + EXPECT_NE(base::Time(), GetModifiedTime(dir_path));
|
| +}
|
| +
|
| +TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForDeletion) {
|
| + scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
|
| + const FilePath dir_path(FILE_PATH_LITERAL("foo_dir"));
|
| +
|
| + // Create working directory.
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->CreateDirectory(context.get(), dir_path, false, false));
|
| +
|
| + // DeleteFile, delete case.
|
| + FilePath path = dir_path.AppendASCII("DeleteFile_file");
|
| + bool created = false;
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->EnsureFileExists(context.get(), path, &created));
|
| + EXPECT_TRUE(created);
|
| +
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->DeleteFile(context.get(), path));
|
| + EXPECT_NE(base::Time(), GetModifiedTime(dir_path));
|
| +
|
| + // fail case.
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
|
| + ofu()->DeleteFile(context.get(), path));
|
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path));
|
| +
|
| + // DeleteSingleDirectory, fail case.
|
| + path = dir_path.AppendASCII("DeleteSingleDirectory_dir");
|
| + FilePath file_path(path.AppendASCII("pakeratta"));
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->CreateDirectory(context.get(), path, true, true));
|
| + created = false;
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->EnsureFileExists(context.get(), file_path, &created));
|
| + EXPECT_TRUE(created);
|
| +
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_EMPTY,
|
| + ofu()->DeleteSingleDirectory(context.get(), path));
|
| + EXPECT_EQ(base::Time(), GetModifiedTime(dir_path));
|
| +
|
| + // delete case.
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->DeleteFile(context.get(), file_path));
|
| +
|
| + ClearTimestamp(dir_path);
|
| + context.reset(NewContext(NULL));
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK,
|
| + ofu()->DeleteSingleDirectory(context.get(), path));
|
| + EXPECT_NE(base::Time(), GetModifiedTime(dir_path));
|
| +}
|
| +
|
| +TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForCopyAndMove) {
|
| + TestDirectoryTimestampHelper(
|
| + FilePath(FILE_PATH_LITERAL("copy overwrite")), true, true);
|
| + TestDirectoryTimestampHelper(
|
| + FilePath(FILE_PATH_LITERAL("copy non-overwrite")), true, false);
|
| + TestDirectoryTimestampHelper(
|
| + FilePath(FILE_PATH_LITERAL("move overwrite")), false, true);
|
| + TestDirectoryTimestampHelper(
|
| + FilePath(FILE_PATH_LITERAL("move non-overwrite")), false, false);
|
| +}
|
|
|