| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_FOLDER_FINDER_H_ | |
| 6 #define CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_FOLDER_FINDER_H_ | |
| 7 | |
| 8 #include <map> | |
| 9 #include <vector> | |
| 10 | |
| 11 #include "base/callback.h" | |
| 12 #include "base/files/file_path.h" | |
| 13 #include "base/macros.h" | |
| 14 #include "base/memory/ref_counted.h" | |
| 15 #include "base/memory/weak_ptr.h" | |
| 16 #include "base/sequenced_task_runner.h" | |
| 17 #include "chrome/browser/media_galleries/media_scan_types.h" | |
| 18 | |
| 19 // MediaFolderFinder scans local hard drives and look for folders that contain | |
| 20 // media files. | |
| 21 class MediaFolderFinder { | |
| 22 public: | |
| 23 // Key: path to a folder | |
| 24 // Value: scan results for that folder, non-recursive. | |
| 25 typedef std::map<base::FilePath, MediaGalleryScanResult> | |
| 26 MediaFolderFinderResults; | |
| 27 | |
| 28 // |results| never contains entries for |graylisted_folders_| or parent | |
| 29 // directories of |graylisted_folders_|. | |
| 30 typedef base::Callback<void(bool /*success*/, | |
| 31 const MediaFolderFinderResults& /*results*/)> | |
| 32 MediaFolderFinderResultsCallback; | |
| 33 | |
| 34 // |callback| will get called when the scan finishes. If the object is deleted | |
| 35 // before it finishes, the scan will stop and |callback| will get called with | |
| 36 // success = false. | |
| 37 // MediaFolderFinder has a default set of per-platform paths to scan. | |
| 38 // Override in tests with SetRootsForTesting(). | |
| 39 explicit MediaFolderFinder(const MediaFolderFinderResultsCallback& callback); | |
| 40 virtual ~MediaFolderFinder(); | |
| 41 | |
| 42 // Start the scan. | |
| 43 virtual void StartScan(); | |
| 44 | |
| 45 const std::vector<base::FilePath>& graylisted_folders() const; | |
| 46 | |
| 47 private: | |
| 48 friend class MediaFolderFinderTest; | |
| 49 friend class MediaGalleriesPlatformAppBrowserTest; | |
| 50 | |
| 51 class Worker; | |
| 52 struct WorkerReply { | |
| 53 WorkerReply(); | |
| 54 WorkerReply(const WorkerReply& other); | |
| 55 ~WorkerReply(); | |
| 56 | |
| 57 MediaGalleryScanResult scan_result; | |
| 58 std::vector<base::FilePath> new_folders; | |
| 59 }; | |
| 60 | |
| 61 enum ScanState { | |
| 62 SCAN_STATE_NOT_STARTED, | |
| 63 SCAN_STATE_STARTED, | |
| 64 SCAN_STATE_FINISHED, | |
| 65 }; | |
| 66 | |
| 67 void SetRootsForTesting(const std::vector<base::FilePath>& roots); | |
| 68 | |
| 69 void OnInitialized(const std::vector<base::FilePath>& roots); | |
| 70 | |
| 71 // Scan a folder from |folders_to_scan_|. | |
| 72 void ScanFolder(); | |
| 73 | |
| 74 // Callback that handles the |reply| from |worker_| for a scanned |path|. | |
| 75 void GotScanResults(const base::FilePath& path, const WorkerReply& reply); | |
| 76 | |
| 77 const MediaFolderFinderResultsCallback results_callback_; | |
| 78 MediaFolderFinderResults results_; | |
| 79 | |
| 80 std::vector<base::FilePath> graylisted_folders_; | |
| 81 std::vector<base::FilePath> folders_to_scan_; | |
| 82 ScanState scan_state_; | |
| 83 | |
| 84 scoped_refptr<base::SequencedTaskRunner> worker_task_runner_; | |
| 85 | |
| 86 // Owned by MediaFolderFinder, but lives on |worker_task_runner_|. | |
| 87 Worker* worker_; | |
| 88 | |
| 89 // Set of roots to scan for testing. | |
| 90 bool has_roots_for_testing_; | |
| 91 std::vector<base::FilePath> roots_for_testing_; | |
| 92 | |
| 93 base::WeakPtrFactory<MediaFolderFinder> weak_factory_; | |
| 94 | |
| 95 DISALLOW_COPY_AND_ASSIGN(MediaFolderFinder); | |
| 96 }; | |
| 97 | |
| 98 #endif // CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_FOLDER_FINDER_H_ | |
| OLD | NEW |