Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <set> | 5 #include <set> |
| 6 #include <string> | 6 #include <string> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| 11 #include "base/files/file.h" | 11 #include "base/files/file.h" |
| 12 #include "base/files/file_path.h" | 12 #include "base/files/file_path.h" |
| 13 #include "base/files/scoped_temp_dir.h" | 13 #include "base/files/scoped_temp_dir.h" |
| 14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 15 #include "base/platform_file.h" | |
| 16 #include "base/run_loop.h" | 15 #include "base/run_loop.h" |
| 17 #include "content/browser/fileapi/mock_file_change_observer.h" | 16 #include "content/browser/fileapi/mock_file_change_observer.h" |
| 18 #include "content/public/test/async_file_test_helper.h" | 17 #include "content/public/test/async_file_test_helper.h" |
| 19 #include "content/public/test/mock_special_storage_policy.h" | 18 #include "content/public/test/mock_special_storage_policy.h" |
| 20 #include "content/public/test/sandbox_file_system_test_helper.h" | 19 #include "content/public/test/sandbox_file_system_test_helper.h" |
| 21 #include "content/public/test/test_file_system_context.h" | 20 #include "content/public/test/test_file_system_context.h" |
| 22 #include "content/test/fileapi_test_file_set.h" | 21 #include "content/test/fileapi_test_file_set.h" |
| 23 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 24 #include "webkit/browser/fileapi/external_mount_points.h" | 23 #include "webkit/browser/fileapi/external_mount_points.h" |
| 25 #include "webkit/browser/fileapi/file_system_backend.h" | 24 #include "webkit/browser/fileapi/file_system_backend.h" |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 315 } | 314 } |
| 316 | 315 |
| 317 int64 PathCost(const FileSystemURL& url) { | 316 int64 PathCost(const FileSystemURL& url) { |
| 318 return ObfuscatedFileUtil::ComputeFilePathCost(url.path()); | 317 return ObfuscatedFileUtil::ComputeFilePathCost(url.path()); |
| 319 } | 318 } |
| 320 | 319 |
| 321 FileSystemURL CreateURL(const base::FilePath& path) { | 320 FileSystemURL CreateURL(const base::FilePath& path) { |
| 322 return sandbox_file_system_.CreateURL(path); | 321 return sandbox_file_system_.CreateURL(path); |
| 323 } | 322 } |
| 324 | 323 |
| 325 void CheckFileAndCloseHandle( | 324 void CheckFileAndCloseHandle(const FileSystemURL& url, base::File file) { |
| 326 const FileSystemURL& url, base::PlatformFile file_handle) { | |
| 327 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); | 325 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); |
| 328 base::FilePath local_path; | 326 base::FilePath local_path; |
| 329 EXPECT_EQ(base::File::FILE_OK, | 327 EXPECT_EQ(base::File::FILE_OK, |
| 330 ofu()->GetLocalFilePath(context.get(), url, &local_path)); | 328 ofu()->GetLocalFilePath(context.get(), url, &local_path)); |
| 331 | 329 |
| 332 base::File::Info file_info0; | 330 base::File::Info file_info0; |
| 333 base::FilePath data_path; | 331 base::FilePath data_path; |
| 334 EXPECT_EQ(base::File::FILE_OK, | 332 EXPECT_EQ(base::File::FILE_OK, |
| 335 ofu()->GetFileInfo(context.get(), url, &file_info0, &data_path)); | 333 ofu()->GetFileInfo(context.get(), url, &file_info0, &data_path)); |
| 336 EXPECT_EQ(data_path, local_path); | 334 EXPECT_EQ(data_path, local_path); |
| 337 EXPECT_TRUE(FileExists(data_path)); | 335 EXPECT_TRUE(FileExists(data_path)); |
| 338 EXPECT_EQ(0, GetSize(data_path)); | 336 EXPECT_EQ(0, GetSize(data_path)); |
| 339 | 337 |
| 340 const char data[] = "test data"; | 338 const char data[] = "test data"; |
| 341 const int length = arraysize(data) - 1; | 339 const int length = arraysize(data) - 1; |
| 342 | 340 |
| 343 if (base::kInvalidPlatformFileValue == file_handle) { | 341 if (!file.IsValid()) { |
| 344 base::File file(data_path, | 342 file.Initialize(data_path, |
| 345 base::File::FLAG_OPEN | base::File::FLAG_WRITE); | 343 base::File::FLAG_OPEN | base::File::FLAG_WRITE); |
| 346 ASSERT_TRUE(file.IsValid()); | 344 ASSERT_TRUE(file.IsValid()); |
| 347 EXPECT_FALSE(file.created()); | 345 EXPECT_FALSE(file.created()); |
| 348 file_handle = file.TakePlatformFile(); | |
| 349 } | 346 } |
| 350 ASSERT_EQ(length, base::WritePlatformFile(file_handle, 0, data, length)); | 347 ASSERT_EQ(length, file.Write(0, data, length)); |
| 351 EXPECT_TRUE(base::ClosePlatformFile(file_handle)); | |
|
kinuko
2014/05/12 05:39:57
I think this code probably expects a flush happens
rvargas (doing something else)
2014/05/12 23:39:59
Done (IMO, if this is racing it needs more than Cl
| |
| 352 | 348 |
| 353 base::File::Info file_info1; | 349 base::File::Info file_info1; |
| 354 EXPECT_EQ(length, GetSize(data_path)); | 350 EXPECT_EQ(length, GetSize(data_path)); |
| 355 context.reset(NewContext(NULL)); | 351 context.reset(NewContext(NULL)); |
| 356 EXPECT_EQ(base::File::FILE_OK, | 352 EXPECT_EQ(base::File::FILE_OK, |
| 357 ofu()->GetFileInfo(context.get(), url, &file_info1, &data_path)); | 353 ofu()->GetFileInfo(context.get(), url, &file_info1, &data_path)); |
| 358 EXPECT_EQ(data_path, local_path); | 354 EXPECT_EQ(data_path, local_path); |
| 359 | 355 |
| 360 EXPECT_FALSE(file_info0.is_directory); | 356 EXPECT_FALSE(file_info0.is_directory); |
| 361 EXPECT_FALSE(file_info1.is_directory); | 357 EXPECT_FALSE(file_info1.is_directory); |
| (...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 815 quota::QuotaStatusCode quota_status_; | 811 quota::QuotaStatusCode quota_status_; |
| 816 int64 usage_; | 812 int64 usage_; |
| 817 fileapi::MockFileChangeObserver change_observer_; | 813 fileapi::MockFileChangeObserver change_observer_; |
| 818 fileapi::ChangeObserverList change_observers_; | 814 fileapi::ChangeObserverList change_observers_; |
| 819 | 815 |
| 820 private: | 816 private: |
| 821 DISALLOW_COPY_AND_ASSIGN(ObfuscatedFileUtilTest); | 817 DISALLOW_COPY_AND_ASSIGN(ObfuscatedFileUtilTest); |
| 822 }; | 818 }; |
| 823 | 819 |
| 824 TEST_F(ObfuscatedFileUtilTest, TestCreateAndDeleteFile) { | 820 TEST_F(ObfuscatedFileUtilTest, TestCreateAndDeleteFile) { |
| 825 base::PlatformFile file_handle = base::kInvalidPlatformFileValue; | |
| 826 bool created; | |
| 827 FileSystemURL url = CreateURLFromUTF8("fake/file"); | 821 FileSystemURL url = CreateURLFromUTF8("fake/file"); |
| 828 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); | 822 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); |
| 829 int file_flags = base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE; | 823 int file_flags = base::File::FLAG_CREATE | base::File::FLAG_WRITE; |
| 830 | 824 |
| 831 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, | 825 base::File file = ofu()->CreateOrOpen(context.get(), url, file_flags); |
| 832 ofu()->CreateOrOpen(context.get(), url, file_flags, &file_handle, | 826 EXPECT_FALSE(file.IsValid()); |
| 833 &created)); | 827 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, file.error_details()); |
| 834 | 828 |
| 835 context.reset(NewContext(NULL)); | 829 context.reset(NewContext(NULL)); |
| 836 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, | 830 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, |
| 837 ofu()->DeleteFile(context.get(), url)); | 831 ofu()->DeleteFile(context.get(), url)); |
| 838 | 832 |
| 839 url = CreateURLFromUTF8("test file"); | 833 url = CreateURLFromUTF8("test file"); |
| 840 | 834 |
| 841 EXPECT_TRUE(change_observer()->HasNoChange()); | 835 EXPECT_TRUE(change_observer()->HasNoChange()); |
| 842 | 836 |
| 843 // Verify that file creation requires sufficient quota for the path. | 837 // Verify that file creation requires sufficient quota for the path. |
| 844 context.reset(NewContext(NULL)); | 838 context.reset(NewContext(NULL)); |
| 845 context->set_allowed_bytes_growth( | 839 context->set_allowed_bytes_growth( |
| 846 ObfuscatedFileUtil::ComputeFilePathCost(url.path()) - 1); | 840 ObfuscatedFileUtil::ComputeFilePathCost(url.path()) - 1); |
| 847 ASSERT_EQ(base::File::FILE_ERROR_NO_SPACE, | 841 file = ofu()->CreateOrOpen(context.get(), url, file_flags); |
| 848 ofu()->CreateOrOpen(context.get(), url, file_flags, | 842 EXPECT_FALSE(file.IsValid()); |
| 849 &file_handle, &created)); | 843 ASSERT_EQ(base::File::FILE_ERROR_NO_SPACE, file.error_details()); |
| 850 | 844 |
| 851 context.reset(NewContext(NULL)); | 845 context.reset(NewContext(NULL)); |
| 852 context->set_allowed_bytes_growth( | 846 context->set_allowed_bytes_growth( |
| 853 ObfuscatedFileUtil::ComputeFilePathCost(url.path())); | 847 ObfuscatedFileUtil::ComputeFilePathCost(url.path())); |
| 854 ASSERT_EQ(base::File::FILE_OK, | 848 file = ofu()->CreateOrOpen(context.get(), url, file_flags); |
| 855 ofu()->CreateOrOpen(context.get(), url, file_flags, &file_handle, | 849 EXPECT_TRUE(file.IsValid()); |
| 856 &created)); | 850 ASSERT_TRUE(file.created()); |
| 857 ASSERT_TRUE(created); | |
| 858 EXPECT_EQ(1, change_observer()->get_and_reset_create_file_count()); | 851 EXPECT_EQ(1, change_observer()->get_and_reset_create_file_count()); |
| 859 EXPECT_NE(base::kInvalidPlatformFileValue, file_handle); | |
| 860 | 852 |
| 861 CheckFileAndCloseHandle(url, file_handle); | 853 CheckFileAndCloseHandle(url, file.Pass()); |
| 862 | 854 |
| 863 context.reset(NewContext(NULL)); | 855 context.reset(NewContext(NULL)); |
| 864 base::FilePath local_path; | 856 base::FilePath local_path; |
| 865 EXPECT_EQ(base::File::FILE_OK, | 857 EXPECT_EQ(base::File::FILE_OK, |
| 866 ofu()->GetLocalFilePath(context.get(), url, &local_path)); | 858 ofu()->GetLocalFilePath(context.get(), url, &local_path)); |
| 867 EXPECT_TRUE(base::PathExists(local_path)); | 859 EXPECT_TRUE(base::PathExists(local_path)); |
| 868 | 860 |
| 869 // Verify that deleting a file isn't stopped by zero quota, and that it frees | 861 // Verify that deleting a file isn't stopped by zero quota, and that it frees |
| 870 // up quote from its path. | 862 // up quote from its path. |
| 871 context.reset(NewContext(NULL)); | 863 context.reset(NewContext(NULL)); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 882 FileSystemURL directory_url = CreateURLFromUTF8( | 874 FileSystemURL directory_url = CreateURLFromUTF8( |
| 883 "series/of/directories"); | 875 "series/of/directories"); |
| 884 url = FileSystemURLAppendUTF8(directory_url, "file name"); | 876 url = FileSystemURLAppendUTF8(directory_url, "file name"); |
| 885 EXPECT_EQ(base::File::FILE_OK, | 877 EXPECT_EQ(base::File::FILE_OK, |
| 886 ofu()->CreateDirectory(context.get(), directory_url, exclusive, | 878 ofu()->CreateDirectory(context.get(), directory_url, exclusive, |
| 887 recursive)); | 879 recursive)); |
| 888 // The oepration created 3 directories recursively. | 880 // The oepration created 3 directories recursively. |
| 889 EXPECT_EQ(3, change_observer()->get_and_reset_create_directory_count()); | 881 EXPECT_EQ(3, change_observer()->get_and_reset_create_directory_count()); |
| 890 | 882 |
| 891 context.reset(NewContext(NULL)); | 883 context.reset(NewContext(NULL)); |
| 892 file_handle = base::kInvalidPlatformFileValue; | 884 file = ofu()->CreateOrOpen(context.get(), url, file_flags); |
| 893 ASSERT_EQ(base::File::FILE_OK, | 885 ASSERT_TRUE(file.IsValid()); |
| 894 ofu()->CreateOrOpen(context.get(), url, file_flags, &file_handle, | 886 ASSERT_TRUE(file.created()); |
| 895 &created)); | |
| 896 ASSERT_TRUE(created); | |
| 897 EXPECT_EQ(1, change_observer()->get_and_reset_create_file_count()); | 887 EXPECT_EQ(1, change_observer()->get_and_reset_create_file_count()); |
| 898 EXPECT_NE(base::kInvalidPlatformFileValue, file_handle); | |
| 899 | 888 |
| 900 CheckFileAndCloseHandle(url, file_handle); | 889 CheckFileAndCloseHandle(url, file.Pass()); |
| 901 | 890 |
| 902 context.reset(NewContext(NULL)); | 891 context.reset(NewContext(NULL)); |
| 903 EXPECT_EQ(base::File::FILE_OK, | 892 EXPECT_EQ(base::File::FILE_OK, |
| 904 ofu()->GetLocalFilePath(context.get(), url, &local_path)); | 893 ofu()->GetLocalFilePath(context.get(), url, &local_path)); |
| 905 EXPECT_TRUE(base::PathExists(local_path)); | 894 EXPECT_TRUE(base::PathExists(local_path)); |
| 906 | 895 |
| 907 context.reset(NewContext(NULL)); | 896 context.reset(NewContext(NULL)); |
| 908 EXPECT_EQ(base::File::FILE_OK, ofu()->DeleteFile(context.get(), url)); | 897 EXPECT_EQ(base::File::FILE_OK, ofu()->DeleteFile(context.get(), url)); |
| 909 EXPECT_EQ(1, change_observer()->get_and_reset_remove_file_count()); | 898 EXPECT_EQ(1, change_observer()->get_and_reset_remove_file_count()); |
| 910 EXPECT_FALSE(base::PathExists(local_path)); | 899 EXPECT_FALSE(base::PathExists(local_path)); |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1025 EXPECT_TRUE(change_observer()->HasNoChange()); | 1014 EXPECT_TRUE(change_observer()->HasNoChange()); |
| 1026 | 1015 |
| 1027 context.reset(NewContext(NULL)); | 1016 context.reset(NewContext(NULL)); |
| 1028 context->set_allowed_bytes_growth( | 1017 context->set_allowed_bytes_growth( |
| 1029 ObfuscatedFileUtil::ComputeFilePathCost(url.path())); | 1018 ObfuscatedFileUtil::ComputeFilePathCost(url.path())); |
| 1030 ASSERT_EQ(base::File::FILE_OK, | 1019 ASSERT_EQ(base::File::FILE_OK, |
| 1031 ofu()->EnsureFileExists(context.get(), url, &created)); | 1020 ofu()->EnsureFileExists(context.get(), url, &created)); |
| 1032 ASSERT_TRUE(created); | 1021 ASSERT_TRUE(created); |
| 1033 EXPECT_EQ(1, change_observer()->get_and_reset_create_file_count()); | 1022 EXPECT_EQ(1, change_observer()->get_and_reset_create_file_count()); |
| 1034 | 1023 |
| 1035 CheckFileAndCloseHandle(url, base::kInvalidPlatformFileValue); | 1024 CheckFileAndCloseHandle(url, base::File()); |
| 1036 | 1025 |
| 1037 context.reset(NewContext(NULL)); | 1026 context.reset(NewContext(NULL)); |
| 1038 ASSERT_EQ(base::File::FILE_OK, | 1027 ASSERT_EQ(base::File::FILE_OK, |
| 1039 ofu()->EnsureFileExists(context.get(), url, &created)); | 1028 ofu()->EnsureFileExists(context.get(), url, &created)); |
| 1040 ASSERT_FALSE(created); | 1029 ASSERT_FALSE(created); |
| 1041 EXPECT_TRUE(change_observer()->HasNoChange()); | 1030 EXPECT_TRUE(change_observer()->HasNoChange()); |
| 1042 | 1031 |
| 1043 // Also test in a subdirectory. | 1032 // Also test in a subdirectory. |
| 1044 url = CreateURLFromUTF8("path/to/file.txt"); | 1033 url = CreateURLFromUTF8("path/to/file.txt"); |
| 1045 context.reset(NewContext(NULL)); | 1034 context.reset(NewContext(NULL)); |
| (...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1713 EXPECT_EQ(expected_quota, SizeInUsageFile()); | 1702 EXPECT_EQ(expected_quota, SizeInUsageFile()); |
| 1714 EXPECT_EQ(expected_quota, SizeByQuotaUtil()); | 1703 EXPECT_EQ(expected_quota, SizeByQuotaUtil()); |
| 1715 EXPECT_EQ(expected_quota, usage()); | 1704 EXPECT_EQ(expected_quota, usage()); |
| 1716 } | 1705 } |
| 1717 | 1706 |
| 1718 TEST_F(ObfuscatedFileUtilTest, TestInconsistency) { | 1707 TEST_F(ObfuscatedFileUtilTest, TestInconsistency) { |
| 1719 const FileSystemURL kPath1 = CreateURLFromUTF8("hoge"); | 1708 const FileSystemURL kPath1 = CreateURLFromUTF8("hoge"); |
| 1720 const FileSystemURL kPath2 = CreateURLFromUTF8("fuga"); | 1709 const FileSystemURL kPath2 = CreateURLFromUTF8("fuga"); |
| 1721 | 1710 |
| 1722 scoped_ptr<FileSystemOperationContext> context; | 1711 scoped_ptr<FileSystemOperationContext> context; |
| 1723 base::PlatformFile file; | |
| 1724 base::File::Info file_info; | 1712 base::File::Info file_info; |
| 1725 base::FilePath data_path; | 1713 base::FilePath data_path; |
| 1726 bool created = false; | 1714 bool created = false; |
| 1727 | 1715 |
| 1728 // Create a non-empty file. | 1716 // Create a non-empty file. |
| 1729 context.reset(NewContext(NULL)); | 1717 context.reset(NewContext(NULL)); |
| 1730 EXPECT_EQ(base::File::FILE_OK, | 1718 EXPECT_EQ(base::File::FILE_OK, |
| 1731 ofu()->EnsureFileExists(context.get(), kPath1, &created)); | 1719 ofu()->EnsureFileExists(context.get(), kPath1, &created)); |
| 1732 EXPECT_TRUE(created); | 1720 EXPECT_TRUE(created); |
| 1733 context.reset(NewContext(NULL)); | 1721 context.reset(NewContext(NULL)); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1774 | 1762 |
| 1775 // Copy from sound |kPath1| to broken |kPath2|. | 1763 // Copy from sound |kPath1| to broken |kPath2|. |
| 1776 context.reset(NewContext(NULL)); | 1764 context.reset(NewContext(NULL)); |
| 1777 EXPECT_EQ(base::File::FILE_OK, | 1765 EXPECT_EQ(base::File::FILE_OK, |
| 1778 ofu()->CopyOrMoveFile(context.get(), kPath1, kPath2, | 1766 ofu()->CopyOrMoveFile(context.get(), kPath1, kPath2, |
| 1779 FileSystemOperation::OPTION_NONE, | 1767 FileSystemOperation::OPTION_NONE, |
| 1780 true /* copy */)); | 1768 true /* copy */)); |
| 1781 | 1769 |
| 1782 ofu()->DestroyDirectoryDatabase(origin(), type_string()); | 1770 ofu()->DestroyDirectoryDatabase(origin(), type_string()); |
| 1783 context.reset(NewContext(NULL)); | 1771 context.reset(NewContext(NULL)); |
| 1784 EXPECT_EQ(base::File::FILE_OK, | 1772 base::File file = |
| 1785 ofu()->CreateOrOpen( | 1773 ofu()->CreateOrOpen(context.get(), kPath1, |
| 1786 context.get(), kPath1, | 1774 base::File::FLAG_READ | base::File::FLAG_CREATE); |
| 1787 base::PLATFORM_FILE_READ | base::PLATFORM_FILE_CREATE, | 1775 EXPECT_TRUE(file.IsValid()); |
| 1788 &file, &created)); | 1776 EXPECT_TRUE(file.created()); |
| 1789 EXPECT_TRUE(created); | |
| 1790 | 1777 |
| 1791 base::File base_file(file); | 1778 EXPECT_TRUE(file.GetInfo(&file_info)); |
| 1792 EXPECT_TRUE(base_file.GetInfo(&file_info)); | |
| 1793 EXPECT_EQ(0, file_info.size); | 1779 EXPECT_EQ(0, file_info.size); |
| 1794 } | 1780 } |
| 1795 | 1781 |
| 1796 TEST_F(ObfuscatedFileUtilTest, TestIncompleteDirectoryReading) { | 1782 TEST_F(ObfuscatedFileUtilTest, TestIncompleteDirectoryReading) { |
| 1797 const FileSystemURL kPath[] = { | 1783 const FileSystemURL kPath[] = { |
| 1798 CreateURLFromUTF8("foo"), | 1784 CreateURLFromUTF8("foo"), |
| 1799 CreateURLFromUTF8("bar"), | 1785 CreateURLFromUTF8("bar"), |
| 1800 CreateURLFromUTF8("baz") | 1786 CreateURLFromUTF8("baz") |
| 1801 }; | 1787 }; |
| 1802 const FileSystemURL empty_path = CreateURL(base::FilePath()); | 1788 const FileSystemURL empty_path = CreateURL(base::FilePath()); |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 1830 | 1816 |
| 1831 TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForCreation) { | 1817 TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForCreation) { |
| 1832 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); | 1818 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); |
| 1833 const FileSystemURL dir_url = CreateURLFromUTF8("foo_dir"); | 1819 const FileSystemURL dir_url = CreateURLFromUTF8("foo_dir"); |
| 1834 | 1820 |
| 1835 // Create working directory. | 1821 // Create working directory. |
| 1836 EXPECT_EQ(base::File::FILE_OK, | 1822 EXPECT_EQ(base::File::FILE_OK, |
| 1837 ofu()->CreateDirectory(context.get(), dir_url, false, false)); | 1823 ofu()->CreateDirectory(context.get(), dir_url, false, false)); |
| 1838 | 1824 |
| 1839 // EnsureFileExists, create case. | 1825 // EnsureFileExists, create case. |
| 1840 FileSystemURL url(FileSystemURLAppendUTF8( | 1826 FileSystemURL url(FileSystemURLAppendUTF8(dir_url, "EnsureFileExists_file")); |
| 1841 dir_url, "EnsureFileExists_file")); | |
| 1842 bool created = false; | 1827 bool created = false; |
| 1843 ClearTimestamp(dir_url); | 1828 ClearTimestamp(dir_url); |
| 1844 context.reset(NewContext(NULL)); | 1829 context.reset(NewContext(NULL)); |
| 1845 EXPECT_EQ(base::File::FILE_OK, | 1830 EXPECT_EQ(base::File::FILE_OK, |
| 1846 ofu()->EnsureFileExists(context.get(), url, &created)); | 1831 ofu()->EnsureFileExists(context.get(), url, &created)); |
| 1847 EXPECT_TRUE(created); | 1832 EXPECT_TRUE(created); |
| 1848 EXPECT_NE(base::Time(), GetModifiedTime(dir_url)); | 1833 EXPECT_NE(base::Time(), GetModifiedTime(dir_url)); |
| 1849 | 1834 |
| 1850 // non create case. | 1835 // non create case. |
| 1851 created = true; | 1836 created = true; |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 1863 ofu()->CreateDirectory(context.get(), url, false, false)); | 1848 ofu()->CreateDirectory(context.get(), url, false, false)); |
| 1864 | 1849 |
| 1865 ClearTimestamp(dir_url); | 1850 ClearTimestamp(dir_url); |
| 1866 context.reset(NewContext(NULL)); | 1851 context.reset(NewContext(NULL)); |
| 1867 EXPECT_EQ(base::File::FILE_ERROR_NOT_A_FILE, | 1852 EXPECT_EQ(base::File::FILE_ERROR_NOT_A_FILE, |
| 1868 ofu()->EnsureFileExists(context.get(), url, &created)); | 1853 ofu()->EnsureFileExists(context.get(), url, &created)); |
| 1869 EXPECT_EQ(base::Time(), GetModifiedTime(dir_url)); | 1854 EXPECT_EQ(base::Time(), GetModifiedTime(dir_url)); |
| 1870 | 1855 |
| 1871 // CreateOrOpen, create case. | 1856 // CreateOrOpen, create case. |
| 1872 url = FileSystemURLAppendUTF8(dir_url, "CreateOrOpen_file"); | 1857 url = FileSystemURLAppendUTF8(dir_url, "CreateOrOpen_file"); |
| 1873 base::PlatformFile file_handle = base::kInvalidPlatformFileValue; | |
| 1874 created = false; | |
| 1875 ClearTimestamp(dir_url); | 1858 ClearTimestamp(dir_url); |
| 1876 context.reset(NewContext(NULL)); | 1859 context.reset(NewContext(NULL)); |
| 1877 EXPECT_EQ(base::File::FILE_OK, | 1860 base::File file = |
| 1878 ofu()->CreateOrOpen( | 1861 ofu()->CreateOrOpen(context.get(), url, |
| 1879 context.get(), url, | 1862 base::File::FLAG_CREATE | base::File::FLAG_WRITE); |
| 1880 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, | 1863 |
| 1881 &file_handle, &created)); | 1864 EXPECT_TRUE(file.IsValid()); |
| 1882 EXPECT_NE(base::kInvalidPlatformFileValue, file_handle); | 1865 EXPECT_TRUE(file.created()); |
| 1883 EXPECT_TRUE(created); | 1866 file.Close(); |
| 1884 EXPECT_TRUE(base::ClosePlatformFile(file_handle)); | |
| 1885 EXPECT_NE(base::Time(), GetModifiedTime(dir_url)); | 1867 EXPECT_NE(base::Time(), GetModifiedTime(dir_url)); |
| 1886 | 1868 |
| 1887 // open case. | 1869 // open case. |
| 1888 file_handle = base::kInvalidPlatformFileValue; | |
| 1889 created = true; | |
| 1890 ClearTimestamp(dir_url); | 1870 ClearTimestamp(dir_url); |
| 1891 context.reset(NewContext(NULL)); | 1871 context.reset(NewContext(NULL)); |
| 1892 EXPECT_EQ(base::File::FILE_OK, | 1872 file = ofu()->CreateOrOpen(context.get(), url, |
| 1893 ofu()->CreateOrOpen( | 1873 base::File::FLAG_OPEN | base::File::FLAG_WRITE); |
| 1894 context.get(), url, | 1874 EXPECT_TRUE(file.IsValid()); |
| 1895 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE, | 1875 EXPECT_FALSE(file.created()); |
| 1896 &file_handle, &created)); | 1876 file.Close(); |
| 1897 EXPECT_NE(base::kInvalidPlatformFileValue, file_handle); | |
| 1898 EXPECT_FALSE(created); | |
| 1899 EXPECT_TRUE(base::ClosePlatformFile(file_handle)); | |
| 1900 EXPECT_EQ(base::Time(), GetModifiedTime(dir_url)); | 1877 EXPECT_EQ(base::Time(), GetModifiedTime(dir_url)); |
| 1901 | 1878 |
| 1902 // fail case | 1879 // fail case |
| 1903 file_handle = base::kInvalidPlatformFileValue; | |
| 1904 ClearTimestamp(dir_url); | 1880 ClearTimestamp(dir_url); |
| 1905 context.reset(NewContext(NULL)); | 1881 context.reset(NewContext(NULL)); |
| 1906 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, | 1882 file = ofu()->CreateOrOpen(context.get(), url, |
| 1907 ofu()->CreateOrOpen( | 1883 base::File::FLAG_CREATE | base::File::FLAG_WRITE); |
| 1908 context.get(), url, | 1884 EXPECT_FALSE(file.IsValid()); |
| 1909 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, | 1885 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, file.error_details()); |
| 1910 &file_handle, &created)); | |
| 1911 EXPECT_EQ(base::kInvalidPlatformFileValue, file_handle); | |
| 1912 EXPECT_EQ(base::Time(), GetModifiedTime(dir_url)); | 1886 EXPECT_EQ(base::Time(), GetModifiedTime(dir_url)); |
| 1913 | 1887 |
| 1914 // CreateDirectory, create case. | 1888 // CreateDirectory, create case. |
| 1915 // Creating CreateDirectory_dir and CreateDirectory_dir/subdir. | 1889 // Creating CreateDirectory_dir and CreateDirectory_dir/subdir. |
| 1916 url = FileSystemURLAppendUTF8(dir_url, "CreateDirectory_dir"); | 1890 url = FileSystemURLAppendUTF8(dir_url, "CreateDirectory_dir"); |
| 1917 FileSystemURL subdir_url(FileSystemURLAppendUTF8(url, "subdir")); | 1891 FileSystemURL subdir_url(FileSystemURLAppendUTF8(url, "subdir")); |
| 1918 ClearTimestamp(dir_url); | 1892 ClearTimestamp(dir_url); |
| 1919 context.reset(NewContext(NULL)); | 1893 context.reset(NewContext(NULL)); |
| 1920 EXPECT_EQ(base::File::FILE_OK, | 1894 EXPECT_EQ(base::File::FILE_OK, |
| 1921 ofu()->CreateDirectory(context.get(), subdir_url, | 1895 ofu()->CreateDirectory(context.get(), subdir_url, |
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2360 file)); | 2334 file)); |
| 2361 ASSERT_EQ(1140, ComputeTotalFileSize()); | 2335 ASSERT_EQ(1140, ComputeTotalFileSize()); |
| 2362 | 2336 |
| 2363 ASSERT_EQ(base::File::FILE_OK, | 2337 ASSERT_EQ(base::File::FILE_OK, |
| 2364 AsyncFileTestHelper::Remove( | 2338 AsyncFileTestHelper::Remove( |
| 2365 file_system_context(), dir, true /* recursive */)); | 2339 file_system_context(), dir, true /* recursive */)); |
| 2366 ASSERT_EQ(0, ComputeTotalFileSize()); | 2340 ASSERT_EQ(0, ComputeTotalFileSize()); |
| 2367 } | 2341 } |
| 2368 | 2342 |
| 2369 TEST_F(ObfuscatedFileUtilTest, TestQuotaOnOpen) { | 2343 TEST_F(ObfuscatedFileUtilTest, TestQuotaOnOpen) { |
| 2370 FileSystemURL file(CreateURLFromUTF8("file")); | 2344 FileSystemURL url(CreateURLFromUTF8("file")); |
| 2371 base::PlatformFile file_handle; | 2345 |
| 2372 bool created; | 2346 bool created; |
| 2373 | |
| 2374 // Creating a file. | 2347 // Creating a file. |
| 2375 ASSERT_EQ(base::File::FILE_OK, | 2348 ASSERT_EQ(base::File::FILE_OK, |
| 2376 ofu()->EnsureFileExists( | 2349 ofu()->EnsureFileExists( |
| 2377 AllowUsageIncrease(PathCost(file))->context(), | 2350 AllowUsageIncrease(PathCost(url))->context(), |
| 2378 file, &created)); | 2351 url, &created)); |
| 2379 ASSERT_TRUE(created); | 2352 ASSERT_TRUE(created); |
| 2380 ASSERT_EQ(0, ComputeTotalFileSize()); | 2353 ASSERT_EQ(0, ComputeTotalFileSize()); |
| 2381 | 2354 |
| 2382 // Opening it, which shouldn't change the usage. | 2355 // Opening it, which shouldn't change the usage. |
| 2383 ASSERT_EQ(base::File::FILE_OK, | 2356 base::File file = |
| 2384 ofu()->CreateOrOpen( | 2357 ofu()->CreateOrOpen(AllowUsageIncrease(0)->context(), url, |
| 2385 AllowUsageIncrease(0)->context(), file, | 2358 base::File::FLAG_OPEN | base::File::FLAG_WRITE); |
| 2386 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE, | 2359 ASSERT_TRUE(file.IsValid()); |
| 2387 &file_handle, &created)); | |
| 2388 ASSERT_EQ(0, ComputeTotalFileSize()); | 2360 ASSERT_EQ(0, ComputeTotalFileSize()); |
| 2389 EXPECT_TRUE(base::ClosePlatformFile(file_handle)); | 2361 file.Close(); |
| 2390 | 2362 |
| 2391 const int length = 33; | 2363 const int length = 33; |
| 2392 ASSERT_EQ(base::File::FILE_OK, | 2364 ASSERT_EQ(base::File::FILE_OK, |
| 2393 ofu()->Truncate( | 2365 ofu()->Truncate( |
| 2394 AllowUsageIncrease(length)->context(), file, length)); | 2366 AllowUsageIncrease(length)->context(), url, length)); |
| 2395 ASSERT_EQ(length, ComputeTotalFileSize()); | 2367 ASSERT_EQ(length, ComputeTotalFileSize()); |
| 2396 | 2368 |
| 2397 // Opening it with CREATE_ALWAYS flag, which should truncate the file size. | 2369 // Opening it with CREATE_ALWAYS flag, which should truncate the file size. |
| 2398 ASSERT_EQ(base::File::FILE_OK, | 2370 file = ofu()->CreateOrOpen( |
| 2399 ofu()->CreateOrOpen( | 2371 AllowUsageIncrease(-length)->context(), url, |
| 2400 AllowUsageIncrease(-length)->context(), file, | 2372 base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE); |
| 2401 base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_WRITE, | 2373 ASSERT_TRUE(file.IsValid()); |
| 2402 &file_handle, &created)); | |
| 2403 ASSERT_EQ(0, ComputeTotalFileSize()); | 2374 ASSERT_EQ(0, ComputeTotalFileSize()); |
| 2404 EXPECT_TRUE(base::ClosePlatformFile(file_handle)); | 2375 file.Close(); |
| 2405 | 2376 |
| 2406 // Extending the file again. | 2377 // Extending the file again. |
| 2407 ASSERT_EQ(base::File::FILE_OK, | 2378 ASSERT_EQ(base::File::FILE_OK, |
| 2408 ofu()->Truncate( | 2379 ofu()->Truncate( |
| 2409 AllowUsageIncrease(length)->context(), file, length)); | 2380 AllowUsageIncrease(length)->context(), url, length)); |
| 2410 ASSERT_EQ(length, ComputeTotalFileSize()); | 2381 ASSERT_EQ(length, ComputeTotalFileSize()); |
| 2411 | 2382 |
| 2412 // Opening it with TRUNCATED flag, which should truncate the file size. | 2383 // Opening it with TRUNCATED flag, which should truncate the file size. |
| 2413 ASSERT_EQ(base::File::FILE_OK, | 2384 file = ofu()->CreateOrOpen( |
| 2414 ofu()->CreateOrOpen( | 2385 AllowUsageIncrease(-length)->context(), url, |
| 2415 AllowUsageIncrease(-length)->context(), file, | 2386 base::File::FLAG_OPEN_TRUNCATED | base::File::FLAG_WRITE); |
| 2416 base::PLATFORM_FILE_OPEN_TRUNCATED | base::PLATFORM_FILE_WRITE, | 2387 ASSERT_TRUE(file.IsValid()); |
| 2417 &file_handle, &created)); | |
| 2418 ASSERT_EQ(0, ComputeTotalFileSize()); | 2388 ASSERT_EQ(0, ComputeTotalFileSize()); |
| 2419 EXPECT_TRUE(base::ClosePlatformFile(file_handle)); | 2389 file.Close(); |
| 2420 } | 2390 } |
| 2421 | 2391 |
| 2422 TEST_F(ObfuscatedFileUtilTest, MaybeDropDatabasesAliveCase) { | 2392 TEST_F(ObfuscatedFileUtilTest, MaybeDropDatabasesAliveCase) { |
| 2423 MaybeDropDatabasesAliveCaseTestBody(); | 2393 MaybeDropDatabasesAliveCaseTestBody(); |
| 2424 } | 2394 } |
| 2425 | 2395 |
| 2426 TEST_F(ObfuscatedFileUtilTest, MaybeDropDatabasesAlreadyDeletedCase) { | 2396 TEST_F(ObfuscatedFileUtilTest, MaybeDropDatabasesAlreadyDeletedCase) { |
| 2427 MaybeDropDatabasesAlreadyDeletedCaseTestBody(); | 2397 MaybeDropDatabasesAlreadyDeletedCaseTestBody(); |
| 2428 } | 2398 } |
| 2429 | 2399 |
| 2430 TEST_F(ObfuscatedFileUtilTest, DestroyDirectoryDatabase_Isolated) { | 2400 TEST_F(ObfuscatedFileUtilTest, DestroyDirectoryDatabase_Isolated) { |
| 2431 DestroyDirectoryDatabase_IsolatedTestBody(); | 2401 DestroyDirectoryDatabase_IsolatedTestBody(); |
| 2432 } | 2402 } |
| 2433 | 2403 |
| 2434 TEST_F(ObfuscatedFileUtilTest, GetDirectoryDatabase_Isolated) { | 2404 TEST_F(ObfuscatedFileUtilTest, GetDirectoryDatabase_Isolated) { |
| 2435 GetDirectoryDatabase_IsolatedTestBody(); | 2405 GetDirectoryDatabase_IsolatedTestBody(); |
| 2436 } | 2406 } |
| 2437 | 2407 |
| 2438 TEST_F(ObfuscatedFileUtilTest, MigrationBackFromIsolated) { | 2408 TEST_F(ObfuscatedFileUtilTest, MigrationBackFromIsolated) { |
| 2439 MigrationBackFromIsolatedTestBody(); | 2409 MigrationBackFromIsolatedTestBody(); |
| 2440 } | 2410 } |
| 2441 | 2411 |
| 2442 TEST_F(ObfuscatedFileUtilTest, OpenPathInNonDirectory) { | 2412 TEST_F(ObfuscatedFileUtilTest, OpenPathInNonDirectory) { |
| 2443 FileSystemURL file(CreateURLFromUTF8("file")); | 2413 FileSystemURL url(CreateURLFromUTF8("file")); |
| 2444 FileSystemURL path_in_file(CreateURLFromUTF8("file/file")); | 2414 FileSystemURL path_in_file(CreateURLFromUTF8("file/file")); |
| 2445 bool created; | 2415 bool created; |
| 2446 | 2416 |
| 2447 ASSERT_EQ(base::File::FILE_OK, | 2417 ASSERT_EQ(base::File::FILE_OK, |
| 2448 ofu()->EnsureFileExists(UnlimitedContext().get(), file, &created)); | 2418 ofu()->EnsureFileExists(UnlimitedContext().get(), url, &created)); |
| 2449 ASSERT_TRUE(created); | 2419 ASSERT_TRUE(created); |
| 2450 | 2420 |
| 2451 created = false; | 2421 int file_flags = base::File::FLAG_CREATE | base::File::FLAG_WRITE; |
| 2452 base::PlatformFile file_handle = base::kInvalidPlatformFileValue; | 2422 base::File file = |
| 2453 int file_flags = base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE; | 2423 ofu()->CreateOrOpen(UnlimitedContext().get(), path_in_file, file_flags); |
| 2454 ASSERT_EQ(base::File::FILE_ERROR_NOT_A_DIRECTORY, | 2424 ASSERT_FALSE(file.IsValid()); |
| 2455 ofu()->CreateOrOpen(UnlimitedContext().get(), | 2425 ASSERT_EQ(base::File::FILE_ERROR_NOT_A_DIRECTORY, file.error_details()); |
| 2456 path_in_file, | |
| 2457 file_flags, | |
| 2458 &file_handle, | |
| 2459 &created)); | |
| 2460 ASSERT_FALSE(created); | |
| 2461 ASSERT_EQ(base::kInvalidPlatformFileValue, file_handle); | |
| 2462 | 2426 |
| 2463 ASSERT_EQ(base::File::FILE_ERROR_NOT_A_DIRECTORY, | 2427 ASSERT_EQ(base::File::FILE_ERROR_NOT_A_DIRECTORY, |
| 2464 ofu()->CreateDirectory(UnlimitedContext().get(), | 2428 ofu()->CreateDirectory(UnlimitedContext().get(), |
| 2465 path_in_file, | 2429 path_in_file, |
| 2466 false /* exclusive */, | 2430 false /* exclusive */, |
| 2467 false /* recursive */)); | 2431 false /* recursive */)); |
| 2468 } | 2432 } |
| 2469 | 2433 |
| 2470 TEST_F(ObfuscatedFileUtilTest, CreateDirectory_NotADirectoryInRecursive) { | 2434 TEST_F(ObfuscatedFileUtilTest, CreateDirectory_NotADirectoryInRecursive) { |
| 2471 FileSystemURL file(CreateURLFromUTF8("file")); | 2435 FileSystemURL file(CreateURLFromUTF8("file")); |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 2484 false /* exclusive */, | 2448 false /* exclusive */, |
| 2485 true /* recursive */)); | 2449 true /* recursive */)); |
| 2486 ASSERT_EQ(base::File::FILE_ERROR_NOT_A_DIRECTORY, | 2450 ASSERT_EQ(base::File::FILE_ERROR_NOT_A_DIRECTORY, |
| 2487 ofu()->CreateDirectory(UnlimitedContext().get(), | 2451 ofu()->CreateDirectory(UnlimitedContext().get(), |
| 2488 path_in_file_in_file, | 2452 path_in_file_in_file, |
| 2489 false /* exclusive */, | 2453 false /* exclusive */, |
| 2490 true /* recursive */)); | 2454 true /* recursive */)); |
| 2491 } | 2455 } |
| 2492 | 2456 |
| 2493 } // namespace content | 2457 } // namespace content |
| OLD | NEW |