media_galleries_preferences_unittest.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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/extension_system.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/test_extension_system.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_file_system_registry.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_test_util.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/storage_monitor/media_storage_util.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/storage_monitor/storage_monitor.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/storage_monitor/test_storage_monitor.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/background_info.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h" 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "grit/generated_resources.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/api/string_ordinal.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/base/l10n/l10n_util.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h" 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockGalleryChangeObserver 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public MediaGalleriesPreferences::GalleryChangeObserver { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit MockGalleryChangeObserver(MediaGalleriesPreferences* pref) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : pref_(pref), 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notifications_(0) {} 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockGalleryChangeObserver() {} 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int notifications() const { return notifications_;} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // MediaGalleriesPreferences::GalleryChangeObserver implementation. 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void OnPermissionAdded(MediaGalleriesPreferences* pref, 52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::string& extension_id, 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId pref_id) OVERRIDE { 54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(pref_, pref); 55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ++notifications_; 56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void OnPermissionRemoved(MediaGalleriesPreferences* pref, 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::string& extension_id, 60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId pref_id) OVERRIDE { 61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(pref_, pref); 62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ++notifications_; 63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void OnGalleryAdded(MediaGalleriesPreferences* pref, 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 OnGalleryRemoved(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 OnGalleryInfoUpdated(MediaGalleriesPreferences* pref, 78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId pref_id) OVERRIDE { 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(pref_, pref); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++notifications_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleriesPreferences* pref_; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int notifications_; 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockGalleryChangeObserver); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MediaGalleriesPreferencesTest : public testing::Test { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<std::string /*device id*/, MediaGalleryPrefIdSet> 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceIdPrefIdsMap; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesPreferencesTest() 97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch : profile_(new TestingProfile()), 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_galleries_count_(0) { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MediaGalleriesPreferencesTest() { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 105d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(TestStorageMonitor::CreateAndInstall()); 106558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::TestExtensionSystem* extension_system( 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<extensions::TestExtensionSystem*>( 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionSystem::Get(profile_.get()))); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extension_system->CreateExtensionService( 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine::ForCurrentProcess(), base::FilePath(), false); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_.reset(new MediaGalleriesPreferences(profile_.get())); 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::RunLoop loop; 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gallery_prefs_->EnsureInitialized(loop.QuitClosure()); 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) loop.Run(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load the default galleries into the expectations. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MediaGalleriesPrefInfoMap& known_galleries = 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_->known_galleries(); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (known_galleries.size()) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3U, known_galleries.size()); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_galleries_count_ = 3; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesPrefInfoMap::const_iterator it; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (it = known_galleries.begin(); it != known_galleries.end(); ++it) { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[it->first] = it->second; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (it->second.type == MediaGalleryPrefInfo::kAutoDetected) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.insert(it->first); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> all_permissions; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_permissions.push_back("allAutoDetected"); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_permissions.push_back("read"); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> read_permissions; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) read_permissions.push_back("read"); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) all_permission_extension = 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddMediaGalleriesApp("all", all_permissions, profile_.get()); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) regular_permission_extension = 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddMediaGalleriesApp("regular", read_permissions, profile_.get()); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) no_permissions_extension = 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddMediaGalleriesApp("no", read_permissions, profile_.get()); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 148d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TestStorageMonitor::RemoveSingleton(); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Verify() { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MediaGalleriesPrefInfoMap& known_galleries = 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_->known_galleries(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_galleries_.size(), known_galleries.size()); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (MediaGalleriesPrefInfoMap::const_iterator it = known_galleries.begin(); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != known_galleries.end(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++it) { 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGalleryInfo(it->second, it->first); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (DeviceIdPrefIdsMap::const_iterator it = expected_device_map.begin(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != expected_device_map.end(); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++it) { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefIdSet actual_id_set = 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_->LookUpGalleriesByDeviceId(it->first); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(it->second, actual_id_set); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<MediaGalleryPrefId> galleries_for_all = 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_->GalleriesForExtension(*all_permission_extension.get()); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_galleries_for_all, galleries_for_all); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<MediaGalleryPrefId> galleries_for_regular = 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_->GalleriesForExtension( 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_galleries_for_regular, galleries_for_regular); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<MediaGalleryPrefId> galleries_for_no = 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_->GalleriesForExtension(*no_permissions_extension.get()); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, galleries_for_no.size()); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void VerifyGalleryInfo(const MediaGalleryPrefInfo& actual, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefId expected_id) const { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesPrefInfoMap::const_iterator in_expectation = 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_.find(expected_id); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(in_expectation == expected_galleries_.end()) << expected_id; 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(in_expectation->second.pref_id, actual.pref_id); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(in_expectation->second.display_name, actual.display_name); 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(in_expectation->second.device_id, actual.device_id); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(in_expectation->second.path.value(), actual.path.value()); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(in_expectation->second.type, actual.type); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesPreferences* gallery_prefs() { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gallery_prefs_.get(); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 default_galleries_count() { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return default_galleries_count_; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddGalleryExpectation(MediaGalleryPrefId id, string16 display_name, 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string device_id, 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::Type type) { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[id].pref_id = id; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[id].display_name = display_name; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[id].device_id = device_id; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[id].path = relative_path.NormalizePathSeparators(); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[id].type = type; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == MediaGalleryPrefInfo::kAutoDetected) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.insert(id); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_device_map[device_id].insert(id); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId AddGalleryWithNameV0(const std::string& device_id, 220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const string16& display_name, 221868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::FilePath& relative_path, 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool user_added) { 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gallery_prefs()->AddGalleryInternal( 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_id, display_name, relative_path, user_added, 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), string16(), 0, base::Time(), false, 0); 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefId AddGalleryWithNameV1(const std::string& device_id, 2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const string16& display_name, 2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::FilePath& relative_path, 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool user_added) { 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return gallery_prefs()->AddGalleryInternal( 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) device_id, display_name, relative_path, user_added, 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) string16(), string16(), string16(), 0, base::Time(), false, 1); 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefId AddGalleryWithNameV2(const std::string& device_id, 2387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const string16& display_name, 2397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::FilePath& relative_path, 2407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool user_added) { 2417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return gallery_prefs()->AddGalleryInternal( 2427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) device_id, display_name, relative_path, user_added, 2437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) string16(), string16(), string16(), 0, base::Time(), false, 2); 2447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool UpdateDeviceIDForSingletonType(const std::string& device_id) { 2477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return gallery_prefs()->UpdateDeviceIDForSingletonType(device_id); 2487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<extensions::Extension> all_permission_extension; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<extensions::Extension> regular_permission_extension; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<extensions::Extension> no_permissions_extension; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<MediaGalleryPrefId> expected_galleries_for_all; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<MediaGalleryPrefId> expected_galleries_for_regular; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceIdPrefIdsMap expected_device_map; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesPrefInfoMap expected_galleries_; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Needed for extension service & friends to work. 263ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::TestBrowserThreadBundle thread_bundle_; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EnsureMediaDirectoriesExists mock_gallery_locations_; 2661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined OS_CHROMEOS 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestCrosSettings test_cros_settings_; 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestUserManager test_user_manager_; 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 273d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TestStorageMonitor monitor_; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MediaGalleriesPreferences> gallery_prefs_; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 default_galleries_count_; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MediaGalleriesPreferencesTest); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath MakePath(std::string dir) { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::FilePath(FILE_PATH_LITERAL("C:\\")).Append(UTF8ToWide(dir)); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::FilePath(FILE_PATH_LITERAL("/")).Append(dir); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, GalleryManagement) { 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefId auto_id, user_added_id, id; 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a new auto detected gallery. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_auto"); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 30290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("NewAutoGallery")); 3037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) id = AddGalleryWithNameV1(info.device_id(), info.name(), 3047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, false /*auto*/); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto_id = id; 30790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add it again (as user), nothing should happen. 3127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) id = AddGalleryWithNameV1(info.device_id(), info.name(), 3137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, true /*auto*/); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(auto_id, id); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a new user added gallery. 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_user"); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 32090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("NewUserGallery")); 3217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) id = AddGalleryWithNameV1(info.device_id(), info.name(), 3227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, true /*user*/); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 2UL, id); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_added_id = id; 32590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Lookup some galleries. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(MakePath("new_auto"), NULL)); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(MakePath("new_user"), NULL)); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(gallery_prefs()->LookUpGalleryByPath(MakePath("other"), NULL)); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that we always get the gallery info. 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo gallery_info; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(MakePath("new_auto"), 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &gallery_info)); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGalleryInfo(gallery_info, auto_id); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(gallery_info.volume_metadata_valid); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(MakePath("new_user"), 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &gallery_info)); 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGalleryInfo(gallery_info, user_added_id); 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(gallery_info.volume_metadata_valid); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("other"); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(gallery_prefs()->LookUpGalleryByPath(path, &gallery_info)); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kInvalidMediaGalleryPrefId, gallery_info.pref_id); 3487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo other_info; 35090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &other_info, &relative_path); 35190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(other_info.device_id(), gallery_info.device_id); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(relative_path.value(), gallery_info.path.value()); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove an auto added gallery (i.e. make it blacklisted). 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(auto_id); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[auto_id].type = MediaGalleryPrefInfo::kBlackListed; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.erase(auto_id); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove a user added gallery and it should go away. 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(user_added_id); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_.erase(user_added_id); 36390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) expected_device_map[info.device_id()].erase(user_added_id); 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, AddGalleryWithVolumeMetadata) { 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId id; 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time now = base::Time::Now(); 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add a new auto detected gallery. 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path = MakePath("new_auto"); 37790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 37890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) id = gallery_prefs()->AddGallery(info.device_id(), relative_path, 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false /*auto*/, 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("volume label"), 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("vendor name"), 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("model name"), 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1000000ULL, now); 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 38590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(id, string16(), info.device_id(), relative_path, 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefInfo gallery_info; 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(MakePath("new_auto"), 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &gallery_info)); 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(gallery_info.volume_metadata_valid); 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("volume label"), gallery_info.volume_label); 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("vendor name"), gallery_info.vendor_name); 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("model name"), gallery_info.model_name); 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1000000ULL, gallery_info.total_size_in_bytes); 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note: we put the microseconds time into a double, so there'll 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // be some possible rounding errors. If it's less than 100, we don't 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // care. 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_LE(abs(now.ToInternalValue() - 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_info.last_attach_time.ToInternalValue()), 100); 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, ReplaceGalleryWithVolumeMetadata) { 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId id, metadata_id; 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time now = base::Time::Now(); 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add an auto detected gallery in the prefs version 0 format. 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path = MakePath("new_auto"); 41490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 41590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("NewAutoGallery")); 41690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) id = AddGalleryWithNameV0(info.device_id(), info.name(), 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, false /*auto*/); 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 41990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 42390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) metadata_id = gallery_prefs()->AddGallery(info.device_id(), 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false /*auto*/, 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("volume label"), 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("vendor name"), 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("model name"), 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1000000ULL, now); 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(id, metadata_id); 43190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(id, string16(), info.device_id(), relative_path, 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the display_name is set to empty now, as the metadata 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // upgrade should set the manual override name empty. 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Whenever a gallery is added, its type is either set to "AutoDetected" or 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "UserAdded". When the gallery is removed, user added galleries are actually 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// deleted and the auto detected galleries are moved to black listed state. 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// When the gallery is added again, the black listed state is updated back to 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "AutoDetected" type. 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, UpdateGalleryType) { 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefId auto_id, id; 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a new auto detect gallery to test with. 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_auto"); 45490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 45590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("NewAutoGallery")); 4567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) id = AddGalleryWithNameV1(info.device_id(), info.name(), 4577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, false /*auto*/); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto_id = id; 46090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove an auto added gallery (i.e. make it blacklisted). 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(auto_id); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[auto_id].type = MediaGalleryPrefInfo::kBlackListed; 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.erase(auto_id); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add the gallery again as a user action. 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id = gallery_prefs()->AddGalleryByPath(path); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(auto_id, id); 47390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove an auto added gallery (i.e. make it blacklisted). 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->ForgetGalleryById(auto_id); 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_galleries_[auto_id].type = MediaGalleryPrefInfo::kBlackListed; 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_galleries_for_all.erase(auto_id); 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Try adding the gallery again automatically and it should be a no-op. 4847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) id = AddGalleryWithNameV1(info.device_id(), info.name(), 4857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, false /*auto*/); 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(auto_id, id); 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, UpdateGalleryNameV2) { 4917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Add a new auto detect gallery to test with. 4927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::FilePath path = MakePath("new_auto"); 4937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StorageInfo info; 4947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::FilePath relative_path; 4957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 4967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.set_name(ASCIIToUTF16("NewAutoGallery")); 4977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefId id = 4987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AddGalleryWithNameV2(info.device_id(), info.name(), 4997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, false /*auto*/); 5007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 5017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 5027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Verify(); 5037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Won't override the name -- don't change any expectation. 5057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.set_name(string16()); 5067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AddGalleryWithNameV2(info.device_id(), info.name(), relative_path, false); 5077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Verify(); 5087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.set_name(ASCIIToUTF16("NewName")); 5107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) id = AddGalleryWithNameV2(info.device_id(), info.name(), 5117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, false); 5127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Note: will really just update the existing expectation. 5137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 5147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 5157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Verify(); 5167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, GalleryPermissions) { 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefId auto_id, user_added_id, to_blacklist_id, id; 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add some galleries to test with. 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_user"); 52790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 52890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("NewUserGallery")); 5297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) id = AddGalleryWithNameV1(info.device_id(), info.name(), 5307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, true /*user*/); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_added_id = id; 53390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_auto"); 53890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 53990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("NewAutoGallery")); 5407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) id = AddGalleryWithNameV1(info.device_id(), info.name(), 5417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, false /*auto*/); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 2UL, id); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto_id = id; 54490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("to_blacklist"); 54990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 55090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("ToBlacklistGallery")); 5517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) id = AddGalleryWithNameV1(info.device_id(), info.name(), 5527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, false /*auto*/); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 3UL, id); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) to_blacklist_id = id; 55590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove permission for all galleries from the all-permission extension. 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *all_permission_extension.get(), auto_id, false); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.erase(auto_id); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *all_permission_extension.get(), user_added_id, false); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.erase(user_added_id); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *all_permission_extension.get(), to_blacklist_id, false); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.erase(to_blacklist_id); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add permission back for all galleries to the all-permission extension. 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *all_permission_extension.get(), auto_id, true); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.insert(auto_id); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *all_permission_extension.get(), user_added_id, true); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.insert(user_added_id); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *all_permission_extension.get(), to_blacklist_id, true); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.insert(to_blacklist_id); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add permission for all galleries to the regular permission extension. 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get(), auto_id, true); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_regular.insert(auto_id); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get(), user_added_id, true); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_regular.insert(user_added_id); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get(), to_blacklist_id, true); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_regular.insert(to_blacklist_id); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Blacklist the to be black listed gallery 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(to_blacklist_id); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[to_blacklist_id].type = 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kBlackListed; 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.erase(to_blacklist_id); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_regular.erase(to_blacklist_id); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove permission for all galleries to the regular permission extension. 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get(), auto_id, false); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_regular.erase(auto_id); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get(), user_added_id, false); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_regular.erase(user_added_id); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add permission for an invalid gallery id. 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get(), 9999L, true); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Whenever a gallery is added, check to see if there is any gallery info exists 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for the added gallery. If so, verify the existing gallery information with 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the new details. If there is a mismatch, update the gallery information 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// accordingly. 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, UpdateGalleryDetails) { 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefId auto_id, id; 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a new auto detect gallery to test with. 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_auto"); 64590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 64690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("NewAutoGallery")); 6477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) id = AddGalleryWithNameV1(info.device_id(), info.name(), 6487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, false /*auto*/); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto_id = id; 65190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the device name and add the gallery again. 65690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("AutoGallery2")); 6577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) id = AddGalleryWithNameV1(info.device_id(), info.name(), 6587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, false /*auto*/); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(auto_id, id); 66090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, MultipleGalleriesPerDevices) { 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a regular gallery 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_user"); 67390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 67490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("NewUserGallery")); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefId user_added_id = 6767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AddGalleryWithNameV1(info.device_id(), info.name(), 6777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, true /*user*/); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, user_added_id); 67990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(user_added_id, info.name(), info.device_id(), 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, MediaGalleryPrefInfo::kUserAdded); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find it by device id and fail to find something related. 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefIdSet pref_id_set; 68590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) pref_id_set = gallery_prefs()->LookUpGalleriesByDeviceId(info.device_id()); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, pref_id_set.size()); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pref_id_set.find(user_added_id) != pref_id_set.end()); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(MakePath("new_user/foo"), &info, 69090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &relative_path); 69190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) pref_id_set = gallery_prefs()->LookUpGalleriesByDeviceId(info.device_id()); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, pref_id_set.size()); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add some galleries on the same device. 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path = base::FilePath(FILE_PATH_LITERAL("path1/on/device1")); 69690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("Device1Path1")); 697c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string device_id = "path:device1"; 6987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefId dev1_path1_id = AddGalleryWithNameV1( 69990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) device_id, info.name(), relative_path, true /*user*/); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 2UL, dev1_path1_id); 70190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(dev1_path1_id, info.name(), device_id, relative_path, 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path = base::FilePath(FILE_PATH_LITERAL("path2/on/device1")); 70690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("Device1Path2")); 7077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefId dev1_path2_id = AddGalleryWithNameV1( 70890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) device_id, info.name(), relative_path, true /*user*/); 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 3UL, dev1_path2_id); 71090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(dev1_path2_id, info.name(), device_id, relative_path, 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path = base::FilePath(FILE_PATH_LITERAL("path1/on/device2")); 71590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("Device2Path1")); 716c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) device_id = "path:device2"; 7177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefId dev2_path1_id = AddGalleryWithNameV1( 71890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) device_id, info.name(), relative_path, true /*user*/); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 4UL, dev2_path1_id); 72090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(dev2_path1_id, info.name(), device_id, relative_path, 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path = base::FilePath(FILE_PATH_LITERAL("path2/on/device2")); 72590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("Device2Path2")); 7267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefId dev2_path2_id = AddGalleryWithNameV1( 72790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) device_id, info.name(), relative_path, true /*user*/); 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 5UL, dev2_path2_id); 72990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(dev2_path2_id, info.name(), device_id, relative_path, 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that adding one of them again works as expected. 7347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefId id = AddGalleryWithNameV1( 73590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) device_id, info.name(), relative_path, true /*user*/); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(dev2_path2_id, id); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, GalleryChangeObserver) { 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start with one observer. 7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockGalleryChangeObserver observer1(gallery_prefs()); 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->AddGalleryChangeObserver(&observer1); 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add a new auto detected gallery. 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path = MakePath("new_auto"); 7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 74990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 75090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("NewAutoGallery")); 7517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefId auto_id = AddGalleryWithNameV1( 7527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.device_id(), info.name(), relative_path, false /*auto*/); 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, auto_id); 75490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(auto_id, info.name(), info.device_id(), 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, MediaGalleryPrefInfo::kAutoDetected); 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, observer1.notifications()); 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add a second observer. 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockGalleryChangeObserver observer2(gallery_prefs()); 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->AddGalleryChangeObserver(&observer2); 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add a new user added gallery. 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path = MakePath("new_user"); 76490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 76590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) info.set_name(ASCIIToUTF16("NewUserGallery")); 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId user_added_id = 7677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AddGalleryWithNameV1(info.device_id(), info.name(), 7687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) relative_path, true /*user*/); 76990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddGalleryExpectation(user_added_id, info.name(), info.device_id(), 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, MediaGalleryPrefInfo::kUserAdded); 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(default_galleries_count() + 2UL, user_added_id); 7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, observer1.notifications()); 7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, observer2.notifications()); 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove the first observer. 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->RemoveGalleryChangeObserver(&observer1); 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove an auto added gallery (i.e. make it blacklisted). 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->ForgetGalleryById(auto_id); 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_galleries_[auto_id].type = MediaGalleryPrefInfo::kBlackListed; 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_galleries_for_all.erase(auto_id); 7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, observer1.notifications()); 7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, observer2.notifications()); 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove a user added gallery and it should go away. 7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->ForgetGalleryById(user_added_id); 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_galleries_.erase(user_added_id); 78990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) expected_device_map[info.device_id()].erase(user_added_id); 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, observer1.notifications()); 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, observer2.notifications()); 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, UpdateSingletonDeviceIdType) { 7967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefId id; 7977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::FilePath path; 7987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StorageInfo info; 7997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::FilePath relative_path; 8007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Verify(); 8017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Add a new auto detect gallery to test with. 8037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) path = MakePath("new_auto"); 8047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 8057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.set_name(ASCIIToUTF16("NewAutoGallery")); 8067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.set_device_id(StorageInfo::MakeDeviceId(StorageInfo::ITUNES, 8077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) path.AsUTF8Unsafe())); 8087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) id = AddGalleryWithNameV2(info.device_id(), info.name(), relative_path, 8097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) false /*auto*/); 8107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 8117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AddGalleryExpectation(id, info.name(), info.device_id(), relative_path, 8127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 8137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Verify(); 8147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Update the device id. 8167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockGalleryChangeObserver observer(gallery_prefs()); 8177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) gallery_prefs()->AddGalleryChangeObserver(&observer); 8187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) path = MakePath("updated_path"); 8207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string updated_device_id = 8217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StorageInfo::MakeDeviceId(StorageInfo::ITUNES, path.AsUTF8Unsafe()); 8227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(UpdateDeviceIDForSingletonType(updated_device_id)); 8237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AddGalleryExpectation(id, info.name(), updated_device_id, relative_path, 8247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 8257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_device_map[info.device_id()].erase(id); 8267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_device_map[updated_device_id].insert(id); 8277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Verify(); 8287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(1, observer.notifications()); 8297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // No gallery for type. 8317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string new_device_id = 8327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StorageInfo::MakeDeviceId(StorageInfo::PICASA, path.AsUTF8Unsafe()); 8337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(UpdateDeviceIDForSingletonType(new_device_id)); 8347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 8357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 836eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST(MediaGalleryPrefInfoTest, NameGeneration) { 837d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(TestStorageMonitor::CreateAndInstall()); 838eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 839eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch MediaGalleryPrefInfo info; 840eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.pref_id = 1; 841eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.display_name = ASCIIToUTF16("override"); 842eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.device_id = StorageInfo::MakeDeviceId( 843eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch StorageInfo::REMOVABLE_MASS_STORAGE_WITH_DCIM, "unique"); 844eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 845eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("override"), info.GetGalleryDisplayName()); 846eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 847eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.display_name = ASCIIToUTF16("o2"); 848eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("o2"), info.GetGalleryDisplayName()); 849eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 850eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(l10n_util::GetStringUTF16( 851eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_MEDIA_GALLERIES_DIALOG_DEVICE_NOT_ATTACHED), 852eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.GetGalleryAdditionalDetails()); 853eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 854eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.last_attach_time = base::Time::Now(); 855eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_NE(l10n_util::GetStringUTF16( 856eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_MEDIA_GALLERIES_DIALOG_DEVICE_NOT_ATTACHED), 857eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.GetGalleryAdditionalDetails()); 858eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_NE(l10n_util::GetStringUTF16( 859eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_MEDIA_GALLERIES_DIALOG_DEVICE_ATTACHED), 860eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.GetGalleryAdditionalDetails()); 861eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 862eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.volume_label = ASCIIToUTF16("vol"); 863eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.vendor_name = ASCIIToUTF16("vendor"); 864eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.model_name = ASCIIToUTF16("model"); 865eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("o2"), info.GetGalleryDisplayName()); 866eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 867eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.display_name = string16(); 868eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("vol"), info.GetGalleryDisplayName()); 869eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.volume_label = string16(); 870eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("vendor, model"), info.GetGalleryDisplayName()); 871eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 872eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch info.device_id = StorageInfo::MakeDeviceId( 873eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch StorageInfo::FIXED_MASS_STORAGE, "unique"); 874eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("unique")).AsUTF8Unsafe(), 875eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UTF16ToUTF8(info.GetGalleryTooltip())); 8763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 877d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TestStorageMonitor::RemoveSingleton(); 878eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 879