OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "build/build_config.h" | 5 #include "build/build_config.h" |
6 | 6 |
7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <windows.h> | 8 #include <windows.h> |
9 #include <shellapi.h> | 9 #include <shellapi.h> |
10 #include <shlobj.h> | 10 #include <shlobj.h> |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 190 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
191 } | 191 } |
192 | 192 |
193 ScopedTempDir temp_dir_; | 193 ScopedTempDir temp_dir_; |
194 }; | 194 }; |
195 | 195 |
196 // Collects all the results from the given file enumerator, and provides an | 196 // Collects all the results from the given file enumerator, and provides an |
197 // interface to query whether a given file is present. | 197 // interface to query whether a given file is present. |
198 class FindResultCollector { | 198 class FindResultCollector { |
199 public: | 199 public: |
200 explicit FindResultCollector(FileEnumerator& enumerator) { | 200 explicit FindResultCollector(FileEnumerator* enumerator) { |
201 FilePath cur_file; | 201 FilePath cur_file; |
202 while (!(cur_file = enumerator.Next()).value().empty()) { | 202 while (!(cur_file = enumerator->Next()).value().empty()) { |
203 FilePath::StringType path = cur_file.value(); | 203 FilePath::StringType path = cur_file.value(); |
204 // The file should not be returned twice. | 204 // The file should not be returned twice. |
205 EXPECT_TRUE(files_.end() == files_.find(path)) | 205 EXPECT_TRUE(files_.end() == files_.find(path)) |
206 << "Same file returned twice"; | 206 << "Same file returned twice"; |
207 | 207 |
208 // Save for later. | 208 // Save for later. |
209 files_.insert(path); | 209 files_.insert(path); |
210 } | 210 } |
211 } | 211 } |
212 | 212 |
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
817 EXPECT_EQ(FILE_PERMISSION_USER_MASK, mode & FILE_PERMISSION_USER_MASK); | 817 EXPECT_EQ(FILE_PERMISSION_USER_MASK, mode & FILE_PERMISSION_USER_MASK); |
818 | 818 |
819 // Get rid of the permissions from the directory. | 819 // Get rid of the permissions from the directory. |
820 EXPECT_TRUE(SetPosixFilePermissions(subdir_path, 0u)); | 820 EXPECT_TRUE(SetPosixFilePermissions(subdir_path, 0u)); |
821 EXPECT_TRUE(GetPosixFilePermissions(subdir_path, &mode)); | 821 EXPECT_TRUE(GetPosixFilePermissions(subdir_path, &mode)); |
822 EXPECT_FALSE(mode & FILE_PERMISSION_USER_MASK); | 822 EXPECT_FALSE(mode & FILE_PERMISSION_USER_MASK); |
823 | 823 |
824 // Make sure the file in the directory can't be enumerated. | 824 // Make sure the file in the directory can't be enumerated. |
825 FileEnumerator f1(subdir_path, true, FileEnumerator::FILES); | 825 FileEnumerator f1(subdir_path, true, FileEnumerator::FILES); |
826 EXPECT_TRUE(PathExists(subdir_path)); | 826 EXPECT_TRUE(PathExists(subdir_path)); |
827 FindResultCollector c1(f1); | 827 FindResultCollector c1(&f1); |
828 EXPECT_EQ(0, c1.size()); | 828 EXPECT_EQ(0, c1.size()); |
829 EXPECT_FALSE(GetPosixFilePermissions(file_name, &mode)); | 829 EXPECT_FALSE(GetPosixFilePermissions(file_name, &mode)); |
830 | 830 |
831 // Give the permissions to the directory. | 831 // Give the permissions to the directory. |
832 EXPECT_TRUE(SetPosixFilePermissions(subdir_path, FILE_PERMISSION_USER_MASK)); | 832 EXPECT_TRUE(SetPosixFilePermissions(subdir_path, FILE_PERMISSION_USER_MASK)); |
833 EXPECT_TRUE(GetPosixFilePermissions(subdir_path, &mode)); | 833 EXPECT_TRUE(GetPosixFilePermissions(subdir_path, &mode)); |
834 EXPECT_EQ(FILE_PERMISSION_USER_MASK, mode & FILE_PERMISSION_USER_MASK); | 834 EXPECT_EQ(FILE_PERMISSION_USER_MASK, mode & FILE_PERMISSION_USER_MASK); |
835 | 835 |
836 // Make sure the file in the directory can be enumerated. | 836 // Make sure the file in the directory can be enumerated. |
837 FileEnumerator f2(subdir_path, true, FileEnumerator::FILES); | 837 FileEnumerator f2(subdir_path, true, FileEnumerator::FILES); |
838 FindResultCollector c2(f2); | 838 FindResultCollector c2(&f2); |
839 EXPECT_TRUE(c2.HasFile(file_name)); | 839 EXPECT_TRUE(c2.HasFile(file_name)); |
840 EXPECT_EQ(1, c2.size()); | 840 EXPECT_EQ(1, c2.size()); |
841 | 841 |
842 // Delete the file. | 842 // Delete the file. |
843 EXPECT_TRUE(DeleteFile(subdir_path, true)); | 843 EXPECT_TRUE(DeleteFile(subdir_path, true)); |
844 EXPECT_FALSE(PathExists(subdir_path)); | 844 EXPECT_FALSE(PathExists(subdir_path)); |
845 } | 845 } |
846 | 846 |
847 #endif // defined(OS_POSIX) | 847 #endif // defined(OS_POSIX) |
848 | 848 |
(...skipping 1015 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1864 CreateTextFile(dir2innerfile, std::wstring()); | 1864 CreateTextFile(dir2innerfile, std::wstring()); |
1865 FilePath file1 = temp_dir_.path().Append(FPL("file1.txt")); | 1865 FilePath file1 = temp_dir_.path().Append(FPL("file1.txt")); |
1866 CreateTextFile(file1, std::wstring()); | 1866 CreateTextFile(file1, std::wstring()); |
1867 FilePath file2_rel = dir2.Append(FilePath::kParentDirectory) | 1867 FilePath file2_rel = dir2.Append(FilePath::kParentDirectory) |
1868 .Append(FPL("file2.txt")); | 1868 .Append(FPL("file2.txt")); |
1869 CreateTextFile(file2_rel, std::wstring()); | 1869 CreateTextFile(file2_rel, std::wstring()); |
1870 FilePath file2_abs = temp_dir_.path().Append(FPL("file2.txt")); | 1870 FilePath file2_abs = temp_dir_.path().Append(FPL("file2.txt")); |
1871 | 1871 |
1872 // Only enumerate files. | 1872 // Only enumerate files. |
1873 FileEnumerator f1(temp_dir_.path(), true, FileEnumerator::FILES); | 1873 FileEnumerator f1(temp_dir_.path(), true, FileEnumerator::FILES); |
1874 FindResultCollector c1(f1); | 1874 FindResultCollector c1(&f1); |
1875 EXPECT_TRUE(c1.HasFile(file1)); | 1875 EXPECT_TRUE(c1.HasFile(file1)); |
1876 EXPECT_TRUE(c1.HasFile(file2_abs)); | 1876 EXPECT_TRUE(c1.HasFile(file2_abs)); |
1877 EXPECT_TRUE(c1.HasFile(dir2file)); | 1877 EXPECT_TRUE(c1.HasFile(dir2file)); |
1878 EXPECT_TRUE(c1.HasFile(dir2innerfile)); | 1878 EXPECT_TRUE(c1.HasFile(dir2innerfile)); |
1879 EXPECT_EQ(4, c1.size()); | 1879 EXPECT_EQ(4, c1.size()); |
1880 | 1880 |
1881 // Only enumerate directories. | 1881 // Only enumerate directories. |
1882 FileEnumerator f2(temp_dir_.path(), true, FileEnumerator::DIRECTORIES); | 1882 FileEnumerator f2(temp_dir_.path(), true, FileEnumerator::DIRECTORIES); |
1883 FindResultCollector c2(f2); | 1883 FindResultCollector c2(&f2); |
1884 EXPECT_TRUE(c2.HasFile(dir1)); | 1884 EXPECT_TRUE(c2.HasFile(dir1)); |
1885 EXPECT_TRUE(c2.HasFile(dir2)); | 1885 EXPECT_TRUE(c2.HasFile(dir2)); |
1886 EXPECT_TRUE(c2.HasFile(dir2inner)); | 1886 EXPECT_TRUE(c2.HasFile(dir2inner)); |
1887 EXPECT_EQ(3, c2.size()); | 1887 EXPECT_EQ(3, c2.size()); |
1888 | 1888 |
1889 // Only enumerate directories non-recursively. | 1889 // Only enumerate directories non-recursively. |
1890 FileEnumerator f2_non_recursive( | 1890 FileEnumerator f2_non_recursive( |
1891 temp_dir_.path(), false, FileEnumerator::DIRECTORIES); | 1891 temp_dir_.path(), false, FileEnumerator::DIRECTORIES); |
1892 FindResultCollector c2_non_recursive(f2_non_recursive); | 1892 FindResultCollector c2_non_recursive(&f2_non_recursive); |
1893 EXPECT_TRUE(c2_non_recursive.HasFile(dir1)); | 1893 EXPECT_TRUE(c2_non_recursive.HasFile(dir1)); |
1894 EXPECT_TRUE(c2_non_recursive.HasFile(dir2)); | 1894 EXPECT_TRUE(c2_non_recursive.HasFile(dir2)); |
1895 EXPECT_EQ(2, c2_non_recursive.size()); | 1895 EXPECT_EQ(2, c2_non_recursive.size()); |
1896 | 1896 |
1897 // Only enumerate directories, non-recursively, including "..". | 1897 // Only enumerate directories, non-recursively, including "..". |
1898 FileEnumerator f2_dotdot(temp_dir_.path(), false, | 1898 FileEnumerator f2_dotdot(temp_dir_.path(), false, |
1899 FileEnumerator::DIRECTORIES | | 1899 FileEnumerator::DIRECTORIES | |
1900 FileEnumerator::INCLUDE_DOT_DOT); | 1900 FileEnumerator::INCLUDE_DOT_DOT); |
1901 FindResultCollector c2_dotdot(f2_dotdot); | 1901 FindResultCollector c2_dotdot(&f2_dotdot); |
1902 EXPECT_TRUE(c2_dotdot.HasFile(dir1)); | 1902 EXPECT_TRUE(c2_dotdot.HasFile(dir1)); |
1903 EXPECT_TRUE(c2_dotdot.HasFile(dir2)); | 1903 EXPECT_TRUE(c2_dotdot.HasFile(dir2)); |
1904 EXPECT_TRUE(c2_dotdot.HasFile(temp_dir_.path().Append(FPL("..")))); | 1904 EXPECT_TRUE(c2_dotdot.HasFile(temp_dir_.path().Append(FPL("..")))); |
1905 EXPECT_EQ(3, c2_dotdot.size()); | 1905 EXPECT_EQ(3, c2_dotdot.size()); |
1906 | 1906 |
1907 // Enumerate files and directories. | 1907 // Enumerate files and directories. |
1908 FileEnumerator f3(temp_dir_.path(), true, FILES_AND_DIRECTORIES); | 1908 FileEnumerator f3(temp_dir_.path(), true, FILES_AND_DIRECTORIES); |
1909 FindResultCollector c3(f3); | 1909 FindResultCollector c3(&f3); |
1910 EXPECT_TRUE(c3.HasFile(dir1)); | 1910 EXPECT_TRUE(c3.HasFile(dir1)); |
1911 EXPECT_TRUE(c3.HasFile(dir2)); | 1911 EXPECT_TRUE(c3.HasFile(dir2)); |
1912 EXPECT_TRUE(c3.HasFile(file1)); | 1912 EXPECT_TRUE(c3.HasFile(file1)); |
1913 EXPECT_TRUE(c3.HasFile(file2_abs)); | 1913 EXPECT_TRUE(c3.HasFile(file2_abs)); |
1914 EXPECT_TRUE(c3.HasFile(dir2file)); | 1914 EXPECT_TRUE(c3.HasFile(dir2file)); |
1915 EXPECT_TRUE(c3.HasFile(dir2inner)); | 1915 EXPECT_TRUE(c3.HasFile(dir2inner)); |
1916 EXPECT_TRUE(c3.HasFile(dir2innerfile)); | 1916 EXPECT_TRUE(c3.HasFile(dir2innerfile)); |
1917 EXPECT_EQ(7, c3.size()); | 1917 EXPECT_EQ(7, c3.size()); |
1918 | 1918 |
1919 // Non-recursive operation. | 1919 // Non-recursive operation. |
1920 FileEnumerator f4(temp_dir_.path(), false, FILES_AND_DIRECTORIES); | 1920 FileEnumerator f4(temp_dir_.path(), false, FILES_AND_DIRECTORIES); |
1921 FindResultCollector c4(f4); | 1921 FindResultCollector c4(&f4); |
1922 EXPECT_TRUE(c4.HasFile(dir2)); | 1922 EXPECT_TRUE(c4.HasFile(dir2)); |
1923 EXPECT_TRUE(c4.HasFile(dir2)); | 1923 EXPECT_TRUE(c4.HasFile(dir2)); |
1924 EXPECT_TRUE(c4.HasFile(file1)); | 1924 EXPECT_TRUE(c4.HasFile(file1)); |
1925 EXPECT_TRUE(c4.HasFile(file2_abs)); | 1925 EXPECT_TRUE(c4.HasFile(file2_abs)); |
1926 EXPECT_EQ(4, c4.size()); | 1926 EXPECT_EQ(4, c4.size()); |
1927 | 1927 |
1928 // Enumerate with a pattern. | 1928 // Enumerate with a pattern. |
1929 FileEnumerator f5(temp_dir_.path(), true, FILES_AND_DIRECTORIES, FPL("dir*")); | 1929 FileEnumerator f5(temp_dir_.path(), true, FILES_AND_DIRECTORIES, FPL("dir*")); |
1930 FindResultCollector c5(f5); | 1930 FindResultCollector c5(&f5); |
1931 EXPECT_TRUE(c5.HasFile(dir1)); | 1931 EXPECT_TRUE(c5.HasFile(dir1)); |
1932 EXPECT_TRUE(c5.HasFile(dir2)); | 1932 EXPECT_TRUE(c5.HasFile(dir2)); |
1933 EXPECT_TRUE(c5.HasFile(dir2file)); | 1933 EXPECT_TRUE(c5.HasFile(dir2file)); |
1934 EXPECT_TRUE(c5.HasFile(dir2inner)); | 1934 EXPECT_TRUE(c5.HasFile(dir2inner)); |
1935 EXPECT_TRUE(c5.HasFile(dir2innerfile)); | 1935 EXPECT_TRUE(c5.HasFile(dir2innerfile)); |
1936 EXPECT_EQ(5, c5.size()); | 1936 EXPECT_EQ(5, c5.size()); |
1937 | 1937 |
1938 #if defined(OS_WIN) | 1938 #if defined(OS_WIN) |
1939 { | 1939 { |
1940 // Make dir1 point to dir2. | 1940 // Make dir1 point to dir2. |
1941 ReparsePoint reparse_point(dir1, dir2); | 1941 ReparsePoint reparse_point(dir1, dir2); |
1942 EXPECT_TRUE(reparse_point.IsValid()); | 1942 EXPECT_TRUE(reparse_point.IsValid()); |
1943 | 1943 |
1944 if ((win::GetVersion() >= win::VERSION_VISTA)) { | 1944 if ((win::GetVersion() >= win::VERSION_VISTA)) { |
1945 // There can be a delay for the enumeration code to see the change on | 1945 // There can be a delay for the enumeration code to see the change on |
1946 // the file system so skip this test for XP. | 1946 // the file system so skip this test for XP. |
1947 // Enumerate the reparse point. | 1947 // Enumerate the reparse point. |
1948 FileEnumerator f6(dir1, true, FILES_AND_DIRECTORIES); | 1948 FileEnumerator f6(dir1, true, FILES_AND_DIRECTORIES); |
1949 FindResultCollector c6(f6); | 1949 FindResultCollector c6(&f6); |
1950 FilePath inner2 = dir1.Append(FPL("inner")); | 1950 FilePath inner2 = dir1.Append(FPL("inner")); |
1951 EXPECT_TRUE(c6.HasFile(inner2)); | 1951 EXPECT_TRUE(c6.HasFile(inner2)); |
1952 EXPECT_TRUE(c6.HasFile(inner2.Append(FPL("innerfile.txt")))); | 1952 EXPECT_TRUE(c6.HasFile(inner2.Append(FPL("innerfile.txt")))); |
1953 EXPECT_TRUE(c6.HasFile(dir1.Append(FPL("dir2file.txt")))); | 1953 EXPECT_TRUE(c6.HasFile(dir1.Append(FPL("dir2file.txt")))); |
1954 EXPECT_EQ(3, c6.size()); | 1954 EXPECT_EQ(3, c6.size()); |
1955 } | 1955 } |
1956 | 1956 |
1957 // No changes for non recursive operation. | 1957 // No changes for non recursive operation. |
1958 FileEnumerator f7(temp_dir_.path(), false, FILES_AND_DIRECTORIES); | 1958 FileEnumerator f7(temp_dir_.path(), false, FILES_AND_DIRECTORIES); |
1959 FindResultCollector c7(f7); | 1959 FindResultCollector c7(&f7); |
1960 EXPECT_TRUE(c7.HasFile(dir2)); | 1960 EXPECT_TRUE(c7.HasFile(dir2)); |
1961 EXPECT_TRUE(c7.HasFile(dir2)); | 1961 EXPECT_TRUE(c7.HasFile(dir2)); |
1962 EXPECT_TRUE(c7.HasFile(file1)); | 1962 EXPECT_TRUE(c7.HasFile(file1)); |
1963 EXPECT_TRUE(c7.HasFile(file2_abs)); | 1963 EXPECT_TRUE(c7.HasFile(file2_abs)); |
1964 EXPECT_EQ(4, c7.size()); | 1964 EXPECT_EQ(4, c7.size()); |
1965 | 1965 |
1966 // Should not enumerate inside dir1 when using recursion. | 1966 // Should not enumerate inside dir1 when using recursion. |
1967 FileEnumerator f8(temp_dir_.path(), true, FILES_AND_DIRECTORIES); | 1967 FileEnumerator f8(temp_dir_.path(), true, FILES_AND_DIRECTORIES); |
1968 FindResultCollector c8(f8); | 1968 FindResultCollector c8(&f8); |
1969 EXPECT_TRUE(c8.HasFile(dir1)); | 1969 EXPECT_TRUE(c8.HasFile(dir1)); |
1970 EXPECT_TRUE(c8.HasFile(dir2)); | 1970 EXPECT_TRUE(c8.HasFile(dir2)); |
1971 EXPECT_TRUE(c8.HasFile(file1)); | 1971 EXPECT_TRUE(c8.HasFile(file1)); |
1972 EXPECT_TRUE(c8.HasFile(file2_abs)); | 1972 EXPECT_TRUE(c8.HasFile(file2_abs)); |
1973 EXPECT_TRUE(c8.HasFile(dir2file)); | 1973 EXPECT_TRUE(c8.HasFile(dir2file)); |
1974 EXPECT_TRUE(c8.HasFile(dir2inner)); | 1974 EXPECT_TRUE(c8.HasFile(dir2inner)); |
1975 EXPECT_TRUE(c8.HasFile(dir2innerfile)); | 1975 EXPECT_TRUE(c8.HasFile(dir2innerfile)); |
1976 EXPECT_EQ(7, c8.size()); | 1976 EXPECT_EQ(7, c8.size()); |
1977 } | 1977 } |
1978 #endif | 1978 #endif |
(...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2611 // Trying to close it should crash. This is important for security. | 2611 // Trying to close it should crash. This is important for security. |
2612 EXPECT_DEATH(CloseWithScopedFD(fds[1]), ""); | 2612 EXPECT_DEATH(CloseWithScopedFD(fds[1]), ""); |
2613 #endif | 2613 #endif |
2614 } | 2614 } |
2615 | 2615 |
2616 #endif // defined(OS_POSIX) | 2616 #endif // defined(OS_POSIX) |
2617 | 2617 |
2618 } // namespace | 2618 } // namespace |
2619 | 2619 |
2620 } // namespace base | 2620 } // namespace base |
OLD | NEW |