media_galleries_preferences_unittest.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MediaGalleriesPreferences unit tests.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_preferences.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/run_loop.h"
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/test_extension_system.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_file_system_registry.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_test_util.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/storage_monitor/media_storage_util.h"
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/storage_monitor/storage_monitor.h"
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/storage_monitor/test_storage_monitor.h"
22ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h"
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h"
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h"
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/manifest_handlers/background_info.h"
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/common/permissions/media_galleries_permission.h"
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "grit/generated_resources.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/api/string_ordinal.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/base/l10n/l10n_util.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS)
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h"
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h"
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h"
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16;
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using storage_monitor::MediaStorageUtil;
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using storage_monitor::StorageInfo;
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using storage_monitor::TestStorageMonitor;
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockGalleryChangeObserver
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : public MediaGalleriesPreferences::GalleryChangeObserver {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit MockGalleryChangeObserver(MediaGalleriesPreferences* pref)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      : pref_(pref),
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        notifications_(0) {}
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~MockGalleryChangeObserver() {}
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int notifications() const { return notifications_;}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // MediaGalleriesPreferences::GalleryChangeObserver implementation.
57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void OnPermissionAdded(MediaGalleriesPreferences* pref,
58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                 const std::string& extension_id,
59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                 MediaGalleryPrefId pref_id) OVERRIDE {
60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    EXPECT_EQ(pref_, pref);
61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    ++notifications_;
62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void OnPermissionRemoved(MediaGalleriesPreferences* pref,
65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                   const std::string& extension_id,
66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                   MediaGalleryPrefId pref_id) OVERRIDE {
67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    EXPECT_EQ(pref_, pref);
68d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    ++notifications_;
69d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
70d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
71d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void OnGalleryAdded(MediaGalleriesPreferences* pref,
72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                              MediaGalleryPrefId pref_id) OVERRIDE {
73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    EXPECT_EQ(pref_, pref);
74d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    ++notifications_;
75d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
76d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
77d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void OnGalleryRemoved(MediaGalleriesPreferences* pref,
78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                MediaGalleryPrefId pref_id) OVERRIDE {
79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    EXPECT_EQ(pref_, pref);
80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    ++notifications_;
81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void OnGalleryInfoUpdated(MediaGalleriesPreferences* pref,
84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                    MediaGalleryPrefId pref_id) OVERRIDE {
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(pref_, pref);
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ++notifications_;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MediaGalleriesPreferences* pref_;
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int notifications_;
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MockGalleryChangeObserver);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MediaGalleriesPreferencesTest : public testing::Test {
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::map<std::string /*device id*/, MediaGalleryPrefIdSet>
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      DeviceIdPrefIdsMap;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MediaGalleriesPreferencesTest()
103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      : profile_(new TestingProfile()),
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        default_galleries_count_(0) {
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~MediaGalleriesPreferencesTest() {
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
111d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    ASSERT_TRUE(TestStorageMonitor::CreateAndInstall());
112558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions::TestExtensionSystem* extension_system(
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        static_cast<extensions::TestExtensionSystem*>(
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            extensions::ExtensionSystem::Get(profile_.get())));
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    extension_system->CreateExtensionService(
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        CommandLine::ForCurrentProcess(), base::FilePath(), false);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gallery_prefs_.reset(new MediaGalleriesPreferences(profile_.get()));
1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    base::RunLoop loop;
1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    gallery_prefs_->EnsureInitialized(loop.QuitClosure());
1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    loop.Run();
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Load the default galleries into the expectations.
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const MediaGalleriesPrefInfoMap& known_galleries =
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        gallery_prefs_->known_galleries();
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (known_galleries.size()) {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_EQ(3U, known_galleries.size());
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      default_galleries_count_ = 3;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MediaGalleriesPrefInfoMap::const_iterator it;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (it = known_galleries.begin(); it != known_galleries.end(); ++it) {
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        expected_galleries_[it->first] = it->second;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (it->second.type == MediaGalleryPrefInfo::kAutoDetected)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          expected_galleries_for_all.insert(it->first);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<std::string> all_permissions;
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    all_permissions.push_back(
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        extensions::MediaGalleriesPermission::kReadPermission);
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    all_permissions.push_back(
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        extensions::MediaGalleriesPermission::kAllAutoDetectedPermission);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<std::string> read_permissions;
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    read_permissions.push_back(
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        extensions::MediaGalleriesPermission::kReadPermission);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    all_permission_extension =
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        AddMediaGalleriesApp("all", all_permissions, profile_.get());
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    regular_permission_extension =
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        AddMediaGalleriesApp("regular", read_permissions, profile_.get());
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    no_permissions_extension =
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        AddMediaGalleriesApp("no", read_permissions, profile_.get());
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Verify();
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    TestStorageMonitor::Destroy();
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Verify() {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const MediaGalleriesPrefInfoMap& known_galleries =
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        gallery_prefs_->known_galleries();
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected_galleries_.size(), known_galleries.size());
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (MediaGalleriesPrefInfoMap::const_iterator it = known_galleries.begin();
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         it != known_galleries.end();
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         ++it) {
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      VerifyGalleryInfo(it->second, it->first);
1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      if (it->second.type != MediaGalleryPrefInfo::kAutoDetected &&
1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          it->second.type != MediaGalleryPrefInfo::kBlackListed) {
1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if (!ContainsKey(expected_galleries_for_all, it->first) &&
1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            !ContainsKey(expected_galleries_for_regular, it->first)) {
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          EXPECT_FALSE(gallery_prefs_->NonAutoGalleryHasPermission(it->first));
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        } else {
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          EXPECT_TRUE(gallery_prefs_->NonAutoGalleryHasPermission(it->first));
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      }
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (DeviceIdPrefIdsMap::const_iterator it = expected_device_map.begin();
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         it != expected_device_map.end();
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         ++it) {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MediaGalleryPrefIdSet actual_id_set =
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          gallery_prefs_->LookUpGalleriesByDeviceId(it->first);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      EXPECT_EQ(it->second, actual_id_set);
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::set<MediaGalleryPrefId> galleries_for_all =
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        gallery_prefs_->GalleriesForExtension(*all_permission_extension.get());
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected_galleries_for_all, galleries_for_all);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::set<MediaGalleryPrefId> galleries_for_regular =
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        gallery_prefs_->GalleriesForExtension(
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            *regular_permission_extension.get());
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected_galleries_for_regular, galleries_for_regular);
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::set<MediaGalleryPrefId> galleries_for_no =
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        gallery_prefs_->GalleriesForExtension(*no_permissions_extension.get());
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(0U, galleries_for_no.size());
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void VerifyGalleryInfo(const MediaGalleryPrefInfo& actual,
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         MediaGalleryPrefId expected_id) const {
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MediaGalleriesPrefInfoMap::const_iterator in_expectation =
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      expected_galleries_.find(expected_id);
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_FALSE(in_expectation == expected_galleries_.end())  << expected_id;
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(in_expectation->second.pref_id, actual.pref_id);
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(in_expectation->second.display_name, actual.display_name);
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(in_expectation->second.device_id, actual.device_id);
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(in_expectation->second.path.value(), actual.path.value());
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(in_expectation->second.type, actual.type);
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    EXPECT_EQ(in_expectation->second.audio_count, actual.audio_count);
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    EXPECT_EQ(in_expectation->second.image_count, actual.image_count);
2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    EXPECT_EQ(in_expectation->second.video_count, actual.video_count);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MediaGalleriesPreferences* gallery_prefs() {
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return gallery_prefs_.get();
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint64 default_galleries_count() {
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return default_galleries_count_;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void AddGalleryExpectation(MediaGalleryPrefId id, base::string16 display_name,
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             std::string device_id,
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             base::FilePath relative_path,
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             MediaGalleryPrefInfo::Type type) {
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_galleries_[id].pref_id = id;
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_galleries_[id].display_name = display_name;
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_galleries_[id].device_id = device_id;
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_galleries_[id].path = relative_path.NormalizePathSeparators();
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_galleries_[id].type = type;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (type == MediaGalleryPrefInfo::kAutoDetected)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      expected_galleries_for_all.insert(id);
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_device_map[device_id].insert(id);
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void AddScanResultExpectation(MediaGalleryPrefId id,
2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                base::string16 display_name,
2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                std::string device_id,
2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                base::FilePath relative_path,
2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                int audio_count,
2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                int image_count,
2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                int video_count) {
2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    AddGalleryExpectation(id, display_name, device_id, relative_path,
2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                          MediaGalleryPrefInfo::kScanResult);
2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    expected_galleries_[id].audio_count = audio_count;
2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    expected_galleries_[id].image_count = image_count;
2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    expected_galleries_[id].video_count = video_count;
2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MediaGalleryPrefId AddGalleryWithNameV0(const std::string& device_id,
255a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                          const base::string16& display_name,
256868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                          const base::FilePath& relative_path,
257868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                          bool user_added) {
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    MediaGalleryPrefInfo::Type type =
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        user_added ? MediaGalleryPrefInfo::kUserAdded
2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   : MediaGalleryPrefInfo::kAutoDetected;
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return gallery_prefs()->AddGalleryInternal(
2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        device_id, display_name, relative_path, type,
263a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        base::string16(), base::string16(), base::string16(), 0, base::Time(),
2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        false, 0, 0, 0, 0);
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MediaGalleryPrefId AddGalleryWithNameV1(const std::string& device_id,
268a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                          const base::string16& display_name,
2697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                          const base::FilePath& relative_path,
2707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                          bool user_added) {
2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    MediaGalleryPrefInfo::Type type =
2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        user_added ? MediaGalleryPrefInfo::kUserAdded
2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   : MediaGalleryPrefInfo::kAutoDetected;
2747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return gallery_prefs()->AddGalleryInternal(
2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        device_id, display_name, relative_path, type,
276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        base::string16(), base::string16(), base::string16(), 0, base::Time(),
2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        false, 0, 0, 0, 1);
2787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
2797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
2807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MediaGalleryPrefId AddGalleryWithNameV2(const std::string& device_id,
281a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                          const base::string16& display_name,
2827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                          const base::FilePath& relative_path,
2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                          MediaGalleryPrefInfo::Type type) {
2847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return gallery_prefs()->AddGalleryInternal(
2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        device_id, display_name, relative_path, type,
286a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        base::string16(), base::string16(), base::string16(), 0, base::Time(),
2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        false, 0, 0, 0, 2);
2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaGalleryPrefId AddFixedGalleryWithExepectation(
2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& path_name, const std::string& name,
2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      MediaGalleryPrefInfo::Type type) {
2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::FilePath path = MakeMediaGalleriesTestingPath(path_name);
2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    StorageInfo info;
2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::FilePath relative_path;
2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
297a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    base::string16 gallery_name = base::ASCIIToUTF16(name);
298a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    MediaGalleryPrefId id = AddGalleryWithNameV2(info.device_id(), gallery_name,
2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                relative_path, type);
300a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                          type);
3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    Verify();
3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return id;
3047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
3057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
3067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  bool UpdateDeviceIDForSingletonType(const std::string& device_id) {
3077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return gallery_prefs()->UpdateDeviceIDForSingletonType(device_id);
3087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
3097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<extensions::Extension> all_permission_extension;
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<extensions::Extension> regular_permission_extension;
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<extensions::Extension> no_permissions_extension;
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<MediaGalleryPrefId> expected_galleries_for_all;
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<MediaGalleryPrefId> expected_galleries_for_regular;
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DeviceIdPrefIdsMap expected_device_map;
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MediaGalleriesPrefInfoMap expected_galleries_;
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Needed for extension service & friends to work.
323ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  content::TestBrowserThreadBundle thread_bundle_;
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EnsureMediaDirectoriesExists mock_gallery_locations_;
3261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS)
328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  chromeos::ScopedTestCrosSettings test_cros_settings_;
330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  chromeos::ScopedTestUserManager test_user_manager_;
331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
333d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  TestStorageMonitor monitor_;
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestingProfile> profile_;
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<MediaGalleriesPreferences> gallery_prefs_;
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint64 default_galleries_count_;
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MediaGalleriesPreferencesTest);
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, GalleryManagement) {
3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaGalleryPrefId auto_id, user_added_id, scan_id, id;
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath relative_path;
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a new auto detected gallery.
3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_auto");
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StorageInfo info;
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
352a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::string16 gallery_name = base::ASCIIToUTF16("NewAutoGallery");
353a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
354a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kAutoDetected);
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, id);
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  auto_id = id;
357a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Add it as other types, nothing should happen.
362a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
363a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kUserAdded);
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(auto_id, id);
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
366a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
367a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kAutoDetected);
3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(auto_id, id);
3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
370a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kScanResult);
3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(auto_id, id);
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a new user added gallery.
3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_user");
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
377a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("NewUserGallery");
378a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
379a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kUserAdded);
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 2UL, id);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  user_added_id = id;
3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const std::string user_added_device_id = info.device_id();
383a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kUserAdded);
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Add it as other types, nothing should happen.
388a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
389a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kUserAdded);
3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(user_added_id, id);
3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
392a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
393a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kAutoDetected);
3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(user_added_id, id);
3955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
396a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
397a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kScanResult);
3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(user_added_id, id);
3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Add a new scan result gallery.
4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_scan");
4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("NewScanGallery");
405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kScanResult);
4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 3UL, id);
4085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scan_id = id;
409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        MediaGalleryPrefInfo::kScanResult);
4115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Add it as other types, nothing should happen.
414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kUserAdded);
4165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(scan_id, id);
4175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
418a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
419a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kAutoDetected);
4205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(scan_id, id);
4215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
422a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
423a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kScanResult);
4245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(scan_id, id);
4255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
4265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Lookup some galleries.
4285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(
4295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      MakeMediaGalleriesTestingPath("new_auto"), NULL));
4305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(
4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      MakeMediaGalleriesTestingPath("new_user"), NULL));
4325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(
4335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      MakeMediaGalleriesTestingPath("new_scan"), NULL));
4345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(gallery_prefs()->LookUpGalleryByPath(
4355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      MakeMediaGalleriesTestingPath("other"), NULL));
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check that we always get the gallery info.
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MediaGalleryPrefInfo gallery_info;
4395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(
4405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      MakeMediaGalleriesTestingPath("new_auto"), &gallery_info));
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  VerifyGalleryInfo(gallery_info, auto_id);
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(gallery_info.volume_metadata_valid);
4435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(
4445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      MakeMediaGalleriesTestingPath("new_user"), &gallery_info));
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  VerifyGalleryInfo(gallery_info, user_added_id);
4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(gallery_info.volume_metadata_valid);
4475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(
4485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      MakeMediaGalleriesTestingPath("new_scan"), &gallery_info));
4495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VerifyGalleryInfo(gallery_info, scan_id);
4505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(gallery_info.volume_metadata_valid);
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("other");
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(gallery_prefs()->LookUpGalleryByPath(path, &gallery_info));
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(kInvalidMediaGalleryPrefId, gallery_info.pref_id);
4557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StorageInfo other_info;
45790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &other_info, &relative_path);
45890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(other_info.device_id(), gallery_info.device_id);
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(relative_path.value(), gallery_info.path.value());
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Remove an auto added gallery (i.e. make it blacklisted).
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->ForgetGalleryById(auto_id);
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_[auto_id].type = MediaGalleryPrefInfo::kBlackListed;
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_all.erase(auto_id);
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Remove a scan result (i.e. make it blacklisted).
4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->ForgetGalleryById(scan_id);
4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_[scan_id].type = MediaGalleryPrefInfo::kRemovedScan;
4705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Remove a user added gallery and it should go away.
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->ForgetGalleryById(user_added_id);
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_.erase(user_added_id);
4755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_device_map[user_added_device_id].erase(user_added_id);
4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
4775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
4785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, ForgetAndErase) {
4805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaGalleryPrefId user_erase =
4815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      AddFixedGalleryWithExepectation("user_erase", "UserErase",
4825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     MediaGalleryPrefInfo::kUserAdded);
4835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, user_erase);
4845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaGalleryPrefId user_forget =
4855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      AddFixedGalleryWithExepectation("user_forget", "UserForget",
4865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                      MediaGalleryPrefInfo::kUserAdded);
4875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 2UL, user_forget);
4885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaGalleryPrefId auto_erase =
4905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      AddFixedGalleryWithExepectation("auto_erase", "AutoErase",
4915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                      MediaGalleryPrefInfo::kAutoDetected);
4925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 3UL, auto_erase);
4935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaGalleryPrefId auto_forget =
4945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      AddFixedGalleryWithExepectation("auto_forget", "AutoForget",
4955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                      MediaGalleryPrefInfo::kAutoDetected);
4965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 4UL, auto_forget);
4975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaGalleryPrefId scan_erase =
4995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      AddFixedGalleryWithExepectation("scan_erase", "ScanErase",
5005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                      MediaGalleryPrefInfo::kScanResult);
5015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 5UL, scan_erase);
5025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaGalleryPrefId scan_forget =
5035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      AddFixedGalleryWithExepectation("scan_forget", "ScanForget",
5045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                      MediaGalleryPrefInfo::kScanResult);
5055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 6UL, scan_forget);
5065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
5085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string device_id;
5095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->ForgetGalleryById(user_forget);
5115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  device_id = expected_galleries_[user_forget].device_id;
5125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_.erase(user_forget);
5135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_device_map[device_id].erase(user_forget);
5145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
5155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->ForgetGalleryById(auto_forget);
5175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_[auto_forget].type = MediaGalleryPrefInfo::kBlackListed;
5185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_for_all.erase(auto_forget);
5195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
5205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->ForgetGalleryById(scan_forget);
5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_[scan_forget].type = MediaGalleryPrefInfo::kRemovedScan;
5235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
5245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->EraseGalleryById(user_erase);
5265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  device_id = expected_galleries_[user_erase].device_id;
5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_.erase(user_erase);
5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_device_map[device_id].erase(user_erase);
5295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
5305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->EraseGalleryById(auto_erase);
5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  device_id = expected_galleries_[auto_erase].device_id;
5335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_.erase(auto_erase);
5345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_device_map[device_id].erase(auto_erase);
5355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_for_all.erase(auto_erase);
5365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
5375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->EraseGalleryById(scan_erase);
5395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  device_id = expected_galleries_[scan_erase].device_id;
5405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_.erase(scan_erase);
5415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_device_map[device_id].erase(scan_erase);
5425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
5435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Also erase the previously forgetten ones to check erasing blacklisted ones.
5455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->EraseGalleryById(auto_forget);
5465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  device_id = expected_galleries_[auto_forget].device_id;
5475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_.erase(auto_forget);
5485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_device_map[device_id].erase(auto_forget);
5495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
5505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->EraseGalleryById(scan_forget);
5525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  device_id = expected_galleries_[scan_forget].device_id;
5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_.erase(scan_forget);
5545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_device_map[device_id].erase(scan_forget);
5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Verify();
5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, AddGalleryWithVolumeMetadata) {
5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MediaGalleryPrefId id;
5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StorageInfo info;
5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath relative_path;
5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time now = base::Time::Now();
5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Verify();
5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Add a new auto detected gallery.
5675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_auto");
56890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
56990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  id = gallery_prefs()->AddGallery(info.device_id(), relative_path,
5705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   MediaGalleryPrefInfo::kAutoDetected,
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   ASCIIToUTF16("volume label"),
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   ASCIIToUTF16("vendor name"),
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   ASCIIToUTF16("model name"),
5745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   1000000ULL, now, 0, 0, 0);
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, id);
576a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  AddGalleryExpectation(id, base::string16(), info.device_id(), relative_path,
5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Verify();
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MediaGalleryPrefInfo gallery_info;
5815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(
5825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      MakeMediaGalleriesTestingPath("new_auto"), &gallery_info));
5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(gallery_info.volume_metadata_valid);
5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("volume label"), gallery_info.volume_label);
5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("vendor name"), gallery_info.vendor_name);
5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("model name"), gallery_info.model_name);
5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1000000ULL, gallery_info.total_size_in_bytes);
5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Note: we put the microseconds time into a double, so there'll
5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // be some possible rounding errors. If it's less than 100, we don't
5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // care.
591a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_LE(std::abs(now.ToInternalValue() -
592a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                     gallery_info.last_attach_time.ToInternalValue()),
593a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            100);
5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, ReplaceGalleryWithVolumeMetadata) {
5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MediaGalleryPrefId id, metadata_id;
5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StorageInfo info;
6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath relative_path;
6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time now = base::Time::Now();
6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Verify();
6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Add an auto detected gallery in the prefs version 0 format.
6055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_auto");
60690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
607a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::string16 gallery_name = base::ASCIIToUTF16("NewAutoGallery");
608a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV0(info.device_id(), gallery_name, relative_path,
609a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            false /*auto*/);
6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, id);
611a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Verify();
6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
61590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  metadata_id = gallery_prefs()->AddGallery(info.device_id(),
6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            relative_path,
6175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                            MediaGalleryPrefInfo::kAutoDetected,
6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            ASCIIToUTF16("volume label"),
6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            ASCIIToUTF16("vendor name"),
6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            ASCIIToUTF16("model name"),
6215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                            1000000ULL, now, 0, 0, 0);
6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(id, metadata_id);
623a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  AddGalleryExpectation(id, base::string16(), info.device_id(), relative_path,
6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Make sure the display_name is set to empty now, as the metadata
6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // upgrade should set the manual override name empty.
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Whenever an "AutoDetected" gallery is removed, it is moved to a black listed
6325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// state.  When the gallery is added again, the black listed state is updated
6335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// back to the "AutoDetected" type.
6345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, AutoAddedBlackListing) {
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MediaGalleryPrefId auto_id, id;
6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StorageInfo info;
6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath relative_path;
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a new auto detect gallery to test with.
6425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_auto");
64390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
644a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::string16 gallery_name = base::ASCIIToUTF16("NewAutoGallery");
645a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV1(info.device_id(), gallery_name,
6467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            relative_path, false /*auto*/);
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, id);
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  auto_id = id;
649a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Remove an auto added gallery (i.e. make it blacklisted).
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->ForgetGalleryById(auto_id);
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_[auto_id].type = MediaGalleryPrefInfo::kBlackListed;
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_all.erase(auto_id);
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Try adding the gallery again automatically and it should be a no-op.
660a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV1(info.device_id(), gallery_name, relative_path,
661a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            false /*auto*/);
6625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(auto_id, id);
6635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
6645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Add the gallery again as a user action.
6665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  id = gallery_prefs()->AddGalleryByPath(path,
6675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         MediaGalleryPrefInfo::kUserAdded);
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(auto_id, id);
669a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
6725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Whenever a "ScanResult" gallery is removed, it is moved to a black listed
6755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// state.  When the gallery is added again, the black listed state is updated
6765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// back to the "ScanResult" type.
6775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, ScanResultBlackListing) {
6785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaGalleryPrefId scan_id, id;
6795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::FilePath path;
6805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  StorageInfo info;
6815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::FilePath relative_path;
6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Verify();
6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Add a new scan result gallery to test with.
6855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_scan");
6865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
687a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::string16 gallery_name = base::ASCIIToUTF16("NewScanGallery");
688a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
689a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kScanResult);
6905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, id);
6915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scan_id = id;
692a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
6935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        MediaGalleryPrefInfo::kScanResult);
6945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
6955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
6965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Remove a scan result gallery (i.e. make it blacklisted).
6975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->ForgetGalleryById(scan_id);
6985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_[scan_id].type = MediaGalleryPrefInfo::kRemovedScan;
6995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_for_all.erase(scan_id);
7005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
7015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
7025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Try adding the gallery again as a scan result it should be a no-op.
703a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
704a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kScanResult);
7055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(scan_id, id);
7065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
7075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
7085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Add the gallery again as a user action.
7095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  id = gallery_prefs()->AddGalleryByPath(path,
7105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         MediaGalleryPrefInfo::kUserAdded);
7115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(scan_id, id);
712a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
7135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        MediaGalleryPrefInfo::kUserAdded);
7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Verify();
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, UpdateGalleryNameV2) {
7187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Add a new auto detect gallery to test with.
7195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::FilePath path = MakeMediaGalleriesTestingPath("new_auto");
7207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StorageInfo info;
7217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::FilePath relative_path;
7227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
723a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::string16 gallery_name = base::ASCIIToUTF16("NewAutoGallery");
7247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MediaGalleryPrefId id =
725a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
726a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                           MediaGalleryPrefInfo::kAutoDetected);
727a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
7287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
7297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Verify();
7307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
7317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Won't override the name -- don't change any expectation.
732a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::string16();
733a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
7345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                       MediaGalleryPrefInfo::kAutoDetected);
7357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Verify();
7367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
737a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("NewName");
738a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
739a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kAutoDetected);
7407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Note: will really just update the existing expectation.
741a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
7427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
7437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Verify();
7447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
7457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, GalleryPermissions) {
7475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaGalleryPrefId auto_id, user_added_id, to_blacklist_id, scan_id,
7485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     to_scan_remove_id, id;
7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StorageInfo info;
7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath relative_path;
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add some galleries to test with.
7555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_user");
75690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
757a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::string16 gallery_name = base::ASCIIToUTF16("NewUserGallery");
758a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV1(info.device_id(), gallery_name, relative_path,
759a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            true /*user*/);
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, id);
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  user_added_id = id;
762a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kUserAdded);
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_auto");
76790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
768a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("NewAutoGallery");
769a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV1(info.device_id(), gallery_name, relative_path,
770a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            false /*auto*/);
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 2UL, id);
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  auto_id = id;
773a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("to_blacklist");
77890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
779a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("ToBlacklistGallery");
780a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV1(info.device_id(), gallery_name, relative_path,
781a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            false /*auto*/);
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 3UL, id);
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  to_blacklist_id = id;
784a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_scan");
7895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
790a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("NewScanGallery");
791a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
792a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kScanResult);
7935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 4UL, id);
7945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scan_id = id;
795a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
7965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        MediaGalleryPrefInfo::kScanResult);
7975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
7985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
7995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("to_scan_remove");
8005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
801a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("ToScanRemoveGallery");
802a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
803a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            MediaGalleryPrefInfo::kScanResult);
8045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 5UL, id);
8055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  to_scan_remove_id = id;
806a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
8075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        MediaGalleryPrefInfo::kScanResult);
8085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
8095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Remove permission for all galleries from the all-permission extension.
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *all_permission_extension.get(), auto_id, false);
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_all.erase(auto_id);
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *all_permission_extension.get(), user_added_id, false);
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_all.erase(user_added_id);
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *all_permission_extension.get(), to_blacklist_id, false);
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_all.erase(to_blacklist_id);
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      *all_permission_extension.get(), scan_id, false);
8285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_for_all.erase(scan_id);
8295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
8305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
8315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      *all_permission_extension.get(), to_scan_remove_id, false);
8335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_for_all.erase(to_scan_remove_id);
8345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
8355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add permission back for all galleries to the all-permission extension.
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *all_permission_extension.get(), auto_id, true);
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_all.insert(auto_id);
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *all_permission_extension.get(), user_added_id, true);
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_all.insert(user_added_id);
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *all_permission_extension.get(), to_blacklist_id, true);
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_all.insert(to_blacklist_id);
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      *all_permission_extension.get(), scan_id, true);
8545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_for_all.insert(scan_id);
8555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
8565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
8575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      *all_permission_extension.get(), to_scan_remove_id, true);
8595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_for_all.insert(to_scan_remove_id);
8605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
8615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add permission for all galleries to the regular permission extension.
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *regular_permission_extension.get(), auto_id, true);
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_regular.insert(auto_id);
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *regular_permission_extension.get(), user_added_id, true);
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_regular.insert(user_added_id);
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *regular_permission_extension.get(), to_blacklist_id, true);
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_regular.insert(to_blacklist_id);
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      *regular_permission_extension.get(), scan_id, true);
8805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_for_regular.insert(scan_id);
8815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
8825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
8835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
8845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      *regular_permission_extension.get(), to_scan_remove_id, true);
8855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_for_regular.insert(to_scan_remove_id);
8865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
8875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Blacklist the to be black listed gallery
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->ForgetGalleryById(to_blacklist_id);
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_[to_blacklist_id].type =
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MediaGalleryPrefInfo::kBlackListed;
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_all.erase(to_blacklist_id);
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_regular.erase(to_blacklist_id);
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->ForgetGalleryById(to_scan_remove_id);
8975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_[to_scan_remove_id].type =
8985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      MediaGalleryPrefInfo::kRemovedScan;
8995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_for_all.erase(to_scan_remove_id);
9005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_for_regular.erase(to_scan_remove_id);
9015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
9025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Remove permission for all galleries to the regular permission extension.
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *regular_permission_extension.get(), auto_id, false);
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_regular.erase(auto_id);
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *regular_permission_extension.get(), user_added_id, false);
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_galleries_for_regular.erase(user_added_id);
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
9155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      *regular_permission_extension.get(), scan_id, false);
9165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_for_regular.erase(scan_id);
9175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
9185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add permission for an invalid gallery id.
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gallery_prefs()->SetGalleryPermissionForExtension(
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *regular_permission_extension.get(), 9999L, true);
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// What an existing gallery is added again, update the gallery information if
9265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// needed.
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, UpdateGalleryDetails) {
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MediaGalleryPrefId auto_id, id;
9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StorageInfo info;
9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath relative_path;
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a new auto detect gallery to test with.
9355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_auto");
93690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
937a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::string16 gallery_name = base::ASCIIToUTF16("NewAutoGallery");
938a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV1(info.device_id(), gallery_name,
9397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            relative_path, false /*auto*/);
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, id);
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  auto_id = id;
942a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Update the device name and add the gallery again.
947a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("AutoGallery2");
948a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV1(info.device_id(), gallery_name, relative_path,
949a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            false /*auto*/);
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(auto_id, id);
951a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, MultipleGalleriesPerDevices) {
9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
9582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StorageInfo info;
9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath relative_path;
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a regular gallery
9635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_user");
96490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
965a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::string16 gallery_name = base::ASCIIToUTF16("NewUserGallery");
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MediaGalleryPrefId user_added_id =
967a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      AddGalleryWithNameV1(info.device_id(), gallery_name, relative_path,
968a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                           true /*user*/);
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, user_added_id);
970a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(user_added_id, gallery_name, info.device_id(),
9712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        relative_path, MediaGalleryPrefInfo::kUserAdded);
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Find it by device id and fail to find something related.
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MediaGalleryPrefIdSet pref_id_set;
97690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  pref_id_set = gallery_prefs()->LookUpGalleriesByDeviceId(info.device_id());
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1U, pref_id_set.size());
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(pref_id_set.find(user_added_id) != pref_id_set.end());
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(
9815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      MakeMediaGalleriesTestingPath("new_user/foo"), &info, &relative_path);
98290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  pref_id_set = gallery_prefs()->LookUpGalleriesByDeviceId(info.device_id());
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0U, pref_id_set.size());
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add some galleries on the same device.
9862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  relative_path = base::FilePath(FILE_PATH_LITERAL("path1/on/device1"));
987a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("Device1Path1");
988c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string device_id = "path:device1";
9897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MediaGalleryPrefId dev1_path1_id = AddGalleryWithNameV1(
990a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      device_id, gallery_name, relative_path, true /*user*/);
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 2UL, dev1_path1_id);
992a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(dev1_path1_id, gallery_name, device_id, relative_path,
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kUserAdded);
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  relative_path = base::FilePath(FILE_PATH_LITERAL("path2/on/device1"));
997a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("Device1Path2");
9987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MediaGalleryPrefId dev1_path2_id = AddGalleryWithNameV1(
999a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      device_id, gallery_name, relative_path, true /*user*/);
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 3UL, dev1_path2_id);
1001a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(dev1_path2_id, gallery_name, device_id, relative_path,
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kUserAdded);
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  relative_path = base::FilePath(FILE_PATH_LITERAL("path1/on/device2"));
1006a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("Device2Path1");
1007c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  device_id = "path:device2";
10087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MediaGalleryPrefId dev2_path1_id = AddGalleryWithNameV1(
1009a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      device_id, gallery_name, relative_path, true /*user*/);
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 4UL, dev2_path1_id);
1011a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(dev2_path1_id, gallery_name, device_id, relative_path,
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kUserAdded);
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  relative_path = base::FilePath(FILE_PATH_LITERAL("path2/on/device2"));
1016a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("Device2Path2");
10177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MediaGalleryPrefId dev2_path2_id = AddGalleryWithNameV1(
1018a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      device_id, gallery_name, relative_path, true /*user*/);
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 5UL, dev2_path2_id);
1020a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(dev2_path2_id, gallery_name, device_id, relative_path,
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        MediaGalleryPrefInfo::kUserAdded);
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check that adding one of them again works as expected.
10257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MediaGalleryPrefId id = AddGalleryWithNameV1(
1026a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      device_id, gallery_name, relative_path, true /*user*/);
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(dev2_path2_id, id);
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Verify();
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, GalleryChangeObserver) {
10322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Start with one observer.
10332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockGalleryChangeObserver observer1(gallery_prefs());
10342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gallery_prefs()->AddGalleryChangeObserver(&observer1);
10352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Add a new auto detected gallery.
10375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::FilePath path = MakeMediaGalleriesTestingPath("new_auto");
10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StorageInfo info;
10392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath relative_path;
104090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
1041a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::string16 gallery_name = base::ASCIIToUTF16("NewAutoGallery");
10427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MediaGalleryPrefId auto_id = AddGalleryWithNameV1(
1043a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      info.device_id(), gallery_name, relative_path, false /*auto*/);
10442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, auto_id);
1045a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(auto_id, gallery_name, info.device_id(),
10462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        relative_path, MediaGalleryPrefInfo::kAutoDetected);
10472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, observer1.notifications());
10482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Add a second observer.
10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockGalleryChangeObserver observer2(gallery_prefs());
10512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gallery_prefs()->AddGalleryChangeObserver(&observer2);
10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Add a new user added gallery.
10545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_user");
105590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
1056a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gallery_name = base::ASCIIToUTF16("NewUserGallery");
10572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MediaGalleryPrefId user_added_id =
1058a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      AddGalleryWithNameV1(info.device_id(), gallery_name, relative_path,
1059a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                           true /*user*/);
1060a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(user_added_id, gallery_name, info.device_id(),
10612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        relative_path, MediaGalleryPrefInfo::kUserAdded);
10622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 2UL, user_added_id);
10632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, observer1.notifications());
10642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, observer2.notifications());
10652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Remove the first observer.
10672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gallery_prefs()->RemoveGalleryChangeObserver(&observer1);
10682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Remove an auto added gallery (i.e. make it blacklisted).
10702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gallery_prefs()->ForgetGalleryById(auto_id);
10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  expected_galleries_[auto_id].type = MediaGalleryPrefInfo::kBlackListed;
10722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  expected_galleries_for_all.erase(auto_id);
10732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, observer1.notifications());
10752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, observer2.notifications());
10762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Remove a user added gallery and it should go away.
10782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gallery_prefs()->ForgetGalleryById(user_added_id);
10792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  expected_galleries_.erase(user_added_id);
108090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  expected_device_map[info.device_id()].erase(user_added_id);
10812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, observer1.notifications());
10832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(3, observer2.notifications());
10842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, UpdateSingletonDeviceIdType) {
10877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MediaGalleryPrefId id;
10887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::FilePath path;
10897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  StorageInfo info;
10907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::FilePath relative_path;
10917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Verify();
10927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Add a new auto detect gallery to test with.
10945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_auto");
10957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
1096a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::string16 gallery_name = base::ASCIIToUTF16("NewAutoGallery");
10977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  info.set_device_id(StorageInfo::MakeDeviceId(StorageInfo::ITUNES,
10987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                               path.AsUTF8Unsafe()));
1099a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  id = AddGalleryWithNameV2(info.device_id(), gallery_name, relative_path,
11005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                            MediaGalleryPrefInfo::kAutoDetected);
11017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, id);
1102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, info.device_id(), relative_path,
11037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
11047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Verify();
11057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Update the device id.
11077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  MockGalleryChangeObserver observer(gallery_prefs());
11087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  gallery_prefs()->AddGalleryChangeObserver(&observer);
11097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("updated_path");
11117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  std::string updated_device_id =
11127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      StorageInfo::MakeDeviceId(StorageInfo::ITUNES, path.AsUTF8Unsafe());
11137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_TRUE(UpdateDeviceIDForSingletonType(updated_device_id));
1114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddGalleryExpectation(id, gallery_name, updated_device_id, relative_path,
11157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                        MediaGalleryPrefInfo::kAutoDetected);
11167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  expected_device_map[info.device_id()].erase(id);
11177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  expected_device_map[updated_device_id].insert(id);
11187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Verify();
11197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(1, observer.notifications());
11207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // No gallery for type.
11227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  std::string new_device_id =
11237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      StorageInfo::MakeDeviceId(StorageInfo::PICASA, path.AsUTF8Unsafe());
11247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_FALSE(UpdateDeviceIDForSingletonType(new_device_id));
11257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
11267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, ScanResults) {
11285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaGalleryPrefId id;
11295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::FilePath path;
11305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  StorageInfo info;
11315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::FilePath relative_path;
11325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::Time now = base::Time::Now();
11335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
11345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Add a new scan result gallery to test with.
11365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  path = MakeMediaGalleriesTestingPath("new_scan");
11375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path);
11385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  id = gallery_prefs()->AddGallery(info.device_id(), relative_path,
11395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   MediaGalleryPrefInfo::kScanResult,
11405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   ASCIIToUTF16("volume label"),
11415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   ASCIIToUTF16("vendor name"),
11425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   ASCIIToUTF16("model name"),
11435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   1000000ULL, now, 1, 2, 3);
11445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, id);
11455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  AddScanResultExpectation(id, base::string16(), info.device_id(),
11465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                           relative_path, 1, 2, 3);
11475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
11485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Update the found media count.
11505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  id = gallery_prefs()->AddGallery(info.device_id(), relative_path,
11515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   MediaGalleryPrefInfo::kScanResult,
11525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   ASCIIToUTF16("volume label"),
11535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   ASCIIToUTF16("vendor name"),
11545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   ASCIIToUTF16("model name"),
11555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   1000000ULL, now, 4, 5, 6);
11565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, id);
11575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  AddScanResultExpectation(id, base::string16(), info.device_id(),
11585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                           relative_path, 4, 5, 6);
11595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
11605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Remove a scan result (i.e. make it blacklisted).
11625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gallery_prefs()->ForgetGalleryById(id);
11635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_[id].type = MediaGalleryPrefInfo::kRemovedScan;
11645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_[id].audio_count = 0;
11655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_[id].image_count = 0;
11665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  expected_galleries_[id].video_count = 0;
11675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
11685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Try adding the gallery again as a scan result it should be a no-op.
11705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  id = gallery_prefs()->AddGallery(info.device_id(), relative_path,
11715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   MediaGalleryPrefInfo::kScanResult,
11725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   ASCIIToUTF16("volume label"),
11735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   ASCIIToUTF16("vendor name"),
11745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   ASCIIToUTF16("model name"),
11755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   1000000ULL, now, 7, 8, 9);
11765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, id);
11775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
11785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Add the gallery again as a user action.
11805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  id = gallery_prefs()->AddGalleryByPath(path,
11815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                         MediaGalleryPrefInfo::kUserAdded);
11825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(default_galleries_count() + 1UL, id);
11835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  AddGalleryExpectation(id, base::string16(), info.device_id(), relative_path,
11845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        MediaGalleryPrefInfo::kUserAdded);
11855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Verify();
11865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
11875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST(MediaGalleriesPrefInfoTest, NameGeneration) {
1189d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ASSERT_TRUE(TestStorageMonitor::CreateAndInstall());
1190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  MediaGalleryPrefInfo info;
1192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  info.pref_id = 1;
1193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  info.display_name = ASCIIToUTF16("override");
1194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  info.device_id = StorageInfo::MakeDeviceId(
1195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      StorageInfo::REMOVABLE_MASS_STORAGE_WITH_DCIM, "unique");
1196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("override"), info.GetGalleryDisplayName());
1198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  info.display_name = ASCIIToUTF16("o2");
1200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("o2"), info.GetGalleryDisplayName());
1201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(l10n_util::GetStringUTF16(
1203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                IDS_MEDIA_GALLERIES_DIALOG_DEVICE_NOT_ATTACHED),
1204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            info.GetGalleryAdditionalDetails());
1205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  info.last_attach_time = base::Time::Now();
1207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_NE(l10n_util::GetStringUTF16(
1208eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                IDS_MEDIA_GALLERIES_DIALOG_DEVICE_NOT_ATTACHED),
1209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            info.GetGalleryAdditionalDetails());
1210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_NE(l10n_util::GetStringUTF16(
1211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                IDS_MEDIA_GALLERIES_DIALOG_DEVICE_ATTACHED),
1212eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            info.GetGalleryAdditionalDetails());
1213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  info.volume_label = ASCIIToUTF16("vol");
1215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  info.vendor_name = ASCIIToUTF16("vendor");
1216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  info.model_name = ASCIIToUTF16("model");
1217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("o2"), info.GetGalleryDisplayName());
1218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  info.display_name = base::string16();
1220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("vol"), info.GetGalleryDisplayName());
1221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  info.volume_label = base::string16();
1222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("vendor, model"), info.GetGalleryDisplayName());
1223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  info.device_id = StorageInfo::MakeDeviceId(
1225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      StorageInfo::FIXED_MASS_STORAGE, "unique");
1226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("unique")).AsUTF8Unsafe(),
12275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            base::UTF16ToUTF8(info.GetGalleryTooltip()));
12283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
12295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  TestStorageMonitor::Destroy();
1230eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
1231