| 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 |