Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1030)

Unified Diff: chrome/browser/media_galleries/media_folder_finder.cc

Issue 173853007: Media Galleries: Prune uninteresting folders when scanning. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media_galleries/media_folder_finder.cc
===================================================================
--- chrome/browser/media_galleries/media_folder_finder.cc (revision 252098)
+++ chrome/browser/media_galleries/media_folder_finder.cc (working copy)
@@ -14,6 +14,7 @@
#include "base/strings/string_util.h"
#include "base/task_runner_util.h"
#include "base/threading/sequenced_worker_pool.h"
+#include "chrome/browser/extensions/api/file_system/file_system_api.h"
#include "chrome/browser/media_galleries/fileapi/media_path_filter.h"
#include "components/storage_monitor/storage_monitor.h"
#include "content/public/browser/browser_thread.h"
@@ -33,6 +34,20 @@
const int64 kMinimumAudioSize = 500 * 1024; // 500 KB
const int64 kMinimumVideoSize = 1024 * 1024; // 1 MB
+const int kPrunedPaths[] = {
+ base::DIR_CACHE,
+ base::DIR_TEMP,
vandebo (ex-Chrome) 2014/02/20 23:00:23 It's not clear that we want to prune the temp dir.
Lei Zhang 2014/02/20 23:04:52 On Windows, it's buried and not easily accessible
+#if defined(OS_WIN)
+ base::DIR_IE_INTERNET_CACHE,
+ base::DIR_PROGRAM_FILES,
+ base::DIR_PROGRAM_FILESX86,
+ base::DIR_WINDOWS,
+#endif
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+ DIR_USER_LIBRARY,
+#endif
+};
+
bool IsValidScanPath(const base::FilePath& path) {
return !path.empty() && path.IsAbsolute();
}
@@ -146,13 +161,16 @@
// SequencedTaskRunner.
class MediaFolderFinder::Worker {
public:
- Worker();
+ explicit Worker(const std::vector<base::FilePath>& graylisted_folders);
~Worker();
// Scans |path| and return the results.
WorkerReply ScanFolder(const base::FilePath& path);
private:
+ const std::vector<base::FilePath> graylisted_folders_;
+ std::vector<base::FilePath> pruned_folders_;
+
scoped_ptr<MediaPathFilter> filter_;
base::SequenceChecker sequence_checker_;
@@ -160,9 +178,18 @@
DISALLOW_COPY_AND_ASSIGN(Worker);
};
-MediaFolderFinder::Worker::Worker() {
+MediaFolderFinder::Worker::Worker(
+ const std::vector<base::FilePath>& graylisted_folders)
+ : graylisted_folders_(graylisted_folders),
+ filter_(new MediaPathFilter) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- filter_.reset(new MediaPathFilter);
+
+ for (size_t i = 0; i < arraysize(kPrunedPaths); ++i) {
+ base::FilePath path;
+ if (PathService::Get(kPrunedPaths[i], &path))
+ pruned_folders_.push_back(path);
+ }
+
sequence_checker_.DetachFromSequence();
}
@@ -177,6 +204,15 @@
WorkerReply reply;
bool folder_meets_size_requirement = false;
+ bool is_graylisted_folder = false;
+ for (size_t i = 0; i < graylisted_folders_.size(); ++i) {
+ if (path == graylisted_folders_[i] ||
+ path.IsParent(graylisted_folders_[i])) {
+ is_graylisted_folder = true;
+ break;
+ }
+ }
+
base::FileEnumerator enumerator(
path,
false, /* recursive? */
@@ -184,17 +220,33 @@
#if defined(OS_POSIX)
| base::FileEnumerator::SHOW_SYM_LINKS // show symlinks, not follow.
#endif
- );
+ ); // NOLINT
while (!enumerator.Next().empty()) {
base::FileEnumerator::FileInfo file_info = enumerator.GetInfo();
base::FilePath full_path = path.Append(file_info.GetName());
if (MediaPathFilter::ShouldSkip(full_path))
continue;
+ // * Enumerating a directory.
vandebo (ex-Chrome) 2014/02/20 23:00:23 nit: remove *
if (file_info.IsDirectory()) {
- reply.new_folders.push_back(full_path);
+ bool is_pruned_folder = false;
+ for (size_t i = 0; i < pruned_folders_.size(); ++i) {
+ if (full_path == pruned_folders_[i]) {
+ is_pruned_folder = true;
+ break;
+ }
+ }
+
+ if (!is_pruned_folder)
+ reply.new_folders.push_back(full_path);
continue;
}
+
+ // * Enumerating a file.
vandebo (ex-Chrome) 2014/02/20 23:00:23 ditto
+ // Do not include scan results for graylisted folders.
+ if (is_graylisted_folder)
+ continue;
+
MediaGalleryScanFileType type = filter_->GetType(full_path);
if (type == MEDIA_GALLERY_SCAN_FILE_TYPE_UNKNOWN)
continue;
@@ -214,8 +266,10 @@
MediaFolderFinder::MediaFolderFinder(
const MediaFolderFinderResultsCallback& callback)
: results_callback_(callback),
+ graylisted_folders_(
+ extensions::file_system_api::GetGrayListedDirectories()),
scan_state_(SCAN_STATE_NOT_STARTED),
- worker_(new Worker()),
+ worker_(new Worker(graylisted_folders_)),
has_roots_for_testing_(false),
weak_factory_(this) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -233,7 +287,10 @@
return;
MediaFolderFinderResults empty_results;
- results_callback_.Run(false /* success? */, empty_results);
+ std::vector<base::FilePath> empty_sensitive_locations;
+ results_callback_.Run(false /* success? */,
+ empty_results,
+ empty_sensitive_locations);
}
void MediaFolderFinder::StartScan() {
@@ -304,7 +361,7 @@
if (folders_to_scan_.empty()) {
scan_state_ = SCAN_STATE_FINISHED;
- results_callback_.Run(true /* success? */, results_);
+ results_callback_.Run(true /* success? */, results_, graylisted_folders_);
return;
}

Powered by Google App Engine
This is Rietveld 408576698