Index: base/files/file_enumerator.h |
diff --git a/base/files/file_enumerator.h b/base/files/file_enumerator.h |
index 7cac8dd9d457f86366ea54adc1688d36f9121ed9..4f3ee57a8c555c70fac5d6e2bde900137ba9101e 100644 |
--- a/base/files/file_enumerator.h |
+++ b/base/files/file_enumerator.h |
@@ -84,6 +84,17 @@ class BASE_EXPORT FileEnumerator { |
#endif |
}; |
+ // Search policy for intermediate folders. |
+ enum class FolderSearchPolicy { |
+ // Recursive search will pass through folders whose names match the |
+ // pattern. Inside each one, all files will be returned. Folders with names |
+ // that do not match the pattern will be ignored within their interior. |
+ MATCH_ONLY, |
+ // Recursive search will pass through every folder and perform pattern |
+ // matching inside each one. |
+ ALL, |
+ }; |
+ |
// |root_path| is the starting directory to search for. It may or may not end |
// in a slash. |
// |
@@ -101,9 +112,6 @@ class BASE_EXPORT FileEnumerator { |
// since the underlying code uses OS-specific matching routines. In general, |
// Windows matching is less featureful than others, so test there first. |
// If unspecified, this will match all files. |
- // NOTE: the pattern only matches the contents of root_path, not files in |
- // recursive subdirectories. |
- // TODO(erikkay): Fix the pattern matching to work at all levels. |
FileEnumerator(const FilePath& root_path, |
bool recursive, |
int file_type); |
@@ -111,6 +119,11 @@ class BASE_EXPORT FileEnumerator { |
bool recursive, |
int file_type, |
const FilePath::StringType& pattern); |
+ FileEnumerator(const FilePath& root_path, |
+ bool recursive, |
+ int file_type, |
+ const FilePath::StringType& pattern, |
+ FolderSearchPolicy folder_search_policy); |
~FileEnumerator(); |
// Returns the next file or an empty string if there are no more results. |
@@ -127,28 +140,27 @@ class BASE_EXPORT FileEnumerator { |
// Returns true if the given path should be skipped in enumeration. |
bool ShouldSkip(const FilePath& path); |
+ bool IsTypeMatched(bool is_dir) const; |
+ |
+ bool IsPatternMatched(const FilePath& src) const; |
+ |
#if defined(OS_WIN) |
// True when find_data_ is valid. |
- bool has_find_data_; |
+ bool has_find_data_ = false; |
WIN32_FIND_DATA find_data_; |
- HANDLE find_handle_; |
+ HANDLE find_handle_ = INVALID_HANDLE_VALUE; |
#elif defined(OS_POSIX) |
- |
- // Read the filenames in source into the vector of DirectoryEntryInfo's |
- static bool ReadDirectory(std::vector<FileInfo>* entries, |
- const FilePath& source, bool show_links); |
- |
// The files in the current directory |
std::vector<FileInfo> directory_entries_; |
// The next entry to use from the directory_entries_ vector |
size_t current_directory_entry_; |
#endif |
- |
FilePath root_path_; |
- bool recursive_; |
- int file_type_; |
- FilePath::StringType pattern_; // Empty when we want to find everything. |
+ const bool recursive_; |
+ const int file_type_; |
+ FilePath::StringType pattern_; |
+ const FolderSearchPolicy folder_search_policy_; |
// A stack that keeps track of which subdirectories we still need to |
// enumerate in the breadth-first search. |