| Index: chrome/browser/media_galleries/media_scan_manager.cc
|
| ===================================================================
|
| --- chrome/browser/media_galleries/media_scan_manager.cc (revision 253526)
|
| +++ chrome/browser/media_galleries/media_scan_manager.cc (working copy)
|
| @@ -212,14 +212,38 @@
|
| // may be to contain media directories. This function tries to find those
|
| // immediate container directories.
|
| MediaFolderFinder::MediaFolderFinderResults FindContainerScanResults(
|
| - const MediaFolderFinder::MediaFolderFinderResults& found_folders) {
|
| + const MediaFolderFinder::MediaFolderFinderResults& found_folders,
|
| + const std::vector<base::FilePath>& sensitive_locations) {
|
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
|
| + std::vector<base::FilePath> abs_sensitive_locations;
|
| + for (size_t i = 0; i < sensitive_locations.size(); ++i) {
|
| + base::FilePath path = base::MakeAbsoluteFilePath(sensitive_locations[i]);
|
| + if (!path.empty())
|
| + abs_sensitive_locations.push_back(path);
|
| + }
|
| // Count the number of scan results with the same parent directory.
|
| typedef std::map<base::FilePath, int /*count*/> ContainerCandidates;
|
| ContainerCandidates candidates;
|
| for (MediaFolderFinder::MediaFolderFinderResults::const_iterator it =
|
| found_folders.begin(); it != found_folders.end(); ++it) {
|
| base::FilePath parent_directory = it->first.DirName();
|
| +
|
| + // Skip sensitive folders and their ancestors.
|
| + bool is_sensitive = false;
|
| + base::FilePath abs_parent_directory =
|
| + base::MakeAbsoluteFilePath(parent_directory);
|
| + if (abs_parent_directory.empty())
|
| + continue;
|
| + for (size_t i = 0; i < abs_sensitive_locations.size(); ++i) {
|
| + if (abs_parent_directory == abs_sensitive_locations[i] ||
|
| + abs_parent_directory.IsParent(abs_sensitive_locations[i])) {
|
| + is_sensitive = true;
|
| + continue;
|
| + }
|
| + }
|
| + if (is_sensitive)
|
| + continue;
|
| +
|
| ContainerCandidates::iterator existing = candidates.find(parent_directory);
|
| if (existing == candidates.end()) {
|
| candidates[parent_directory] = 1;
|
| @@ -252,11 +276,6 @@
|
| return result;
|
| }
|
|
|
| -void RemoveSensitiveLocations(
|
| - MediaFolderFinder::MediaFolderFinderResults* found_folders) {
|
| - // TODO(vandebo) Use the greylist from filesystem api.
|
| -}
|
| -
|
| int CountScanResultsForExtension(MediaGalleriesPreferences* preferences,
|
| const extensions::Extension* extension,
|
| MediaGalleryScanResult* file_counts) {
|
| @@ -444,9 +463,12 @@
|
|
|
| content::BrowserThread::PostTaskAndReplyWithResult(
|
| content::BrowserThread::FILE, FROM_HERE,
|
| - base::Bind(FindContainerScanResults, found_folders),
|
| + base::Bind(FindContainerScanResults,
|
| + found_folders,
|
| + folder_finder_->graylisted_folders()),
|
| base::Bind(&MediaScanManager::OnFoundContainerDirectories,
|
| - weak_factory_.GetWeakPtr(), found_folders));
|
| + weak_factory_.GetWeakPtr(),
|
| + found_folders));
|
| }
|
|
|
| void MediaScanManager::OnFoundContainerDirectories(
|
| @@ -456,8 +478,6 @@
|
| folders.insert(found_folders.begin(), found_folders.end());
|
| folders.insert(container_folders.begin(), container_folders.end());
|
|
|
| - RemoveSensitiveLocations(&folders);
|
| -
|
| for (ScanObserverMap::iterator scans_for_profile = observers_.begin();
|
| scans_for_profile != observers_.end();
|
| ++scans_for_profile) {
|
|
|