media_galleries_preferences_unittest.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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/file_util.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/utf_string_conversions.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/test_extension_system.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_file_system_registry.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_test_util.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/storage_monitor/media_storage_util.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/storage_monitor/storage_monitor.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/storage_monitor/test_storage_monitor.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/background_info.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/api/string_ordinal.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h" 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockGalleryChangeObserver 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public MediaGalleriesPreferences::GalleryChangeObserver { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit MockGalleryChangeObserver(MediaGalleriesPreferences* pref) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : pref_(pref), 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notifications_(0) {} 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockGalleryChangeObserver() {} 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int notifications() const { return notifications_;} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // MediaGalleriesPreferences::GalleryChangeObserver implementation. 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnGalleryChanged(MediaGalleriesPreferences* pref, 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& /*extension_id*/) OVERRIDE { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(pref_, pref); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++notifications_; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleriesPreferences* pref_; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int notifications_; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockGalleryChangeObserver); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MediaGalleriesPreferencesTest : public testing::Test { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<std::string /*device id*/, MediaGalleryPrefIdSet> 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceIdPrefIdsMap; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesPreferencesTest() 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui_thread_(content::BrowserThread::UI, &loop_), 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_thread_(content::BrowserThread::FILE, &loop_), 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_(new TestingProfile()), 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_galleries_count_(0) { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MediaGalleriesPreferencesTest() { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TestExtensionSystem uses DeleteSoon, so we need to delete the profile 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and then run the message queue to clean up. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MessageLoop::current()->RunUntilIdle(); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::TestExtensionSystem* extension_system( 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<extensions::TestExtensionSystem*>( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionSystem::Get(profile_.get()))); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extension_system->CreateExtensionService( 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine::ForCurrentProcess(), base::FilePath(), false); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_.reset(new MediaGalleriesPreferences(profile_.get())); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load the default galleries into the expectations. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MediaGalleriesPrefInfoMap& known_galleries = 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_->known_galleries(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (known_galleries.size()) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3U, known_galleries.size()); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_galleries_count_ = 3; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesPrefInfoMap::const_iterator it; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (it = known_galleries.begin(); it != known_galleries.end(); ++it) { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[it->first] = it->second; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (it->second.type == MediaGalleryPrefInfo::kAutoDetected) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.insert(it->first); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> all_permissions; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_permissions.push_back("allAutoDetected"); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_permissions.push_back("read"); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> read_permissions; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) read_permissions.push_back("read"); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) all_permission_extension = 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddMediaGalleriesApp("all", all_permissions, profile_.get()); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) regular_permission_extension = 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddMediaGalleriesApp("regular", read_permissions, profile_.get()); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) no_permissions_extension = 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddMediaGalleriesApp("no", read_permissions, profile_.get()); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Verify() { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MediaGalleriesPrefInfoMap& known_galleries = 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_->known_galleries(); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_galleries_.size(), known_galleries.size()); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (MediaGalleriesPrefInfoMap::const_iterator it = known_galleries.begin(); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != known_galleries.end(); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++it) { 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGalleryInfo(it->second, it->first); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (DeviceIdPrefIdsMap::const_iterator it = expected_device_map.begin(); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != expected_device_map.end(); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++it) { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefIdSet actual_id_set = 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_->LookUpGalleriesByDeviceId(it->first); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(it->second, actual_id_set); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<MediaGalleryPrefId> galleries_for_all = 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_->GalleriesForExtension(*all_permission_extension.get()); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_galleries_for_all, galleries_for_all); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<MediaGalleryPrefId> galleries_for_regular = 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_->GalleriesForExtension( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get()); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_galleries_for_regular, galleries_for_regular); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<MediaGalleryPrefId> galleries_for_no = 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs_->GalleriesForExtension(*no_permissions_extension.get()); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, galleries_for_no.size()); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void VerifyGalleryInfo(const MediaGalleryPrefInfo& actual, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefId expected_id) const { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesPrefInfoMap::const_iterator in_expectation = 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_.find(expected_id); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(in_expectation == expected_galleries_.end()) << expected_id; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(in_expectation->second.pref_id, actual.pref_id); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(in_expectation->second.display_name, actual.display_name); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(in_expectation->second.device_id, actual.device_id); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(in_expectation->second.path.value(), actual.path.value()); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(in_expectation->second.type, actual.type); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesPreferences* gallery_prefs() { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gallery_prefs_.get(); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 default_galleries_count() { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return default_galleries_count_; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddGalleryExpectation(MediaGalleryPrefId id, string16 display_name, 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string device_id, 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::Type type) { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[id].pref_id = id; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[id].display_name = display_name; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[id].device_id = device_id; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[id].path = relative_path.NormalizePathSeparators(); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[id].type = type; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == MediaGalleryPrefInfo::kAutoDetected) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.insert(id); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_device_map[device_id].insert(id); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId AddGalleryWithNameV0(const std::string& device_id, 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16& display_name, 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& relative_path, 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool user_added) { 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gallery_prefs()->AddGalleryInternal( 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_id, display_name, relative_path, user_added, 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), string16(), 0, base::Time(), false, 0); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<extensions::Extension> all_permission_extension; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<extensions::Extension> regular_permission_extension; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<extensions::Extension> no_permissions_extension; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<MediaGalleryPrefId> expected_galleries_for_all; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<MediaGalleryPrefId> expected_galleries_for_regular; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceIdPrefIdsMap expected_device_map; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesPrefInfoMap expected_galleries_; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Needed for extension service & friends to work. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop loop_; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread file_thread_; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined OS_CHROMEOS 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestCrosSettings test_cros_settings_; 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestUserManager test_user_manager_; 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test::TestStorageMonitor monitor_; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MediaGalleriesPreferences> gallery_prefs_; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 default_galleries_count_; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MediaGalleriesPreferencesTest); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath MakePath(std::string dir) { 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::FilePath(FILE_PATH_LITERAL("C:\\")).Append(UTF8ToWide(dir)); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::FilePath(FILE_PATH_LITERAL("/")).Append(dir); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, GalleryManagement) { 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefId auto_id, user_added_id, id; 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a new auto detected gallery. 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_auto"); 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("NewAutoGallery"); 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id = gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, false /*auto*/); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto_id = id; 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(id, info.name, info.device_id, relative_path, 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add it again (as user), nothing should happen. 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id = gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, true /*auto*/); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(auto_id, id); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a new user added gallery. 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_user"); 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, &relative_path); 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("NewUserGallery"); 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id = gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, true /*user*/); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 2UL, id); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_added_id = id; 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(id, info.name, info.device_id, relative_path, 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Lookup some galleries. 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(MakePath("new_auto"), NULL)); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(MakePath("new_user"), NULL)); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(gallery_prefs()->LookUpGalleryByPath(MakePath("other"), NULL)); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that we always get the gallery info. 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo gallery_info; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(MakePath("new_auto"), 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &gallery_info)); 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGalleryInfo(gallery_info, auto_id); 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(gallery_info.volume_metadata_valid); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(MakePath("new_user"), 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &gallery_info)); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyGalleryInfo(gallery_info, user_added_id); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(gallery_info.volume_metadata_valid); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("other"); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(gallery_prefs()->LookUpGalleryByPath(path, &gallery_info)); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kInvalidMediaGalleryPrefId, gallery_info.pref_id); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(path.BaseName().LossyDisplayName(), gallery_info.display_name); 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo other_info; 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &other_info, 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &relative_path); 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(other_info.device_id, gallery_info.device_id); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(relative_path.value(), gallery_info.path.value()); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove an auto added gallery (i.e. make it blacklisted). 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(auto_id); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[auto_id].type = MediaGalleryPrefInfo::kBlackListed; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.erase(auto_id); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove a user added gallery and it should go away. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(user_added_id); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_.erase(user_added_id); 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_device_map[info.device_id].erase(user_added_id); 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, AddGalleryWithVolumeMetadata) { 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId id; 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time now = base::Time::Now(); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add a new auto detected gallery. 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path = MakePath("new_auto"); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &relative_path); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id = gallery_prefs()->AddGallery(info.device_id, relative_path, 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false /*auto*/, 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("volume label"), 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("vendor name"), 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("model name"), 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1000000ULL, now); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(id, string16(), info.device_id, relative_path, 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefInfo gallery_info; 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(gallery_prefs()->LookUpGalleryByPath(MakePath("new_auto"), 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &gallery_info)); 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(gallery_info.volume_metadata_valid); 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("volume label"), gallery_info.volume_label); 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("vendor name"), gallery_info.vendor_name); 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("model name"), gallery_info.model_name); 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1000000ULL, gallery_info.total_size_in_bytes); 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note: we put the microseconds time into a double, so there'll 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // be some possible rounding errors. If it's less than 100, we don't 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // care. 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_LE(abs(now.ToInternalValue() - 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_info.last_attach_time.ToInternalValue()), 100); 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, ReplaceGalleryWithVolumeMetadata) { 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId id, metadata_id; 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time now = base::Time::Now(); 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add an auto detected gallery in the prefs version 0 format. 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path = MakePath("new_auto"); 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &relative_path); 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("NewAutoGallery"); 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id = AddGalleryWithNameV0(info.device_id, info.name, 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, false /*auto*/); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(id, info.name, info.device_id, relative_path, 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) metadata_id = gallery_prefs()->AddGallery(info.device_id, 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false /*auto*/, 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("volume label"), 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("vendor name"), 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("model name"), 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1000000ULL, now); 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(id, metadata_id); 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(id, string16(), info.device_id, relative_path, 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the display_name is set to empty now, as the metadata 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // upgrade should set the manual override name empty. 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Whenever a gallery is added, its type is either set to "AutoDetected" or 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "UserAdded". When the gallery is removed, user added galleries are actually 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// deleted and the auto detected galleries are moved to black listed state. 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// When the gallery is added again, the black listed state is updated back to 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "AutoDetected" type. 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, UpdateGalleryType) { 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefId auto_id, id; 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a new auto detect gallery to test with. 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_auto"); 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &relative_path); 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("NewAutoGallery"); 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id = gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, false /*auto*/); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto_id = id; 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(id, info.name, info.device_id, relative_path, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove an auto added gallery (i.e. make it blacklisted). 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(auto_id); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[auto_id].type = MediaGalleryPrefInfo::kBlackListed; 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.erase(auto_id); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add the gallery again as a user action. 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id = gallery_prefs()->AddGalleryByPath(path); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(auto_id, id); 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(id, info.name, info.device_id, relative_path, 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove an auto added gallery (i.e. make it blacklisted). 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->ForgetGalleryById(auto_id); 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_galleries_[auto_id].type = MediaGalleryPrefInfo::kBlackListed; 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_galleries_for_all.erase(auto_id); 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Try adding the gallery again automatically and it should be a no-op. 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id = gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, false /*auto*/); 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(auto_id, id); 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Verify(); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, GalleryPermissions) { 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefId auto_id, user_added_id, to_blacklist_id, id; 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add some galleries to test with. 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_user"); 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &relative_path); 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("NewUserGallery"); 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id = gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, true /*user*/); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_added_id = id; 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(id, info.name, info.device_id, relative_path, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_auto"); 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &relative_path); 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("NewAutoGallery"); 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id = gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, false /*auto*/); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 2UL, id); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto_id = id; 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(id, info.name, info.device_id, relative_path, 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("to_blacklist"); 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &relative_path); 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("ToBlacklistGallery"); 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id = gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, false /*auto*/); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 3UL, id); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) to_blacklist_id = id; 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(id, info.name, info.device_id, relative_path, 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove permission for all galleries from the all-permission extension. 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *all_permission_extension.get(), auto_id, false); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.erase(auto_id); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *all_permission_extension.get(), user_added_id, false); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.erase(user_added_id); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *all_permission_extension.get(), to_blacklist_id, false); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.erase(to_blacklist_id); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add permission back for all galleries to the all-permission extension. 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *all_permission_extension.get(), auto_id, true); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.insert(auto_id); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *all_permission_extension.get(), user_added_id, true); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.insert(user_added_id); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *all_permission_extension.get(), to_blacklist_id, true); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.insert(to_blacklist_id); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add permission for all galleries to the regular permission extension. 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get(), auto_id, true); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_regular.insert(auto_id); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get(), user_added_id, true); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_regular.insert(user_added_id); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get(), to_blacklist_id, true); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_regular.insert(to_blacklist_id); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Blacklist the to be black listed gallery 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(to_blacklist_id); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_[to_blacklist_id].type = 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kBlackListed; 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_all.erase(to_blacklist_id); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_regular.erase(to_blacklist_id); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove permission for all galleries to the regular permission extension. 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get(), auto_id, false); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_regular.erase(auto_id); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get(), user_added_id, false); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_galleries_for_regular.erase(user_added_id); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add permission for an invalid gallery id. 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension( 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *regular_permission_extension.get(), 9999L, true); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Whenever a gallery is added, check to see if there is any gallery info exists 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for the added gallery. If so, verify the existing gallery information with 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the new details. If there is a mismatch, update the gallery information 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// accordingly. 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, UpdateGalleryDetails) { 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefId auto_id, id; 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a new auto detect gallery to test with. 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_auto"); 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &relative_path); 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("NewAutoGallery"); 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id = gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, false /*auto*/); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, id); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto_id = id; 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(id, info.name, info.device_id, relative_path, 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the device name and add the gallery again. 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("AutoGallery2"); 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id = gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, false /*auto*/); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(auto_id, id); 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(id, info.name, info.device_id, relative_path, 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, MultipleGalleriesPerDevices) { 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a regular gallery 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = MakePath("new_user"); 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &relative_path); 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("NewUserGallery"); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefId user_added_id = 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true /*user*/); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, user_added_id); 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(user_added_id, info.name, info.device_id, 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, MediaGalleryPrefInfo::kUserAdded); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find it by device id and fail to find something related. 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefIdSet pref_id_set; 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_id_set = gallery_prefs()->LookUpGalleriesByDeviceId(info.device_id); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, pref_id_set.size()); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pref_id_set.find(user_added_id) != pref_id_set.end()); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(MakePath("new_user/foo"), &info, 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL); 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_id_set = gallery_prefs()->LookUpGalleriesByDeviceId(info.device_id); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, pref_id_set.size()); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add some galleries on the same device. 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path = base::FilePath(FILE_PATH_LITERAL("path1/on/device1")); 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("Device1Path1"); 632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string device_id = "path:device1"; 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId dev1_path1_id = gallery_prefs()->AddGalleryWithName( 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_id, info.name, relative_path, true /*user*/); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 2UL, dev1_path1_id); 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(dev1_path1_id, info.name, device_id, relative_path, 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path = base::FilePath(FILE_PATH_LITERAL("path2/on/device1")); 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("Device1Path2"); 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId dev1_path2_id = gallery_prefs()->AddGalleryWithName( 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_id, info.name, relative_path, true /*user*/); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 3UL, dev1_path2_id); 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(dev1_path2_id, info.name, device_id, relative_path, 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path = base::FilePath(FILE_PATH_LITERAL("path1/on/device2")); 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("Device2Path1"); 651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) device_id = "path:device2"; 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId dev2_path1_id = gallery_prefs()->AddGalleryWithName( 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_id, info.name, relative_path, true /*user*/); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 4UL, dev2_path1_id); 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(dev2_path1_id, info.name, device_id, relative_path, 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path = base::FilePath(FILE_PATH_LITERAL("path2/on/device2")); 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("Device2Path2"); 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId dev2_path2_id = gallery_prefs()->AddGalleryWithName( 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_id, info.name, relative_path, true /*user*/); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(default_galleries_count() + 5UL, dev2_path2_id); 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(dev2_path2_id, info.name, device_id, relative_path, 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that adding one of them again works as expected. 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId id = gallery_prefs()->AddGalleryWithName( 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_id, info.name, relative_path, true /*user*/); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(dev2_path2_id, id); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Verify(); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MediaGalleriesPreferencesTest, GalleryChangeObserver) { 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start with one observer. 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockGalleryChangeObserver observer1(gallery_prefs()); 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->AddGalleryChangeObserver(&observer1); 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add a new auto detected gallery. 6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path = MakePath("new_auto"); 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StorageInfo info; 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath relative_path; 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &relative_path); 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("NewAutoGallery"); 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId auto_id = 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, false /*auto*/); 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(default_galleries_count() + 1UL, auto_id); 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(auto_id, info.name, info.device_id, 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, MediaGalleryPrefInfo::kAutoDetected); 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, observer1.notifications()); 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add a second observer. 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockGalleryChangeObserver observer2(gallery_prefs()); 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->AddGalleryChangeObserver(&observer2); 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add a new user added gallery. 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path = MakePath("new_user"); 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaStorageUtil::GetDeviceInfoFromPath(path, &info, 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &relative_path); 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.name = ASCIIToUTF16("NewUserGallery"); 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefId user_added_id = 7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->AddGalleryWithName(info.device_id, info.name, 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, true /*user*/); 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryExpectation(user_added_id, info.name, info.device_id, 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) relative_path, MediaGalleryPrefInfo::kUserAdded); 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(default_galleries_count() + 2UL, user_added_id); 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, observer1.notifications()); 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, observer2.notifications()); 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove the first observer. 7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->RemoveGalleryChangeObserver(&observer1); 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove an auto added gallery (i.e. make it blacklisted). 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->ForgetGalleryById(auto_id); 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_galleries_[auto_id].type = MediaGalleryPrefInfo::kBlackListed; 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_galleries_for_all.erase(auto_id); 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, observer1.notifications()); 7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, observer2.notifications()); 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove a user added gallery and it should go away. 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_prefs()->ForgetGalleryById(user_added_id); 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_galleries_.erase(user_added_id); 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_device_map[info.device_id].erase(user_added_id); 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, observer1.notifications()); 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3, observer2.notifications()); 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chrome 734