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.
5 #include "base/base_paths.h"
7 #include "base/command_line.h"
8 #include "base/files/file_path.h"
9 #include "base/files/file_util.h"
10 #include "base/files/scoped_temp_dir.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/run_loop.h"
13 #include "base/test/scoped_path_override.h"
14 #include "chrome/browser/extensions/test_extension_system.h"
15 #include "chrome/browser/media_galleries/media_folder_finder.h"
16 #include "chrome/browser/media_galleries/media_galleries_preferences.h"
17 #include "chrome/browser/media_galleries/media_galleries_preferences_factory.h"
18 #include "chrome/browser/media_galleries/media_galleries_test_util.h"
19 #include "chrome/browser/media_galleries/media_scan_manager.h"
20 #include "chrome/browser/media_galleries/media_scan_manager_observer.h"
21 #include "chrome/test/base/testing_profile.h"
22 #include "components/storage_monitor/test_storage_monitor.h"
23 #include "content/public/test/test_browser_thread_bundle.h"
24 #include "extensions/browser/extension_system.h"
25 #include "extensions/common/extension.h"
26 #include "extensions/common/permissions/media_galleries_permission.h"
27 #include "testing/gtest/include/gtest/gtest.h"
29 #if defined(OS_CHROMEOS)
30 #include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h"
31 #include "chrome/browser/chromeos/settings/cros_settings.h"
32 #include "chrome/browser/chromeos/settings/device_settings_service.h"
37 class MockMediaFolderFinder
: MediaFolderFinder
{
39 typedef base::Callback
<void(MediaFolderFinderResultsCallback
)>
40 FindFoldersStartedCallback
;
42 static MediaFolderFinder
* CreateMockMediaFolderFinder(
43 const FindFoldersStartedCallback
& started_callback
,
44 const base::Closure destruction_callback
,
45 const MediaFolderFinderResultsCallback
& callback
) {
46 return new MockMediaFolderFinder(started_callback
, destruction_callback
,
50 MockMediaFolderFinder(
51 const FindFoldersStartedCallback
& started_callback
,
52 const base::Closure destruction_callback
,
53 const MediaFolderFinderResultsCallback
& callback
)
54 : MediaFolderFinder(callback
),
55 started_callback_(started_callback
),
56 destruction_callback_(destruction_callback
),
59 virtual ~MockMediaFolderFinder() {
60 destruction_callback_
.Run();
63 virtual void StartScan() override
{
64 started_callback_
.Run(callback_
);
68 FindFoldersStartedCallback started_callback_
;
69 base::Closure destruction_callback_
;
70 MediaFolderFinderResultsCallback callback_
;
72 DISALLOW_COPY_AND_ASSIGN(MockMediaFolderFinder
);
77 class TestMediaScanManager
: public MediaScanManager
{
79 typedef base::Callback
<MediaFolderFinder
*(
80 const MediaFolderFinder::MediaFolderFinderResultsCallback
&)>
81 MediaFolderFinderFactory
;
83 explicit TestMediaScanManager(const MediaFolderFinderFactory
& factory
) {
84 SetMediaFolderFinderFactory(factory
);
86 virtual ~TestMediaScanManager() {}
89 DISALLOW_COPY_AND_ASSIGN(TestMediaScanManager
);
92 class MediaScanManagerTest
: public MediaScanManagerObserver
,
93 public testing::Test
{
95 MediaScanManagerTest()
96 : find_folders_start_count_(0),
97 find_folders_destroy_count_(0),
98 find_folders_success_(false),
99 expected_gallery_count_(0),
100 profile_(new TestingProfile()) {}
102 virtual ~MediaScanManagerTest() {
103 EXPECT_EQ(find_folders_start_count_
, find_folders_destroy_count_
);
106 virtual void SetUp() override
{
107 ASSERT_TRUE(storage_monitor::TestStorageMonitor::CreateAndInstall());
109 extensions::TestExtensionSystem
* extension_system(
110 static_cast<extensions::TestExtensionSystem
*>(
111 extensions::ExtensionSystem::Get(profile_
.get())));
112 extension_system
->CreateExtensionService(
113 CommandLine::ForCurrentProcess(), base::FilePath(), false);
116 MediaGalleriesPreferencesFactory::GetForProfile(profile_
.get());
118 gallery_prefs_
->EnsureInitialized(loop
.QuitClosure());
121 std::vector
<std::string
> read_permissions
;
122 read_permissions
.push_back(
123 extensions::MediaGalleriesPermission::kReadPermission
);
124 extension_
= AddMediaGalleriesApp("read", read_permissions
, profile_
.get());
126 ASSERT_TRUE(test_results_dir_
.CreateUniqueTempDir());
128 MockMediaFolderFinder::FindFoldersStartedCallback started_callback
=
129 base::Bind(&MediaScanManagerTest::OnFindFoldersStarted
,
130 base::Unretained(this));
131 base::Closure destruction_callback
=
132 base::Bind(&MediaScanManagerTest::OnFindFoldersDestroyed
,
133 base::Unretained(this));
134 TestMediaScanManager::MediaFolderFinderFactory factory
=
135 base::Bind(&MockMediaFolderFinder::CreateMockMediaFolderFinder
,
136 started_callback
, destruction_callback
);
137 media_scan_manager_
.reset(new TestMediaScanManager(factory
));
138 media_scan_manager_
->AddObserver(profile_
.get(), this);
141 virtual void TearDown() override
{
142 media_scan_manager_
->RemoveObserver(profile_
.get());
143 media_scan_manager_
.reset();
144 storage_monitor::TestStorageMonitor::Destroy();
147 // Create a test folder in the test specific scoped temp dir and return the
148 // final path in |full_path|.
149 void MakeTestFolder(const std::string
& root_relative_path
,
150 base::FilePath
* full_path
) {
151 ASSERT_TRUE(test_results_dir_
.IsValid());
153 test_results_dir_
.path().AppendASCII(root_relative_path
);
154 ASSERT_TRUE(base::CreateDirectory(*full_path
));
157 // Create the specified path, and add it to preferences as a gallery.
158 MediaGalleryPrefId
AddGallery(const std::string
& rel_path
,
159 MediaGalleryPrefInfo::Type type
,
163 base::FilePath full_path
;
164 MakeTestFolder(rel_path
, &full_path
);
165 MediaGalleryPrefInfo gallery_info
;
166 gallery_prefs_
->LookUpGalleryByPath(full_path
, &gallery_info
);
167 return gallery_prefs_
->AddGallery(gallery_info
.device_id
,
170 gallery_info
.volume_label
,
171 gallery_info
.vendor_name
,
172 gallery_info
.model_name
,
173 gallery_info
.total_size_in_bytes
,
174 gallery_info
.last_attach_time
,
175 audio_count
, image_count
, video_count
);
178 void SetFindFoldersResults(
180 const MediaFolderFinder::MediaFolderFinderResults
& results
) {
181 find_folders_success_
= success
;
182 find_folders_results_
= results
;
185 void SetExpectedScanResults(int gallery_count
,
186 const MediaGalleryScanResult
& file_counts
) {
187 expected_gallery_count_
= gallery_count
;
188 expected_file_counts_
= file_counts
;
192 media_scan_manager_
->StartScan(
193 profile_
.get(), extension_
.get(), true /* user_gesture */);
196 MediaGalleriesPreferences
* gallery_prefs() {
197 return gallery_prefs_
;
200 const MediaGalleriesPrefInfoMap
& known_galleries() const {
201 return gallery_prefs_
->known_galleries();
204 size_t gallery_count() const {
205 return known_galleries().size();
208 extensions::Extension
* extension() {
209 return extension_
.get();
212 int FindFoldersStartCount() {
213 return find_folders_start_count_
;
216 int FindFolderDestroyCount() {
217 return find_folders_destroy_count_
;
220 void CheckFileCounts(MediaGalleryPrefId pref_id
, int audio_count
,
221 int image_count
, int video_count
) {
222 if (!ContainsKey(known_galleries(), pref_id
)) {
226 MediaGalleriesPrefInfoMap::const_iterator pref_info
=
227 known_galleries().find(pref_id
);
228 EXPECT_EQ(audio_count
, pref_info
->second
.audio_count
);
229 EXPECT_EQ(image_count
, pref_info
->second
.image_count
);
230 EXPECT_EQ(video_count
, pref_info
->second
.video_count
);
233 // MediaScanManagerObserver implementation.
234 virtual void OnScanFinished(
235 const std::string
& extension_id
,
237 const MediaGalleryScanResult
& file_counts
) override
{
238 EXPECT_EQ(extension_
->id(), extension_id
);
239 EXPECT_EQ(expected_gallery_count_
, gallery_count
);
240 EXPECT_EQ(expected_file_counts_
.audio_count
, file_counts
.audio_count
);
241 EXPECT_EQ(expected_file_counts_
.image_count
, file_counts
.image_count
);
242 EXPECT_EQ(expected_file_counts_
.video_count
, file_counts
.video_count
);
246 // So derived tests can access ...::FindContainerScanResults().
247 MediaFolderFinder::MediaFolderFinderResults
FindContainerScanResults(
248 const MediaFolderFinder::MediaFolderFinderResults
& found_folders
,
249 const std::vector
<base::FilePath
>& sensitive_locations
) {
250 return MediaScanManager::FindContainerScanResults(found_folders
,
251 sensitive_locations
);
255 void OnFindFoldersStarted(
256 MediaFolderFinder::MediaFolderFinderResultsCallback callback
) {
257 find_folders_start_count_
++;
258 callback
.Run(find_folders_success_
, find_folders_results_
);
261 void OnFindFoldersDestroyed() {
262 find_folders_destroy_count_
++;
265 scoped_ptr
<TestMediaScanManager
> media_scan_manager_
;
267 int find_folders_start_count_
;
268 int find_folders_destroy_count_
;
269 bool find_folders_success_
;
270 MediaFolderFinder::MediaFolderFinderResults find_folders_results_
;
272 int expected_gallery_count_
;
273 MediaGalleryScanResult expected_file_counts_
;
275 base::ScopedTempDir test_results_dir_
;
277 // Needed for extension service & friends to work.
278 content::TestBrowserThreadBundle thread_bundle_
;
280 scoped_refptr
<extensions::Extension
> extension_
;
282 EnsureMediaDirectoriesExists mock_gallery_locations_
;
284 #if defined(OS_CHROMEOS)
285 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_
;
286 chromeos::ScopedTestCrosSettings test_cros_settings_
;
287 chromeos::ScopedTestUserManager test_user_manager_
;
290 storage_monitor::TestStorageMonitor monitor_
;
291 scoped_ptr
<TestingProfile
> profile_
;
292 MediaGalleriesPreferences
* gallery_prefs_
;
294 DISALLOW_COPY_AND_ASSIGN(MediaScanManagerTest
);
297 TEST_F(MediaScanManagerTest
, SingleResult
) {
298 size_t galleries_before
= gallery_count();
299 MediaGalleryScanResult file_counts
;
300 file_counts
.audio_count
= 1;
301 file_counts
.image_count
= 2;
302 file_counts
.video_count
= 3;
304 MakeTestFolder("found_media_folder", &path
);
306 MediaFolderFinder::MediaFolderFinderResults found_folders
;
307 found_folders
[path
] = file_counts
;
308 SetFindFoldersResults(true, found_folders
);
310 SetExpectedScanResults(1 /*gallery_count*/, file_counts
);
313 base::RunLoop().RunUntilIdle();
314 EXPECT_EQ(1, FindFolderDestroyCount());
315 EXPECT_EQ(galleries_before
+ 1, gallery_count());
318 // Generally test that it includes directories with sufficient density
319 // and excludes others.
322 // A/B/ - NOT included
324 // A/D/ - NOT included
329 // A/H/ - included in results
332 TEST_F(MediaScanManagerTest
, MergeRedundant
) {
334 MediaFolderFinder::MediaFolderFinderResults found_folders
;
335 std::vector
<base::FilePath
> sensitive_locations
;
336 std::vector
<base::FilePath
> expected_folders
;
337 MediaGalleryScanResult file_counts
;
338 file_counts
.audio_count
= 1;
339 file_counts
.image_count
= 2;
340 file_counts
.video_count
= 3;
341 MakeTestFolder("A", &path
);
342 MakeTestFolder("A/B", &path
);
343 MakeTestFolder("A/B/C", &path
);
344 found_folders
[path
] = file_counts
;
346 MakeTestFolder("A/D", &path
);
347 MakeTestFolder("A/D/E", &path
);
348 found_folders
[path
] = file_counts
;
349 MakeTestFolder("A/D/F", &path
);
350 found_folders
[path
] = file_counts
;
351 MakeTestFolder("A/D/G", &path
);
352 found_folders
[path
] = file_counts
;
353 MakeTestFolder("A/D/H", &path
);
354 // Dense enough to be reported.
355 MakeTestFolder("A/H", &path
);
356 expected_folders
.push_back(path
);
357 MakeTestFolder("A/H/I", &path
);
358 found_folders
[path
] = file_counts
;
359 MakeTestFolder("A/H/J", &path
);
360 found_folders
[path
] = file_counts
;
361 MediaFolderFinder::MediaFolderFinderResults results
=
362 FindContainerScanResults(found_folders
, sensitive_locations
);
363 EXPECT_EQ(expected_folders
.size(), results
.size());
364 for (std::vector
<base::FilePath
>::const_iterator it
=
365 expected_folders
.begin();
366 it
!= expected_folders
.end();
368 EXPECT_TRUE(results
.find(*it
) != results
.end());
372 // Make sure intermediates are not included.
374 // A/ - included in results
375 // A/B1/ - NOT included
377 // A/C1/ - NOT included
379 TEST_F(MediaScanManagerTest
, MergeRedundantNoIntermediates
) {
381 MediaFolderFinder::MediaFolderFinderResults found_folders
;
382 std::vector
<base::FilePath
> sensitive_locations
;
383 std::vector
<base::FilePath
> expected_folders
;
384 MediaGalleryScanResult file_counts
;
385 file_counts
.audio_count
= 1;
386 file_counts
.image_count
= 2;
387 file_counts
.video_count
= 3;
388 MakeTestFolder("A", &path
);
389 expected_folders
.push_back(path
);
390 MakeTestFolder("A/B1", &path
);
391 MakeTestFolder("A/B1/B2", &path
);
392 found_folders
[path
] = file_counts
;
393 MakeTestFolder("A/C1", &path
);
394 MakeTestFolder("A/C1/C2", &path
);
395 found_folders
[path
] = file_counts
;
396 // Make "home dir" not dense enough.
397 MakeTestFolder("D", &path
);
398 MediaFolderFinder::MediaFolderFinderResults results
=
399 FindContainerScanResults(found_folders
, sensitive_locations
);
400 EXPECT_EQ(expected_folders
.size(), results
.size());
401 for (std::vector
<base::FilePath
>::const_iterator it
=
402 expected_folders
.begin();
403 it
!= expected_folders
.end();
405 EXPECT_TRUE(results
.find(*it
) != results
.end());
409 // Make sure "A/" only gets a count of 1, from "A/D/",
410 // not 2 from "A/D/H/" and "A/D/I/".
413 // A/D/ - included in results
418 // A/D/I/ - NOT included
420 TEST_F(MediaScanManagerTest
, MergeRedundantVerifyNoOvercount
) {
422 MediaFolderFinder::MediaFolderFinderResults found_folders
;
423 std::vector
<base::FilePath
> sensitive_locations
;
424 std::vector
<base::FilePath
> expected_folders
;
425 MediaGalleryScanResult file_counts
;
426 file_counts
.audio_count
= 1;
427 file_counts
.image_count
= 2;
428 file_counts
.video_count
= 3;
429 MakeTestFolder("A", &path
);
430 MakeTestFolder("A/D", &path
);
431 expected_folders
.push_back(path
);
432 MakeTestFolder("A/D/E", &path
);
433 found_folders
[path
] = file_counts
;
434 MakeTestFolder("A/D/F", &path
);
435 found_folders
[path
] = file_counts
;
436 MakeTestFolder("A/D/G", &path
);
437 found_folders
[path
] = file_counts
;
438 MakeTestFolder("A/D/H", &path
);
439 found_folders
[path
] = file_counts
;
440 MakeTestFolder("A/D/I", &path
);
441 MakeTestFolder("A/D/I/J", &path
);
442 found_folders
[path
] = file_counts
;
443 MediaFolderFinder::MediaFolderFinderResults results
=
444 FindContainerScanResults(found_folders
, sensitive_locations
);
445 EXPECT_EQ(expected_folders
.size(), results
.size());
446 for (std::vector
<base::FilePath
>::const_iterator it
=
447 expected_folders
.begin();
448 it
!= expected_folders
.end();
450 EXPECT_TRUE(results
.find(*it
) != results
.end());
454 // Make sure that sensistive directories are pruned.
458 // A/C/ - included in results
461 // A/D/ - included in results
464 // A/E/ - included in results
467 // A/F/ - included in results
470 TEST_F(MediaScanManagerTest
, MergeRedundantWithSensitive
) {
472 MediaFolderFinder::MediaFolderFinderResults found_folders
;
473 std::vector
<base::FilePath
> sensitive_locations
;
474 std::vector
<base::FilePath
> expected_folders
;
475 MediaGalleryScanResult file_counts
;
476 file_counts
.audio_count
= 1;
477 file_counts
.image_count
= 2;
478 file_counts
.video_count
= 3;
479 MakeTestFolder("A", &path
);
480 MakeTestFolder("A/B", &path
);
481 sensitive_locations
.push_back(path
);
482 MakeTestFolder("A/C", &path
);
483 expected_folders
.push_back(path
);
484 MakeTestFolder("A/C/G", &path
);
485 found_folders
[path
] = file_counts
;
486 MakeTestFolder("A/C/H", &path
);
487 found_folders
[path
] = file_counts
;
488 MakeTestFolder("A/D", &path
);
489 expected_folders
.push_back(path
);
490 MakeTestFolder("A/D/I", &path
);
491 found_folders
[path
] = file_counts
;
492 MakeTestFolder("A/D/J", &path
);
493 found_folders
[path
] = file_counts
;
494 MakeTestFolder("A/E", &path
);
495 expected_folders
.push_back(path
);
496 MakeTestFolder("A/E/K", &path
);
497 found_folders
[path
] = file_counts
;
498 MakeTestFolder("A/E/L", &path
);
499 found_folders
[path
] = file_counts
;
500 MakeTestFolder("A/F", &path
);
501 expected_folders
.push_back(path
);
502 MakeTestFolder("A/F/M", &path
);
503 found_folders
[path
] = file_counts
;
504 MakeTestFolder("A/F/N", &path
);
505 found_folders
[path
] = file_counts
;
506 MediaFolderFinder::MediaFolderFinderResults results
=
507 FindContainerScanResults(found_folders
, sensitive_locations
);
508 EXPECT_EQ(expected_folders
.size(), results
.size());
509 for (std::vector
<base::FilePath
>::const_iterator it
=
510 expected_folders
.begin();
511 it
!= expected_folders
.end();
513 EXPECT_TRUE(results
.find(*it
) != results
.end());
517 TEST_F(MediaScanManagerTest
, Containers
) {
518 MediaGalleryScanResult file_counts
;
519 file_counts
.audio_count
= 1;
521 std::set
<base::FilePath
> expected_galleries
;
522 std::set
<base::FilePath
> bad_galleries
;
523 MediaFolderFinder::MediaFolderFinderResults found_folders
;
524 size_t galleries_before
= gallery_count();
526 // Should manifest as a gallery in result1.
527 MakeTestFolder("dir1/result1", &path
);
528 expected_galleries
.insert(path
);
529 found_folders
[path
] = file_counts
;
531 // Should manifest as a gallery in dir2.
532 MakeTestFolder("dir2/result2", &path
);
533 bad_galleries
.insert(path
);
534 found_folders
[path
] = file_counts
;
535 MakeTestFolder("dir2/result3", &path
);
536 bad_galleries
.insert(path
);
537 found_folders
[path
] = file_counts
;
538 expected_galleries
.insert(path
.DirName());
540 // Should manifest as a two galleries: result4 and result5.
541 MakeTestFolder("dir3/other", &path
);
542 bad_galleries
.insert(path
);
543 MakeTestFolder("dir3/result4", &path
);
544 expected_galleries
.insert(path
);
545 found_folders
[path
] = file_counts
;
546 MakeTestFolder("dir3/result5", &path
);
547 expected_galleries
.insert(path
);
548 found_folders
[path
] = file_counts
;
550 // Should manifest as a gallery in dir4.
551 MakeTestFolder("dir4/other", &path
);
552 bad_galleries
.insert(path
);
553 MakeTestFolder("dir4/result6", &path
);
554 bad_galleries
.insert(path
);
555 found_folders
[path
] = file_counts
;
556 MakeTestFolder("dir4/result7", &path
);
557 bad_galleries
.insert(path
);
558 found_folders
[path
] = file_counts
;
559 MakeTestFolder("dir4/result8", &path
);
560 bad_galleries
.insert(path
);
561 found_folders
[path
] = file_counts
;
562 MakeTestFolder("dir4/result9", &path
);
563 bad_galleries
.insert(path
);
564 found_folders
[path
] = file_counts
;
565 expected_galleries
.insert(path
.DirName());
567 SetFindFoldersResults(true, found_folders
);
569 file_counts
.audio_count
= 9;
570 SetExpectedScanResults(5 /*gallery_count*/, file_counts
);
573 base::RunLoop().RunUntilIdle();
574 EXPECT_EQ(1, FindFolderDestroyCount());
575 EXPECT_EQ(galleries_before
+ 5, gallery_count());
577 std::set
<base::FilePath
> found_galleries
;
578 for (MediaGalleriesPrefInfoMap::const_iterator it
= known_galleries().begin();
579 it
!= known_galleries().end();
581 found_galleries
.insert(it
->second
.AbsolutePath());
582 DCHECK(!ContainsKey(bad_galleries
, it
->second
.AbsolutePath()));
584 for (std::set
<base::FilePath
>::const_iterator it
= expected_galleries
.begin();
585 it
!= expected_galleries
.end();
587 DCHECK(ContainsKey(found_galleries
, *it
));
591 TEST_F(MediaScanManagerTest
, UpdateExistingScanResults
) {
592 size_t galleries_before
= gallery_count();
594 MediaGalleryPrefId ungranted_scan
=
595 AddGallery("uscan", MediaGalleryPrefInfo::kScanResult
, 1, 0, 0);
596 MediaGalleryPrefId granted_scan
=
597 AddGallery("gscan", MediaGalleryPrefInfo::kScanResult
, 0, 2, 0);
598 gallery_prefs()->SetGalleryPermissionForExtension(*extension(), granted_scan
,
600 EXPECT_EQ(galleries_before
+ 2, gallery_count());
602 // Run once with no scan results. "uscan" should go away and "gscan" should
603 // have its scan counts updated.
604 MediaFolderFinder::MediaFolderFinderResults found_folders
;
605 SetFindFoldersResults(true, found_folders
);
607 MediaGalleryScanResult file_counts
;
608 SetExpectedScanResults(0 /*gallery_count*/, file_counts
);
611 base::RunLoop().RunUntilIdle();
612 EXPECT_EQ(1, FindFolderDestroyCount());
613 EXPECT_EQ(galleries_before
+ 1, gallery_count());
614 CheckFileCounts(granted_scan
, 0, 0, 0);
616 MediaGalleryPrefId id
=
617 AddGallery("uscan", MediaGalleryPrefInfo::kScanResult
, 1, 1, 1);
618 EXPECT_NE(id
, ungranted_scan
);
621 // Add scan results near the existing scan results.
622 file_counts
.audio_count
= 0;
623 file_counts
.image_count
= 0;
624 file_counts
.video_count
= 7;
626 MakeTestFolder("uscan", &path
);
627 found_folders
[path
] = file_counts
;
629 file_counts
.video_count
= 11;
630 MakeTestFolder("gscan/dir1", &path
);
631 found_folders
[path
] = file_counts
;
633 MakeTestFolder("junk", &path
);
635 SetFindFoldersResults(true, found_folders
);
636 file_counts
.video_count
= 7;
637 SetExpectedScanResults(1 /*gallery_count*/, file_counts
);
640 base::RunLoop().RunUntilIdle();
641 EXPECT_EQ(2, FindFolderDestroyCount());
642 EXPECT_EQ(galleries_before
+ 2, gallery_count());
643 CheckFileCounts(granted_scan
, 0, 0, 11);
644 // The new scan result should be one more than it's previous id.
645 CheckFileCounts(ungranted_scan
+ 1, 0, 0, 7);
648 TEST_F(MediaScanManagerTest
, UpdateExistingCounts
) {
649 size_t galleries_before
= gallery_count();
651 MediaGalleryPrefId auto_id
=
652 AddGallery("auto", MediaGalleryPrefInfo::kAutoDetected
, 1, 0, 0);
653 MediaGalleryPrefId user_id
=
654 AddGallery("user", MediaGalleryPrefInfo::kUserAdded
, 0, 2, 0);
655 MediaGalleryPrefId scan_id
=
656 AddGallery("scan", MediaGalleryPrefInfo::kScanResult
, 0, 0, 3);
657 // Grant permission so this one isn't removed and readded.
658 gallery_prefs()->SetGalleryPermissionForExtension(*extension(), scan_id
,
660 CheckFileCounts(auto_id
, 1, 0, 0);
661 CheckFileCounts(user_id
, 0, 2, 0);
662 CheckFileCounts(scan_id
, 0, 0, 3);
664 MediaFolderFinder::MediaFolderFinderResults found_folders
;
665 MediaGalleryScanResult file_counts
;
666 file_counts
.audio_count
= 4;
668 MakeTestFolder("auto/dir1", &path
);
669 found_folders
[path
] = file_counts
;
671 file_counts
.audio_count
= 6;
672 MakeTestFolder("scan", &path
);
673 found_folders
[path
] = file_counts
;
675 MakeTestFolder("junk", &path
);
677 file_counts
.audio_count
= 5;
678 MakeTestFolder("user/dir2", &path
);
679 found_folders
[path
] = file_counts
;
681 SetFindFoldersResults(true, found_folders
);
683 file_counts
.audio_count
= 0;
684 SetExpectedScanResults(0 /*gallery_count*/, file_counts
);
687 base::RunLoop().RunUntilIdle();
688 EXPECT_EQ(1, FindFolderDestroyCount());
689 EXPECT_EQ(galleries_before
+ 3, gallery_count());
690 CheckFileCounts(auto_id
, 4, 0, 0);
691 CheckFileCounts(user_id
, 5, 0, 0);
692 CheckFileCounts(scan_id
, 6, 0, 0);
694 EXPECT_EQ(1U, found_folders
.erase(path
));
695 SetFindFoldersResults(true, found_folders
);
696 SetExpectedScanResults(0 /*gallery_count*/, file_counts
);
699 base::RunLoop().RunUntilIdle();
700 EXPECT_EQ(2, FindFolderDestroyCount());
701 EXPECT_EQ(galleries_before
+ 3, gallery_count());
702 CheckFileCounts(auto_id
, 4, 0, 0);
703 CheckFileCounts(user_id
, 0, 0, 0);
704 CheckFileCounts(scan_id
, 6, 0, 0);
707 TEST_F(MediaScanManagerTest
, Graylist
) {
708 size_t galleries_before
= gallery_count();
709 MediaGalleryScanResult file_counts
;
710 file_counts
.audio_count
= 1;
711 file_counts
.image_count
= 2;
712 file_counts
.video_count
= 3;
714 MakeTestFolder("found_media_folder", &path
);
715 base::ScopedPathOverride
scoped_fake_home_dir_override(base::DIR_HOME
, path
);
717 const size_t kGalleriesAdded
= 3;
718 MediaFolderFinder::MediaFolderFinderResults found_folders
;
719 MakeTestFolder("found_media_folder/dir1", &path
);
720 found_folders
[path
] = file_counts
;
721 MakeTestFolder("found_media_folder/dir2", &path
);
722 found_folders
[path
] = file_counts
;
723 MakeTestFolder("found_media_folder/dir3", &path
);
724 found_folders
[path
] = file_counts
;
725 SetFindFoldersResults(true, found_folders
);
727 file_counts
.audio_count
*= kGalleriesAdded
;
728 file_counts
.image_count
*= kGalleriesAdded
;
729 file_counts
.video_count
*= kGalleriesAdded
;
730 SetExpectedScanResults(kGalleriesAdded
, file_counts
);
733 base::RunLoop().RunUntilIdle();
734 EXPECT_EQ(1, FindFolderDestroyCount());
735 EXPECT_EQ(galleries_before
+ kGalleriesAdded
, gallery_count());