15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/bind.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/command_line.h" 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/files/file_path.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/weak_ptr.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/run_loop.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/string16.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/time/time.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/test_extension_system.h" 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_dialog_controller_test_util.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_preferences.h" 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_scan_result_controller.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_test_util.h" 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/storage_monitor/test_storage_monitor.h" 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/extension.h" 24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/common/permissions/media_galleries_permission.h" 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS) 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h" 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class MediaGalleriesScanResultControllerTest : public testing::Test { 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaGalleriesScanResultControllerTest() 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : dialog_(NULL), 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dialog_update_count_at_destruction_(0), 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller_(NULL), 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_(new TestingProfile()), 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) weak_factory_(this) { 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~MediaGalleriesScanResultControllerTest() { 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(controller_); 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(dialog_); 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetUp() OVERRIDE { 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(storage_monitor::TestStorageMonitor::CreateAndInstall()); 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::TestExtensionSystem* extension_system( 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<extensions::TestExtensionSystem*>( 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSystem::Get(profile_.get()))); 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_system->CreateExtensionService( 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CommandLine::ForCurrentProcess(), base::FilePath(), false); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs_.reset(new MediaGalleriesPreferences(profile_.get())); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop loop; 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs_->EnsureInitialized(loop.QuitClosure()); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) loop.Run(); 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<std::string> read_permissions; 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) read_permissions.push_back( 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::MediaGalleriesPermission::kReadPermission); 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_ = AddMediaGalleriesApp("read", read_permissions, profile_.get()); 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void TearDown() OVERRIDE { 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) storage_monitor::TestStorageMonitor::Destroy(); 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void StartDialog() { 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_FALSE(controller_); 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller_ = new MediaGalleriesScanResultController( 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *extension_.get(), 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs_.get(), 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind( 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) &MediaGalleriesScanResultControllerTest::CreateMockDialog, 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Unretained(this)), 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind( 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) &MediaGalleriesScanResultControllerTest::OnControllerDone, 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Unretained(this))); 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) size_t GetFirstSectionSize() const { 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return controller()->GetSectionEntries(0).size(); 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaGalleriesScanResultController* controller() const { 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return controller_; 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MockMediaGalleriesDialog* dialog() { 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return dialog_; 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int dialog_update_count_at_destruction() { 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(dialog_); 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return dialog_update_count_at_destruction_; 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::Extension* extension() { 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return extension_.get(); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleriesPreferences* gallery_prefs() { 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return gallery_prefs_.get(); 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId AddGallery(const std::string& path, 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefInfo::Type type, 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int audio_count, int image_count, 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int video_count) { 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefInfo gallery_info; 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs_->LookUpGalleryByPath(MakeMediaGalleriesTestingPath(path), 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &gallery_info); 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return gallery_prefs_->AddGallery( 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_info.device_id, 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_info.path, 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) type, 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_info.volume_label, 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_info.vendor_name, 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_info.model_name, 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_info.total_size_in_bytes, 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_info.last_attach_time, 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) audio_count, image_count, video_count); 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId AddScanResult(const std::string& path, int audio_count, 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int image_count, int video_count) { 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return AddGallery(path, MediaGalleryPrefInfo::kScanResult, audio_count, 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) image_count, video_count); 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaGalleriesDialog* CreateMockDialog( 13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaGalleriesDialogController* controller) { 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(dialog_); 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dialog_update_count_at_destruction_ = 0; 14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) dialog_ = new MockMediaGalleriesDialog(base::Bind( 14146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) &MediaGalleriesScanResultControllerTest::OnDialogDestroyed, 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) weak_factory_.GetWeakPtr())); 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return dialog_; 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnDialogDestroyed(int update_count) { 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(dialog_); 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dialog_update_count_at_destruction_ = update_count; 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dialog_ = NULL; 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnControllerDone() { 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller_ = NULL; 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Needed for extension service & friends to work. 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The dialog is owned by the controller, but this pointer should only be 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // valid while the dialog is live within the controller. 16146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MockMediaGalleriesDialog* dialog_; 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int dialog_update_count_at_destruction_; 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The controller owns itself. 16546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaGalleriesScanResultController* controller_; 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<extensions::Extension> extension_; 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EnsureMediaDirectoriesExists mock_gallery_locations_; 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined OS_CHROMEOS 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::ScopedTestCrosSettings test_cros_settings_; 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::ScopedTestUserManager test_user_manager_; 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) storage_monitor::TestStorageMonitor monitor_; 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<MediaGalleriesPreferences> gallery_prefs_; 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 18146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::WeakPtrFactory<MediaGalleriesScanResultControllerTest> weak_factory_; 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MediaGalleriesScanResultControllerTest); 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 18646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(MediaGalleriesScanResultControllerTest, EmptyDialog) { 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(controller()); 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(dialog()); 19046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(0U, GetFirstSectionSize()); 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(true); 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(controller()); 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(dialog()); 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, dialog_update_count_at_destruction()); 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(MediaGalleriesScanResultControllerTest, AddScanResults) { 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Start with two scan results. 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId scan_id = AddScanResult("scan_id", 1, 0, 0); 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId auto_id = 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddGallery("auto_id", MediaGalleryPrefInfo::kAutoDetected, 2, 0, 0); 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Show the dialog, but cancel it. 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 20746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2U, GetFirstSectionSize()); 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(false); 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Show the dialog, unselect both and accept it. 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 21346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2U, GetFirstSectionSize()); 21446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidToggleEntry(scan_id, false); 21546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidToggleEntry(auto_id, false); 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(true); 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Show the dialog, leave one selected and accept it. 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 22146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2U, GetFirstSectionSize()); 22246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidToggleEntry(scan_id, false); 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(true); 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefIdSet permitted = 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->GalleriesForExtension(*extension()); 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(1U, permitted.size()); 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(auto_id, *permitted.begin()); 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Show the dialog, toggle the remaining entry twice and then accept it. 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 23146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1U, GetFirstSectionSize()); 23246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidToggleEntry(scan_id, false); 23346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidToggleEntry(scan_id, true); 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(true); 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 23846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(MediaGalleriesScanResultControllerTest, Blacklisted) { 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Start with two scan results. 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId scan_id = AddScanResult("scan_id", 1, 0, 0); 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId auto_id = 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddGallery("auto_id", MediaGalleryPrefInfo::kAutoDetected, 2, 0, 0); 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Show the dialog, but cancel it. 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 24746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2U, GetFirstSectionSize()); 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(false); 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Blacklist one and try again. 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(scan_id); 2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 25446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1U, GetFirstSectionSize()); 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(false); 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Adding it as a user gallery should change its type. 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddGallery("scan_id", MediaGalleryPrefInfo::kUserAdded, 1, 0, 0); 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 26046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2U, GetFirstSectionSize()); 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Blacklisting the other while the dialog is open should remove it. 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(auto_id); 26446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1U, GetFirstSectionSize()); 2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(false); 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, dialog_update_count_at_destruction()); 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 27046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(MediaGalleriesScanResultControllerTest, PrefUpdates) { 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId selected = AddScanResult("selected", 1, 0, 0); 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId unselected = AddScanResult("unselected", 1, 0, 0); 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId selected_add_permission = 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddScanResult("selected_add_permission", 1, 0, 0); 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId unselected_add_permission = 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddScanResult("unselected_add_permission", 1, 0, 0); 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId selected_removed = 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddScanResult("selected_removed", 1, 0, 0); 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId unselected_removed = 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddScanResult("unselected_removed", 1, 0, 0); 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId selected_update = 2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddScanResult("selected_update", 1, 0, 0); 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId unselected_update = 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddScanResult("unselected_update", 1, 0, 0); 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->AddGalleryByPath(MakeMediaGalleriesTestingPath("user"), 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefInfo::kUserAdded); 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->AddGalleryByPath( 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MakeMediaGalleriesTestingPath("auto_detected"), 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId blacklisted = gallery_prefs()->AddGalleryByPath( 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MakeMediaGalleriesTestingPath("blacklisted"), 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefInfo::kAutoDetected); 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(blacklisted); 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 29846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(8U, GetFirstSectionSize()); 29946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidToggleEntry(unselected, false); 30046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidToggleEntry(unselected_add_permission, false); 30146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidToggleEntry(unselected_removed, false); 30246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidToggleEntry(unselected_update, false); 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, dialog()->update_count()); 30446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(8U, GetFirstSectionSize()); 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Add permission. 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension(*extension(), 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) unselected_add_permission, 3095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true); 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, dialog()->update_count()); 31146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(7U, GetFirstSectionSize()); 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->SetGalleryPermissionForExtension(*extension(), 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) selected_add_permission, 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true); 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, dialog()->update_count()); 31646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(6U, GetFirstSectionSize()); 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Blacklist scan results. 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(unselected_removed); 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(3, dialog()->update_count()); 32146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(5U, GetFirstSectionSize()); 3225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(selected_removed); 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(4, dialog()->update_count()); 32446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(4U, GetFirstSectionSize()); 3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Update names. 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const MediaGalleryPrefInfo& unselected_update_info = 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->known_galleries().find(unselected_update)->second; 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->AddGallery( 3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) unselected_update_info.device_id, base::FilePath(), 3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefInfo::kScanResult, 3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ASCIIToUTF16("Updated & Unselected"), 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16(), base::string16(), 0, base::Time(), 1, 0, 0); 3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(5, dialog()->update_count()); 33546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(4U, GetFirstSectionSize()); 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const MediaGalleryPrefInfo& selected_update_info = 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->known_galleries().find(selected_update)->second; 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->AddGallery( 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) selected_update_info.device_id, base::FilePath(), 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefInfo::kScanResult, 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ASCIIToUTF16("Updated & Selected"), 3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16(), base::string16(), 0, base::Time(), 1, 0, 0); 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(6, dialog()->update_count()); 34446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(4U, GetFirstSectionSize()); 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 34646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaGalleriesDialogController::Entries results = 34746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->GetSectionEntries(0); 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(selected, results[0].pref_info.pref_id); 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(results[0].selected); 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(selected_update, results[1].pref_info.pref_id); 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(results[1].selected); 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::ASCIIToUTF16("Updated & Selected"), 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) results[1].pref_info.volume_label); 3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(unselected, results[2].pref_info.pref_id); 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(results[2].selected); 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(unselected_update, results[3].pref_info.pref_id); 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(results[3].selected); 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::ASCIIToUTF16("Updated & Unselected"), 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) results[3].pref_info.volume_label); 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(true); 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(4U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 36446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2U, GetFirstSectionSize()); 3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(false); 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 36846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(MediaGalleriesScanResultControllerTest, ForgetGallery) { 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Start with two scan results. 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId scan1 = AddScanResult("scan1", 1, 0, 0); 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId scan2 = AddScanResult("scan2", 2, 0, 0); 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Remove one and then cancel. 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 37646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2U, GetFirstSectionSize()); 37746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidForgetEntry(scan1); 3785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(false); 3795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 3805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Remove one and then have it blacklisted from prefs. 3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 38346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2U, GetFirstSectionSize()); 38446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidForgetEntry(scan1); 3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, dialog()->update_count()); 38646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidToggleEntry(scan2, false); // Uncheck the second. 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gallery_prefs()->ForgetGalleryById(scan1); 3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(true); 3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, dialog_update_count_at_destruction()); 3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Remove the other. 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 39446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1U, GetFirstSectionSize()); 39546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->DidForgetEntry(scan2); 3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(true); 3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0U, gallery_prefs()->GalleriesForExtension(*extension()).size()); 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check that nothing shows up. 4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 40146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(0U, GetFirstSectionSize()); 4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(false); 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 40546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(MediaGalleriesScanResultControllerTest, SortOrder) { 4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Intentionally out of order numerically and alphabetically. 4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId third = AddScanResult("third", 2, 2, 2); 4085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId second = 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddGallery("second", MediaGalleryPrefInfo::kAutoDetected, 9, 0, 0); 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId first = AddScanResult("first", 8, 2, 3); 4115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId fifth = AddScanResult("abb", 3, 0, 0); 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaGalleryPrefId fourth = AddScanResult("aaa", 3, 0, 0); 4135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartDialog(); 41546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaGalleriesDialogController::Entries results = 41646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller()->GetSectionEntries(0); 4175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(5U, results.size()); 4185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(first, results[0].pref_info.pref_id); 4195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(second, results[1].pref_info.pref_id); 4205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(third, results[2].pref_info.pref_id); 4215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(fourth, results[3].pref_info.pref_id); 4225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(fifth, results[4].pref_info.pref_id); 4235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller()->DialogFinished(false); 4245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 425