Chromium Code Reviews| Index: chrome/browser/chromeos/drive/search_metadata.cc |
| diff --git a/chrome/browser/chromeos/drive/search_metadata.cc b/chrome/browser/chromeos/drive/search_metadata.cc |
| index b82715c329eb188d214a9c2fca398f3406de34e5..eb81b642ec15084d422022c8d933050358588097 100644 |
| --- a/chrome/browser/chromeos/drive/search_metadata.cc |
| +++ b/chrome/browser/chromeos/drive/search_metadata.cc |
| @@ -33,6 +33,41 @@ bool CompareByTimestamp(const MetadataSearchResult& a, |
| return a_file_info.last_modified() > b_file_info.last_modified(); |
| } |
| +// Returns true if |entry| is eligible for the search |options| and should be |
| +// tested for the match with the query. |
| +// If SEARCH_METADATA_EXCLUDE_HOSTED_DOCUMENTS is requested, the hosted |
| +// documents are skipped. If SEARCH_METADATA_EXCLUDE_DIRECTORIES is requested, |
| +// the directories are skipped. If SEARCH_METADATA_SHARED_WITH_ME is requested, |
| +// only the entries with shared-with-me label will be tested. |
| +bool IsEligibleEntry(const DriveEntryProto& entry, int options) { |
| + if ((options & SEARCH_METADATA_EXCLUDE_HOSTED_DOCUMENTS) && |
| + entry.file_specific_info().is_hosted_document()) |
| + return false; |
| + |
| + if ((options & SEARCH_METADATA_EXCLUDE_DIRECTORIES) && |
| + entry.file_info().is_directory()) |
| + return false; |
| + |
| + if (options & SEARCH_METADATA_SHARED_WITH_ME) |
| + return entry.shared_with_me(); |
| + |
| + return true; |
| +} |
| + |
| +// Returns true if this search needs to traverse the tree under |entry|. |
| +bool ShouldReadDirectory(const DriveEntryProto& entry, int options) { |
| + // Cannot read non-directory. |
| + if (!entry.file_info().is_directory()) |
| + return false; |
| + |
| + // This is a directory. |
| + // Shared-with-me search do not go into a share-with-me directory. |
| + if (options & SEARCH_METADATA_SHARED_WITH_ME) |
| + return !entry.shared_with_me(); |
| + |
| + return true; |
| +} |
| + |
| } // namespace |
| // Helper class for searching the local resource metadata. |
| @@ -87,7 +122,7 @@ class SearchMetadataHelper { |
| base::FilePath::FromUTF8Unsafe(entry.base_name())); |
| // Recursively reading the sub directory. |
| - if (entry.file_info().is_directory()) { |
| + if (ShouldReadDirectory(entry, options_)) { |
| ++num_pending_reads_; |
| resource_metadata_->ReadDirectoryByPath( |
| current_path, |
| @@ -96,25 +131,16 @@ class SearchMetadataHelper { |
| current_path)); |
| } |
| - // Skip the hosted document if |options| has |
| - // SEARCH_METADATA_EXCLUDE_HOSTED_DOCUMENTS, which is set by |
| - // DriveFileSystem::SearchMetadata() based on the preference. |
| - if ((options_ & SEARCH_METADATA_EXCLUDE_HOSTED_DOCUMENTS) && |
| - entry.file_specific_info().is_hosted_document()) |
| - continue; |
| - |
| - // Skip the directory if SEARCH_METADATA_EXCLUDE_DIRECTORIES is requested. |
| - if ((options_ & SEARCH_METADATA_EXCLUDE_DIRECTORIES) && |
| - entry.file_info().is_directory()) |
| - continue; |
| - |
| - // Add it to the search result if the base name of the file contains |
| - // the query. |
| + // Add it to the search result if the entry is eligible for the given |
| + // |options| and matches the query. The base name of the entry must |
| + // contains |query| to match the query. |
| std::string highlighted; |
| - if (FindAndHighlight(entry.base_name(), query_, &highlighted)) { |
| + if (IsEligibleEntry(entry, options_) && |
| + FindAndHighlight(entry.base_name(), query_, &highlighted)) { |
| results_->push_back( |
| MetadataSearchResult(current_path, entry, highlighted)); |
| } |
| + |
|
yoshiki
2013/04/10 04:29:49
nit: remove
Haruki Sato
2013/04/10 04:51:13
Done.
|
| } |
| if (num_pending_reads_ == 0) { |