| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <objbase.h> // For CoInitialize(). | 5 #include <objbase.h> // For CoInitialize(). |
| 6 | 6 |
| 7 #include "base/base_paths.h" | 7 #include "base/base_paths.h" |
| 8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
| 9 #include "base/location.h" | 9 #include "base/location.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 11 #include "base/path_service.h" | 11 #include "base/path_service.h" |
| 12 #include "base/strings/string16.h" | 12 #include "base/strings/string16.h" |
| 13 #include "base/test/scoped_path_override.h" | 13 #include "base/test/scoped_path_override.h" |
| 14 #include "base/test/test_shortcut_win.h" | 14 #include "base/test/test_shortcut_win.h" |
| 15 #include "base/win/shortcut.h" | 15 #include "base/win/shortcut.h" |
| 16 #include "chrome/browser/profiles/profile.h" | 16 #include "chrome/browser/profiles/profile.h" |
| 17 #include "chrome/browser/profiles/profile_attributes_entry.h" |
| 18 #include "chrome/browser/profiles/profile_attributes_storage.h" |
| 17 #include "chrome/browser/profiles/profile_manager.h" | 19 #include "chrome/browser/profiles/profile_manager.h" |
| 18 #include "chrome/browser/profiles/profile_shortcut_manager.h" | 20 #include "chrome/browser/profiles/profile_shortcut_manager.h" |
| 19 #include "chrome/browser/profiles/profile_shortcut_manager_win.h" | 21 #include "chrome/browser/profiles/profile_shortcut_manager_win.h" |
| 20 #include "chrome/browser/shell_integration.h" | 22 #include "chrome/browser/shell_integration.h" |
| 21 #include "chrome/grit/chromium_strings.h" | 23 #include "chrome/grit/chromium_strings.h" |
| 22 #include "chrome/installer/util/browser_distribution.h" | 24 #include "chrome/installer/util/browser_distribution.h" |
| 23 #include "chrome/installer/util/product.h" | 25 #include "chrome/installer/util/product.h" |
| 24 #include "chrome/installer/util/shell_util.h" | 26 #include "chrome/installer/util/shell_util.h" |
| 25 #include "chrome/test/base/testing_browser_process.h" | 27 #include "chrome/test/base/testing_browser_process.h" |
| 26 #include "chrome/test/base/testing_profile.h" | 28 #include "chrome/test/base/testing_profile.h" |
| 27 #include "chrome/test/base/testing_profile_manager.h" | 29 #include "chrome/test/base/testing_profile_manager.h" |
| 28 #include "content/public/test/test_browser_thread.h" | 30 #include "content/public/test/test_browser_thread.h" |
| 29 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
| 30 #include "ui/base/l10n/l10n_util.h" | 32 #include "ui/base/l10n/l10n_util.h" |
| 31 | 33 |
| 32 using content::BrowserThread; | 34 using content::BrowserThread; |
| 33 | 35 |
| 34 class ProfileShortcutManagerTest : public testing::Test { | 36 class ProfileShortcutManagerTest : public testing::Test { |
| 35 protected: | 37 protected: |
| 36 ProfileShortcutManagerTest() | 38 ProfileShortcutManagerTest() |
| 37 : ui_thread_(BrowserThread::UI, &message_loop_), | 39 : ui_thread_(BrowserThread::UI, &message_loop_), |
| 38 file_thread_(BrowserThread::FILE, &message_loop_), | 40 file_thread_(BrowserThread::FILE, &message_loop_), |
| 39 profile_info_cache_(NULL), | 41 profile_attributes_storage_(NULL), |
| 40 fake_user_desktop_(base::DIR_USER_DESKTOP), | 42 fake_user_desktop_(base::DIR_USER_DESKTOP), |
| 41 fake_system_desktop_(base::DIR_COMMON_DESKTOP) { | 43 fake_system_desktop_(base::DIR_COMMON_DESKTOP) { |
| 42 } | 44 } |
| 43 | 45 |
| 44 void SetUp() override { | 46 void SetUp() override { |
| 45 CoInitialize(NULL); | 47 CoInitialize(NULL); |
| 46 | 48 |
| 47 TestingBrowserProcess* browser_process = | 49 TestingBrowserProcess* browser_process = |
| 48 TestingBrowserProcess::GetGlobal(); | 50 TestingBrowserProcess::GetGlobal(); |
| 49 profile_manager_.reset(new TestingProfileManager(browser_process)); | 51 profile_manager_.reset(new TestingProfileManager(browser_process)); |
| 50 ASSERT_TRUE(profile_manager_->SetUp()); | 52 ASSERT_TRUE(profile_manager_->SetUp()); |
| 51 profile_info_cache_ = profile_manager_->profile_info_cache(); | 53 profile_attributes_storage_ = |
| 54 profile_manager_->profile_attributes_storage(); |
| 52 profile_shortcut_manager_.reset( | 55 profile_shortcut_manager_.reset( |
| 53 ProfileShortcutManager::Create(profile_manager_->profile_manager())); | 56 ProfileShortcutManager::Create(profile_manager_->profile_manager())); |
| 54 profile_1_name_ = L"My profile"; | 57 profile_1_name_ = L"My profile"; |
| 55 profile_1_path_ = CreateProfileDirectory(profile_1_name_); | 58 profile_1_path_ = CreateProfileDirectory(profile_1_name_); |
| 56 profile_2_name_ = L"My profile 2"; | 59 profile_2_name_ = L"My profile 2"; |
| 57 profile_2_path_ = CreateProfileDirectory(profile_2_name_); | 60 profile_2_path_ = CreateProfileDirectory(profile_2_name_); |
| 58 profile_3_name_ = L"My profile 3"; | 61 profile_3_name_ = L"My profile 3"; |
| 59 profile_3_path_ = CreateProfileDirectory(profile_3_name_); | 62 profile_3_path_ = CreateProfileDirectory(profile_3_name_); |
| 60 } | 63 } |
| 61 | 64 |
| 62 void TearDown() override { | 65 void TearDown() override { |
| 63 message_loop_.RunUntilIdle(); | 66 message_loop_.RunUntilIdle(); |
| 64 | 67 |
| 65 // Delete all profiles and ensure their shortcuts got removed. | 68 // Delete all profiles and ensure their shortcuts got removed. |
| 66 const int num_profiles = profile_info_cache_->GetNumberOfProfiles(); | 69 const int num_profiles = profile_attributes_storage_->GetNumberOfProfiles(); |
| 67 for (int i = 0; i < num_profiles; ++i) { | 70 for (int i = 0; i < num_profiles; ++i) { |
| 68 const base::FilePath profile_path = | 71 std::vector<ProfileAttributesEntry*> entries = |
| 69 profile_info_cache_->GetPathOfProfileAtIndex(0); | 72 profile_attributes_storage_->GetAllProfilesAttributes(); |
| 70 base::string16 profile_name = | 73 const base::FilePath profile_path = entries[0]->GetPath(); |
| 71 profile_info_cache_->GetNameOfProfileAtIndex(0); | 74 base::string16 profile_name = entries[0]->GetName(); |
| 72 profile_info_cache_->DeleteProfileFromCache(profile_path); | 75 profile_attributes_storage_->RemoveProfile(profile_path); |
| 73 RunPendingTasks(); | 76 RunPendingTasks(); |
| 74 ASSERT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_name)); | 77 ASSERT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_name)); |
| 75 // The icon file is not deleted until the profile directory is deleted. | 78 // The icon file is not deleted until the profile directory is deleted. |
| 76 const base::FilePath icon_path = | 79 const base::FilePath icon_path = |
| 77 profiles::internal::GetProfileIconPath(profile_path); | 80 profiles::internal::GetProfileIconPath(profile_path); |
| 78 ASSERT_TRUE(base::PathExists(icon_path)); | 81 ASSERT_TRUE(base::PathExists(icon_path)); |
| 79 } | 82 } |
| 80 } | 83 } |
| 81 | 84 |
| 82 base::FilePath CreateProfileDirectory(const base::string16& profile_name) { | 85 base::FilePath CreateProfileDirectory(const base::string16& profile_name) { |
| 83 const base::FilePath profile_path = | 86 const base::FilePath profile_path = |
| 84 profile_info_cache_->GetUserDataDir().Append(profile_name); | 87 profile_attributes_storage_->GetUserDataDir().Append(profile_name); |
| 85 base::CreateDirectory(profile_path); | 88 base::CreateDirectory(profile_path); |
| 86 return profile_path; | 89 return profile_path; |
| 87 } | 90 } |
| 88 | 91 |
| 89 void RunPendingTasks() { | 92 void RunPendingTasks() { |
| 90 base::MessageLoop::current()->PostTask(FROM_HERE, | 93 base::MessageLoop::current()->PostTask(FROM_HERE, |
| 91 base::MessageLoop::QuitClosure()); | 94 base::MessageLoop::QuitClosure()); |
| 92 base::MessageLoop::current()->Run(); | 95 base::MessageLoop::current()->Run(); |
| 93 } | 96 } |
| 94 | 97 |
| 95 void SetupDefaultProfileShortcut(const tracked_objects::Location& location) { | 98 void SetupDefaultProfileShortcut(const tracked_objects::Location& location) { |
| 96 ASSERT_EQ(0, profile_info_cache_->GetNumberOfProfiles()) | 99 ASSERT_EQ(0, profile_attributes_storage_->GetNumberOfProfiles()) |
| 97 << location.ToString(); | 100 << location.ToString(); |
| 98 ASSERT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_1_name_)) | 101 ASSERT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_1_name_)) |
| 99 << location.ToString(); | 102 << location.ToString(); |
| 100 profile_info_cache_->AddProfileToCache(profile_1_path_, profile_1_name_, | 103 profile_attributes_storage_->AddProfile(profile_1_path_, profile_1_name_, |
| 101 std::string(), base::string16(), 0, | 104 std::string(), base::string16(), 0, |
| 102 std::string()); | 105 std::string()); |
| 103 // Also create a non-badged shortcut for Chrome, which is conveniently done | 106 // Also create a non-badged shortcut for Chrome, which is conveniently done |
| 104 // by |CreateProfileShortcut()| since there is only one profile. | 107 // by |CreateProfileShortcut()| since there is only one profile. |
| 105 profile_shortcut_manager_->CreateProfileShortcut(profile_1_path_); | 108 profile_shortcut_manager_->CreateProfileShortcut(profile_1_path_); |
| 106 RunPendingTasks(); | 109 RunPendingTasks(); |
| 107 // Verify that there's now a shortcut with no profile information. | 110 // Verify that there's now a shortcut with no profile information. |
| 108 ValidateNonProfileShortcut(location); | 111 ValidateNonProfileShortcut(location); |
| 109 } | 112 } |
| 110 | 113 |
| 111 void SetupAndCreateTwoShortcuts(const tracked_objects::Location& location) { | 114 void SetupAndCreateTwoShortcuts(const tracked_objects::Location& location) { |
| 112 SetupDefaultProfileShortcut(location); | 115 SetupDefaultProfileShortcut(location); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 const base::FilePath shortcut_path = | 182 const base::FilePath shortcut_path = |
| 180 GetDefaultShortcutPathForProfile(base::string16()); | 183 GetDefaultShortcutPathForProfile(base::string16()); |
| 181 ValidateNonProfileShortcutAtPath(location, shortcut_path); | 184 ValidateNonProfileShortcutAtPath(location, shortcut_path); |
| 182 } | 185 } |
| 183 | 186 |
| 184 void CreateProfileWithShortcut(const tracked_objects::Location& location, | 187 void CreateProfileWithShortcut(const tracked_objects::Location& location, |
| 185 const base::string16& profile_name, | 188 const base::string16& profile_name, |
| 186 const base::FilePath& profile_path) { | 189 const base::FilePath& profile_path) { |
| 187 ASSERT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_name)) | 190 ASSERT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_name)) |
| 188 << location.ToString(); | 191 << location.ToString(); |
| 189 profile_info_cache_->AddProfileToCache(profile_path, profile_name, | 192 profile_attributes_storage_->AddProfile(profile_path, profile_name, |
| 190 std::string(), base::string16(), 0, | 193 std::string(), base::string16(), 0, |
| 191 std::string()); | 194 std::string()); |
| 192 profile_shortcut_manager_->CreateProfileShortcut(profile_path); | 195 profile_shortcut_manager_->CreateProfileShortcut(profile_path); |
| 193 RunPendingTasks(); | 196 RunPendingTasks(); |
| 194 ValidateProfileShortcut(location, profile_name, profile_path); | 197 ValidateProfileShortcut(location, profile_name, profile_path); |
| 195 } | 198 } |
| 196 | 199 |
| 197 // Creates a regular (non-profile) desktop shortcut with the given name and | 200 // Creates a regular (non-profile) desktop shortcut with the given name and |
| 198 // returns its path. Fails the test if an error occurs. | 201 // returns its path. Fails the test if an error occurs. |
| 199 base::FilePath CreateRegularShortcutWithName( | 202 base::FilePath CreateRegularShortcutWithName( |
| 200 const tracked_objects::Location& location, | 203 const tracked_objects::Location& location, |
| 201 const base::string16& shortcut_name) { | 204 const base::string16& shortcut_name) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 230 GetShortcutName(BrowserDistribution::SHORTCUT_CHROME) + | 233 GetShortcutName(BrowserDistribution::SHORTCUT_CHROME) + |
| 231 installer::kLnkExt); | 234 installer::kLnkExt); |
| 232 EXPECT_TRUE(base::PathExists(system_level_shortcut_path)) | 235 EXPECT_TRUE(base::PathExists(system_level_shortcut_path)) |
| 233 << location.ToString(); | 236 << location.ToString(); |
| 234 return system_level_shortcut_path; | 237 return system_level_shortcut_path; |
| 235 } | 238 } |
| 236 | 239 |
| 237 void RenameProfile(const tracked_objects::Location& location, | 240 void RenameProfile(const tracked_objects::Location& location, |
| 238 const base::FilePath& profile_path, | 241 const base::FilePath& profile_path, |
| 239 const base::string16& new_profile_name) { | 242 const base::string16& new_profile_name) { |
| 240 const size_t profile_index = | 243 ProfileAttributesEntry* entry; |
| 241 profile_info_cache_->GetIndexOfProfileWithPath(profile_2_path_); | 244 ASSERT_TRUE(profile_attributes_storage_->GetProfileAttributesWithPath( |
| 242 ASSERT_NE(std::string::npos, profile_index); | 245 profile_2_path_, &entry)); |
| 243 ASSERT_NE(profile_info_cache_->GetNameOfProfileAtIndex(profile_index), | 246 ASSERT_NE(entry->GetName(), new_profile_name); |
| 244 new_profile_name); | 247 entry->SetName(new_profile_name); |
| 245 profile_info_cache_->SetNameOfProfileAtIndex(profile_index, | |
| 246 new_profile_name); | |
| 247 RunPendingTasks(); | 248 RunPendingTasks(); |
| 248 } | 249 } |
| 249 | 250 |
| 250 BrowserDistribution* GetDistribution() { | 251 BrowserDistribution* GetDistribution() { |
| 251 return BrowserDistribution::GetDistribution(); | 252 return BrowserDistribution::GetDistribution(); |
| 252 } | 253 } |
| 253 | 254 |
| 254 base::FilePath GetExePath() { | 255 base::FilePath GetExePath() { |
| 255 base::FilePath exe_path; | 256 base::FilePath exe_path; |
| 256 EXPECT_TRUE(PathService::Get(base::FILE_EXE, &exe_path)); | 257 EXPECT_TRUE(PathService::Get(base::FILE_EXE, &exe_path)); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 273 ShellUtil::SYSTEM_LEVEL, | 274 ShellUtil::SYSTEM_LEVEL, |
| 274 &system_shortcuts_directory)); | 275 &system_shortcuts_directory)); |
| 275 return system_shortcuts_directory; | 276 return system_shortcuts_directory; |
| 276 } | 277 } |
| 277 | 278 |
| 278 base::MessageLoopForUI message_loop_; | 279 base::MessageLoopForUI message_loop_; |
| 279 content::TestBrowserThread ui_thread_; | 280 content::TestBrowserThread ui_thread_; |
| 280 content::TestBrowserThread file_thread_; | 281 content::TestBrowserThread file_thread_; |
| 281 scoped_ptr<TestingProfileManager> profile_manager_; | 282 scoped_ptr<TestingProfileManager> profile_manager_; |
| 282 scoped_ptr<ProfileShortcutManager> profile_shortcut_manager_; | 283 scoped_ptr<ProfileShortcutManager> profile_shortcut_manager_; |
| 283 ProfileInfoCache* profile_info_cache_; | 284 ProfileAttributesStorage* profile_attributes_storage_; |
| 284 base::ScopedPathOverride fake_user_desktop_; | 285 base::ScopedPathOverride fake_user_desktop_; |
| 285 base::ScopedPathOverride fake_system_desktop_; | 286 base::ScopedPathOverride fake_system_desktop_; |
| 286 base::string16 profile_1_name_; | 287 base::string16 profile_1_name_; |
| 287 base::FilePath profile_1_path_; | 288 base::FilePath profile_1_path_; |
| 288 base::string16 profile_2_name_; | 289 base::string16 profile_2_name_; |
| 289 base::FilePath profile_2_path_; | 290 base::FilePath profile_2_path_; |
| 290 base::string16 profile_3_name_; | 291 base::string16 profile_3_name_; |
| 291 base::FilePath profile_3_path_; | 292 base::FilePath profile_3_path_; |
| 292 }; | 293 }; |
| 293 | 294 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 EXPECT_EQ( | 329 EXPECT_EQ( |
| 329 distribution->GetShortcutName(BrowserDistribution::SHORTCUT_CHROME) + | 330 distribution->GetShortcutName(BrowserDistribution::SHORTCUT_CHROME) + |
| 330 installer::kLnkExt, | 331 installer::kLnkExt, |
| 331 profiles::internal::GetShortcutFilenameForProfile(base::string16(), | 332 profiles::internal::GetShortcutFilenameForProfile(base::string16(), |
| 332 distribution)); | 333 distribution)); |
| 333 } | 334 } |
| 334 | 335 |
| 335 TEST_F(ProfileShortcutManagerTest, ShortcutFlags) { | 336 TEST_F(ProfileShortcutManagerTest, ShortcutFlags) { |
| 336 const base::string16 kProfileName = L"MyProfileX"; | 337 const base::string16 kProfileName = L"MyProfileX"; |
| 337 const base::FilePath profile_path = | 338 const base::FilePath profile_path = |
| 338 profile_info_cache_->GetUserDataDir().Append(kProfileName); | 339 profile_attributes_storage_->GetUserDataDir().Append(kProfileName); |
| 339 EXPECT_EQ(L"--profile-directory=\"" + kProfileName + L"\"", | 340 EXPECT_EQ(L"--profile-directory=\"" + kProfileName + L"\"", |
| 340 profiles::internal::CreateProfileShortcutFlags(profile_path)); | 341 profiles::internal::CreateProfileShortcutFlags(profile_path)); |
| 341 } | 342 } |
| 342 | 343 |
| 343 TEST_F(ProfileShortcutManagerTest, DesktopShortcutsCreate) { | 344 TEST_F(ProfileShortcutManagerTest, DesktopShortcutsCreate) { |
| 344 SetupDefaultProfileShortcut(FROM_HERE); | 345 SetupDefaultProfileShortcut(FROM_HERE); |
| 345 // Validation is done by |ValidateProfileShortcutAtPath()| which is called | 346 // Validation is done by |ValidateProfileShortcutAtPath()| which is called |
| 346 // by |CreateProfileWithShortcut()|. | 347 // by |CreateProfileWithShortcut()|. |
| 347 CreateProfileWithShortcut(FROM_HERE, profile_2_name_, profile_2_path_); | 348 CreateProfileWithShortcut(FROM_HERE, profile_2_name_, profile_2_path_); |
| 348 } | 349 } |
| 349 | 350 |
| 350 TEST_F(ProfileShortcutManagerTest, DesktopShortcutsUpdate) { | 351 TEST_F(ProfileShortcutManagerTest, DesktopShortcutsUpdate) { |
| 351 SetupDefaultProfileShortcut(FROM_HERE); | 352 SetupDefaultProfileShortcut(FROM_HERE); |
| 352 CreateProfileWithShortcut(FROM_HERE, profile_2_name_, profile_2_path_); | 353 CreateProfileWithShortcut(FROM_HERE, profile_2_name_, profile_2_path_); |
| 353 | 354 |
| 354 // Cause an update in ProfileShortcutManager by modifying the profile info | 355 // Cause an update in ProfileShortcutManager by modifying the profile info |
| 355 // cache. | 356 // cache. |
| 356 const base::string16 new_profile_2_name = L"New Profile Name"; | 357 const base::string16 new_profile_2_name = L"New Profile Name"; |
| 357 RenameProfile(FROM_HERE, profile_2_path_, new_profile_2_name); | 358 RenameProfile(FROM_HERE, profile_2_path_, new_profile_2_name); |
| 358 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_2_name_)); | 359 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_2_name_)); |
| 359 ValidateProfileShortcut(FROM_HERE, new_profile_2_name, profile_2_path_); | 360 ValidateProfileShortcut(FROM_HERE, new_profile_2_name, profile_2_path_); |
| 360 } | 361 } |
| 361 | 362 |
| 362 TEST_F(ProfileShortcutManagerTest, CreateSecondProfileBadgesFirstShortcut) { | 363 TEST_F(ProfileShortcutManagerTest, CreateSecondProfileBadgesFirstShortcut) { |
| 363 SetupDefaultProfileShortcut(FROM_HERE); | 364 SetupDefaultProfileShortcut(FROM_HERE); |
| 364 // Assert that a shortcut without a profile name exists. | 365 // Assert that a shortcut without a profile name exists. |
| 365 ASSERT_TRUE(ProfileShortcutExistsAtDefaultPath(base::string16())); | 366 ASSERT_TRUE(ProfileShortcutExistsAtDefaultPath(base::string16())); |
| 366 | 367 |
| 367 // Create a second profile without a shortcut. | 368 // Create a second profile without a shortcut. |
| 368 profile_info_cache_->AddProfileToCache(profile_2_path_, profile_2_name_, | 369 profile_attributes_storage_->AddProfile(profile_2_path_, profile_2_name_, |
| 369 std::string(), base::string16(), 0, | 370 std::string(), base::string16(), 0, |
| 370 std::string()); | 371 std::string()); |
| 371 RunPendingTasks(); | 372 RunPendingTasks(); |
| 372 | 373 |
| 373 // Ensure that the second profile doesn't have a shortcut and that the first | 374 // Ensure that the second profile doesn't have a shortcut and that the first |
| 374 // profile's shortcut got renamed and badged. | 375 // profile's shortcut got renamed and badged. |
| 375 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_2_name_)); | 376 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_2_name_)); |
| 376 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(base::string16())); | 377 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(base::string16())); |
| 377 ValidateProfileShortcut(FROM_HERE, profile_1_name_, profile_1_path_); | 378 ValidateProfileShortcut(FROM_HERE, profile_1_name_, profile_1_path_); |
| 378 } | 379 } |
| 379 | 380 |
| 380 TEST_F(ProfileShortcutManagerTest, DesktopShortcutsDeleteSecondToLast) { | 381 TEST_F(ProfileShortcutManagerTest, DesktopShortcutsDeleteSecondToLast) { |
| 381 SetupAndCreateTwoShortcuts(FROM_HERE); | 382 SetupAndCreateTwoShortcuts(FROM_HERE); |
| 382 | 383 |
| 383 // Delete one shortcut. | 384 // Delete one shortcut. |
| 384 profile_info_cache_->DeleteProfileFromCache(profile_2_path_); | 385 profile_attributes_storage_->RemoveProfile(profile_2_path_); |
| 385 RunPendingTasks(); | 386 RunPendingTasks(); |
| 386 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_2_name_)); | 387 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_2_name_)); |
| 387 | 388 |
| 388 // Verify that the profile name has been removed from the remaining shortcut. | 389 // Verify that the profile name has been removed from the remaining shortcut. |
| 389 ValidateNonProfileShortcut(FROM_HERE); | 390 ValidateNonProfileShortcut(FROM_HERE); |
| 390 // Verify that an additional shortcut, with the default profile's name does | 391 // Verify that an additional shortcut, with the default profile's name does |
| 391 // not exist. | 392 // not exist. |
| 392 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_1_name_)); | 393 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_1_name_)); |
| 393 } | 394 } |
| 394 | 395 |
| 395 TEST_F(ProfileShortcutManagerTest, DeleteSecondToLastProfileWithoutShortcut) { | 396 TEST_F(ProfileShortcutManagerTest, DeleteSecondToLastProfileWithoutShortcut) { |
| 396 SetupAndCreateTwoShortcuts(FROM_HERE); | 397 SetupAndCreateTwoShortcuts(FROM_HERE); |
| 397 | 398 |
| 398 const base::FilePath profile_1_shortcut_path = | 399 const base::FilePath profile_1_shortcut_path = |
| 399 GetDefaultShortcutPathForProfile(profile_1_name_); | 400 GetDefaultShortcutPathForProfile(profile_1_name_); |
| 400 const base::FilePath profile_2_shortcut_path = | 401 const base::FilePath profile_2_shortcut_path = |
| 401 GetDefaultShortcutPathForProfile(profile_2_name_); | 402 GetDefaultShortcutPathForProfile(profile_2_name_); |
| 402 | 403 |
| 403 // Delete the shortcut for the first profile, but keep the one for the 2nd. | 404 // Delete the shortcut for the first profile, but keep the one for the 2nd. |
| 404 ASSERT_TRUE(base::DeleteFile(profile_1_shortcut_path, false)); | 405 ASSERT_TRUE(base::DeleteFile(profile_1_shortcut_path, false)); |
| 405 ASSERT_FALSE(base::PathExists(profile_1_shortcut_path)); | 406 ASSERT_FALSE(base::PathExists(profile_1_shortcut_path)); |
| 406 ASSERT_TRUE(base::PathExists(profile_2_shortcut_path)); | 407 ASSERT_TRUE(base::PathExists(profile_2_shortcut_path)); |
| 407 | 408 |
| 408 // Delete the profile that doesn't have a shortcut. | 409 // Delete the profile that doesn't have a shortcut. |
| 409 profile_info_cache_->DeleteProfileFromCache(profile_1_path_); | 410 profile_attributes_storage_->RemoveProfile(profile_1_path_); |
| 410 RunPendingTasks(); | 411 RunPendingTasks(); |
| 411 | 412 |
| 412 // Verify that the remaining shortcut does not have a profile name. | 413 // Verify that the remaining shortcut does not have a profile name. |
| 413 ValidateNonProfileShortcut(FROM_HERE); | 414 ValidateNonProfileShortcut(FROM_HERE); |
| 414 // Verify that shortcuts with profile names do not exist. | 415 // Verify that shortcuts with profile names do not exist. |
| 415 EXPECT_FALSE(base::PathExists(profile_1_shortcut_path)); | 416 EXPECT_FALSE(base::PathExists(profile_1_shortcut_path)); |
| 416 EXPECT_FALSE(base::PathExists(profile_2_shortcut_path)); | 417 EXPECT_FALSE(base::PathExists(profile_2_shortcut_path)); |
| 417 } | 418 } |
| 418 | 419 |
| 419 TEST_F(ProfileShortcutManagerTest, DeleteSecondToLastProfileWithShortcut) { | 420 TEST_F(ProfileShortcutManagerTest, DeleteSecondToLastProfileWithShortcut) { |
| 420 SetupAndCreateTwoShortcuts(FROM_HERE); | 421 SetupAndCreateTwoShortcuts(FROM_HERE); |
| 421 | 422 |
| 422 const base::FilePath profile_1_shortcut_path = | 423 const base::FilePath profile_1_shortcut_path = |
| 423 GetDefaultShortcutPathForProfile(profile_1_name_); | 424 GetDefaultShortcutPathForProfile(profile_1_name_); |
| 424 const base::FilePath profile_2_shortcut_path = | 425 const base::FilePath profile_2_shortcut_path = |
| 425 GetDefaultShortcutPathForProfile(profile_2_name_); | 426 GetDefaultShortcutPathForProfile(profile_2_name_); |
| 426 | 427 |
| 427 // Delete the shortcut for the first profile, but keep the one for the 2nd. | 428 // Delete the shortcut for the first profile, but keep the one for the 2nd. |
| 428 ASSERT_TRUE(base::DeleteFile(profile_1_shortcut_path, false)); | 429 ASSERT_TRUE(base::DeleteFile(profile_1_shortcut_path, false)); |
| 429 ASSERT_FALSE(base::PathExists(profile_1_shortcut_path)); | 430 ASSERT_FALSE(base::PathExists(profile_1_shortcut_path)); |
| 430 ASSERT_TRUE(base::PathExists(profile_2_shortcut_path)); | 431 ASSERT_TRUE(base::PathExists(profile_2_shortcut_path)); |
| 431 | 432 |
| 432 // Delete the profile that has a shortcut. | 433 // Delete the profile that has a shortcut. |
| 433 profile_info_cache_->DeleteProfileFromCache(profile_2_path_); | 434 profile_attributes_storage_->RemoveProfile(profile_2_path_); |
| 434 RunPendingTasks(); | 435 RunPendingTasks(); |
| 435 | 436 |
| 436 // Verify that the remaining shortcut does not have a profile name. | 437 // Verify that the remaining shortcut does not have a profile name. |
| 437 ValidateNonProfileShortcut(FROM_HERE); | 438 ValidateNonProfileShortcut(FROM_HERE); |
| 438 // Verify that shortcuts with profile names do not exist. | 439 // Verify that shortcuts with profile names do not exist. |
| 439 EXPECT_FALSE(base::PathExists(profile_1_shortcut_path)); | 440 EXPECT_FALSE(base::PathExists(profile_1_shortcut_path)); |
| 440 EXPECT_FALSE(base::PathExists(profile_2_shortcut_path)); | 441 EXPECT_FALSE(base::PathExists(profile_2_shortcut_path)); |
| 441 } | 442 } |
| 442 | 443 |
| 443 TEST_F(ProfileShortcutManagerTest, DeleteOnlyProfileWithShortcuts) { | 444 TEST_F(ProfileShortcutManagerTest, DeleteOnlyProfileWithShortcuts) { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 458 ASSERT_TRUE(base::DeleteFile(profile_2_shortcut_path, false)); | 459 ASSERT_TRUE(base::DeleteFile(profile_2_shortcut_path, false)); |
| 459 | 460 |
| 460 // Only the shortcut to the third profile should exist. | 461 // Only the shortcut to the third profile should exist. |
| 461 ASSERT_FALSE(base::PathExists(profile_1_shortcut_path)); | 462 ASSERT_FALSE(base::PathExists(profile_1_shortcut_path)); |
| 462 ASSERT_FALSE(base::PathExists(profile_2_shortcut_path)); | 463 ASSERT_FALSE(base::PathExists(profile_2_shortcut_path)); |
| 463 ASSERT_FALSE(base::PathExists(non_profile_shortcut_path)); | 464 ASSERT_FALSE(base::PathExists(non_profile_shortcut_path)); |
| 464 ASSERT_TRUE(base::PathExists(profile_3_shortcut_path)); | 465 ASSERT_TRUE(base::PathExists(profile_3_shortcut_path)); |
| 465 | 466 |
| 466 // Delete the third profile and check that its shortcut is gone and no | 467 // Delete the third profile and check that its shortcut is gone and no |
| 467 // shortcuts have been re-created. | 468 // shortcuts have been re-created. |
| 468 profile_info_cache_->DeleteProfileFromCache(profile_3_path_); | 469 profile_attributes_storage_->RemoveProfile(profile_3_path_); |
| 469 RunPendingTasks(); | 470 RunPendingTasks(); |
| 470 ASSERT_FALSE(base::PathExists(profile_1_shortcut_path)); | 471 ASSERT_FALSE(base::PathExists(profile_1_shortcut_path)); |
| 471 ASSERT_FALSE(base::PathExists(profile_2_shortcut_path)); | 472 ASSERT_FALSE(base::PathExists(profile_2_shortcut_path)); |
| 472 ASSERT_FALSE(base::PathExists(profile_3_shortcut_path)); | 473 ASSERT_FALSE(base::PathExists(profile_3_shortcut_path)); |
| 473 ASSERT_FALSE(base::PathExists(non_profile_shortcut_path)); | 474 ASSERT_FALSE(base::PathExists(non_profile_shortcut_path)); |
| 474 } | 475 } |
| 475 | 476 |
| 476 TEST_F(ProfileShortcutManagerTest, DesktopShortcutsCreateSecond) { | 477 TEST_F(ProfileShortcutManagerTest, DesktopShortcutsCreateSecond) { |
| 477 SetupAndCreateTwoShortcuts(FROM_HERE); | 478 SetupAndCreateTwoShortcuts(FROM_HERE); |
| 478 | 479 |
| 479 // Delete one shortcut. | 480 // Delete one shortcut. |
| 480 profile_info_cache_->DeleteProfileFromCache(profile_2_path_); | 481 profile_attributes_storage_->RemoveProfile(profile_2_path_); |
| 481 RunPendingTasks(); | 482 RunPendingTasks(); |
| 482 | 483 |
| 483 // Verify that a default shortcut exists (no profile name/avatar). | 484 // Verify that a default shortcut exists (no profile name/avatar). |
| 484 ValidateNonProfileShortcut(FROM_HERE); | 485 ValidateNonProfileShortcut(FROM_HERE); |
| 485 // Verify that an additional shortcut, with the first profile's name does | 486 // Verify that an additional shortcut, with the first profile's name does |
| 486 // not exist. | 487 // not exist. |
| 487 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_1_name_)); | 488 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_1_name_)); |
| 488 | 489 |
| 489 // Create a second profile and shortcut. | 490 // Create a second profile and shortcut. |
| 490 CreateProfileWithShortcut(FROM_HERE, profile_2_name_, profile_2_path_); | 491 CreateProfileWithShortcut(FROM_HERE, profile_2_name_, profile_2_path_); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 537 | 538 |
| 538 // Also, copy the shortcut for the first user and ensure it gets preserved. | 539 // Also, copy the shortcut for the first user and ensure it gets preserved. |
| 539 const base::FilePath preserved_profile_1_shortcut_path = | 540 const base::FilePath preserved_profile_1_shortcut_path = |
| 540 GetUserShortcutsDirectory().Append(L"Preserved.lnk"); | 541 GetUserShortcutsDirectory().Append(L"Preserved.lnk"); |
| 541 ASSERT_TRUE(base::CopyFile( | 542 ASSERT_TRUE(base::CopyFile( |
| 542 GetDefaultShortcutPathForProfile(profile_1_name_), | 543 GetDefaultShortcutPathForProfile(profile_1_name_), |
| 543 preserved_profile_1_shortcut_path)); | 544 preserved_profile_1_shortcut_path)); |
| 544 EXPECT_TRUE(base::PathExists(preserved_profile_1_shortcut_path)); | 545 EXPECT_TRUE(base::PathExists(preserved_profile_1_shortcut_path)); |
| 545 | 546 |
| 546 // Delete the profile and ensure both shortcuts were also deleted. | 547 // Delete the profile and ensure both shortcuts were also deleted. |
| 547 profile_info_cache_->DeleteProfileFromCache(profile_2_path_); | 548 profile_attributes_storage_->RemoveProfile(profile_2_path_); |
| 548 RunPendingTasks(); | 549 RunPendingTasks(); |
| 549 EXPECT_FALSE(base::PathExists(profile_2_shortcut_path_1)); | 550 EXPECT_FALSE(base::PathExists(profile_2_shortcut_path_1)); |
| 550 EXPECT_FALSE(base::PathExists(profile_2_shortcut_path_2)); | 551 EXPECT_FALSE(base::PathExists(profile_2_shortcut_path_2)); |
| 551 ValidateNonProfileShortcutAtPath(FROM_HERE, | 552 ValidateNonProfileShortcutAtPath(FROM_HERE, |
| 552 preserved_profile_1_shortcut_path); | 553 preserved_profile_1_shortcut_path); |
| 553 } | 554 } |
| 554 | 555 |
| 555 TEST_F(ProfileShortcutManagerTest, RenamedDesktopShortcutsAfterProfileRename) { | 556 TEST_F(ProfileShortcutManagerTest, RenamedDesktopShortcutsAfterProfileRename) { |
| 556 SetupAndCreateTwoShortcuts(FROM_HERE); | 557 SetupAndCreateTwoShortcuts(FROM_HERE); |
| 557 | 558 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 profile_shortcut_manager_->HasProfileShortcuts(profile_2_path_, callback); | 682 profile_shortcut_manager_->HasProfileShortcuts(profile_2_path_, callback); |
| 682 RunPendingTasks(); | 683 RunPendingTasks(); |
| 683 EXPECT_FALSE(result.has_shortcuts); | 684 EXPECT_FALSE(result.has_shortcuts); |
| 684 } | 685 } |
| 685 | 686 |
| 686 TEST_F(ProfileShortcutManagerTest, ProfileShortcutsWithSystemLevelShortcut) { | 687 TEST_F(ProfileShortcutManagerTest, ProfileShortcutsWithSystemLevelShortcut) { |
| 687 const base::FilePath system_level_shortcut_path = | 688 const base::FilePath system_level_shortcut_path = |
| 688 CreateRegularSystemLevelShortcut(FROM_HERE); | 689 CreateRegularSystemLevelShortcut(FROM_HERE); |
| 689 | 690 |
| 690 // Create the initial profile. | 691 // Create the initial profile. |
| 691 profile_info_cache_->AddProfileToCache(profile_1_path_, profile_1_name_, | 692 profile_attributes_storage_->AddProfile(profile_1_path_, profile_1_name_, |
| 692 std::string(), base::string16(), 0, | 693 std::string(), base::string16(), 0, |
| 693 std::string()); | 694 std::string()); |
| 694 RunPendingTasks(); | 695 RunPendingTasks(); |
| 695 ASSERT_EQ(1U, profile_info_cache_->GetNumberOfProfiles()); | 696 ASSERT_EQ(1U, profile_attributes_storage_->GetNumberOfProfiles()); |
| 696 | 697 |
| 697 // Ensure system-level continues to exist and user-level was not created. | 698 // Ensure system-level continues to exist and user-level was not created. |
| 698 EXPECT_TRUE(base::PathExists(system_level_shortcut_path)); | 699 EXPECT_TRUE(base::PathExists(system_level_shortcut_path)); |
| 699 EXPECT_FALSE(base::PathExists( | 700 EXPECT_FALSE(base::PathExists( |
| 700 GetDefaultShortcutPathForProfile(base::string16()))); | 701 GetDefaultShortcutPathForProfile(base::string16()))); |
| 701 | 702 |
| 702 // Create another profile with a shortcut and ensure both profiles receive | 703 // Create another profile with a shortcut and ensure both profiles receive |
| 703 // user-level profile shortcuts and the system-level one still exists. | 704 // user-level profile shortcuts and the system-level one still exists. |
| 704 CreateProfileWithShortcut(FROM_HERE, profile_2_name_, profile_2_path_); | 705 CreateProfileWithShortcut(FROM_HERE, profile_2_name_, profile_2_path_); |
| 705 ValidateProfileShortcut(FROM_HERE, profile_1_name_, profile_1_path_); | 706 ValidateProfileShortcut(FROM_HERE, profile_1_name_, profile_1_path_); |
| 706 ValidateProfileShortcut(FROM_HERE, profile_2_name_, profile_2_path_); | 707 ValidateProfileShortcut(FROM_HERE, profile_2_name_, profile_2_path_); |
| 707 EXPECT_TRUE(base::PathExists(system_level_shortcut_path)); | 708 EXPECT_TRUE(base::PathExists(system_level_shortcut_path)); |
| 708 | 709 |
| 709 // Create a third profile without a shortcut and ensure it doesn't get one. | 710 // Create a third profile without a shortcut and ensure it doesn't get one. |
| 710 profile_info_cache_->AddProfileToCache(profile_3_path_, profile_3_name_, | 711 profile_attributes_storage_->AddProfile(profile_3_path_, profile_3_name_, |
| 711 std::string(), base::string16(), 0, | 712 std::string(), base::string16(), 0, |
| 712 std::string()); | 713 std::string()); |
| 713 RunPendingTasks(); | 714 RunPendingTasks(); |
| 714 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_3_name_)); | 715 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_3_name_)); |
| 715 | 716 |
| 717 ProfileAttributesEntry* profile_3_entry; |
| 718 ASSERT_TRUE(profile_attributes_storage_->GetProfileAttributesWithPath( |
| 719 profile_3_path_, &profile_3_entry)); |
| 716 // Ensure that changing the avatar icon and the name does not result in a | 720 // Ensure that changing the avatar icon and the name does not result in a |
| 717 // shortcut being created. | 721 // shortcut being created. |
| 718 profile_info_cache_->SetAvatarIconOfProfileAtIndex( | 722 profile_3_entry->SetAvatarIconIndex(3); |
| 719 profile_info_cache_->GetIndexOfProfileWithPath(profile_3_path_), 3); | |
| 720 RunPendingTasks(); | 723 RunPendingTasks(); |
| 721 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_3_name_)); | 724 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_3_name_)); |
| 722 | 725 |
| 723 const base::string16 new_profile_3_name = L"New Name 3"; | 726 const base::string16 new_profile_3_name = L"New Name 3"; |
| 724 profile_info_cache_->SetNameOfProfileAtIndex( | 727 profile_3_entry->SetName(new_profile_3_name); |
| 725 profile_info_cache_->GetIndexOfProfileWithPath(profile_3_path_), | |
| 726 new_profile_3_name); | |
| 727 RunPendingTasks(); | 728 RunPendingTasks(); |
| 728 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_3_name_)); | 729 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_3_name_)); |
| 729 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(new_profile_3_name)); | 730 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(new_profile_3_name)); |
| 730 | 731 |
| 732 ProfileAttributesEntry* profile_2_entry; |
| 733 ASSERT_TRUE(profile_attributes_storage_->GetProfileAttributesWithPath( |
| 734 profile_2_path_, &profile_2_entry)); |
| 731 // Rename the second profile and ensure its shortcut got renamed. | 735 // Rename the second profile and ensure its shortcut got renamed. |
| 732 const base::string16 new_profile_2_name = L"New Name 2"; | 736 const base::string16 new_profile_2_name = L"New Name 2"; |
| 733 profile_info_cache_->SetNameOfProfileAtIndex( | 737 profile_2_entry->SetName(new_profile_2_name); |
| 734 profile_info_cache_->GetIndexOfProfileWithPath(profile_2_path_), | |
| 735 new_profile_2_name); | |
| 736 RunPendingTasks(); | 738 RunPendingTasks(); |
| 737 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_2_name_)); | 739 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_2_name_)); |
| 738 ValidateProfileShortcut(FROM_HERE, new_profile_2_name, profile_2_path_); | 740 ValidateProfileShortcut(FROM_HERE, new_profile_2_name, profile_2_path_); |
| 739 } | 741 } |
| 740 | 742 |
| 741 TEST_F(ProfileShortcutManagerTest, | 743 TEST_F(ProfileShortcutManagerTest, |
| 742 DeleteSecondToLastProfileWithSystemLevelShortcut) { | 744 DeleteSecondToLastProfileWithSystemLevelShortcut) { |
| 743 SetupAndCreateTwoShortcuts(FROM_HERE); | 745 SetupAndCreateTwoShortcuts(FROM_HERE); |
| 744 | 746 |
| 745 const base::FilePath system_level_shortcut_path = | 747 const base::FilePath system_level_shortcut_path = |
| 746 CreateRegularSystemLevelShortcut(FROM_HERE); | 748 CreateRegularSystemLevelShortcut(FROM_HERE); |
| 747 | 749 |
| 748 // Delete a profile and verify that only the system-level shortcut still | 750 // Delete a profile and verify that only the system-level shortcut still |
| 749 // exists. | 751 // exists. |
| 750 profile_info_cache_->DeleteProfileFromCache(profile_1_path_); | 752 profile_attributes_storage_->RemoveProfile(profile_1_path_); |
| 751 RunPendingTasks(); | 753 RunPendingTasks(); |
| 752 | 754 |
| 753 EXPECT_TRUE(base::PathExists(system_level_shortcut_path)); | 755 EXPECT_TRUE(base::PathExists(system_level_shortcut_path)); |
| 754 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(base::string16())); | 756 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(base::string16())); |
| 755 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_1_name_)); | 757 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_1_name_)); |
| 756 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_2_name_)); | 758 EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_2_name_)); |
| 757 } | 759 } |
| 758 | 760 |
| 759 TEST_F(ProfileShortcutManagerTest, | 761 TEST_F(ProfileShortcutManagerTest, |
| 760 DeleteSecondToLastProfileWithShortcutWhenSystemLevelShortcutExists) { | 762 DeleteSecondToLastProfileWithShortcutWhenSystemLevelShortcutExists) { |
| 761 SetupAndCreateTwoShortcuts(FROM_HERE); | 763 SetupAndCreateTwoShortcuts(FROM_HERE); |
| 762 | 764 |
| 763 const base::FilePath profile_1_shortcut_path = | 765 const base::FilePath profile_1_shortcut_path = |
| 764 GetDefaultShortcutPathForProfile(profile_1_name_); | 766 GetDefaultShortcutPathForProfile(profile_1_name_); |
| 765 const base::FilePath profile_2_shortcut_path = | 767 const base::FilePath profile_2_shortcut_path = |
| 766 GetDefaultShortcutPathForProfile(profile_2_name_); | 768 GetDefaultShortcutPathForProfile(profile_2_name_); |
| 767 | 769 |
| 768 // Delete the shortcut for the first profile, but keep the one for the 2nd. | 770 // Delete the shortcut for the first profile, but keep the one for the 2nd. |
| 769 ASSERT_TRUE(base::DeleteFile(profile_1_shortcut_path, false)); | 771 ASSERT_TRUE(base::DeleteFile(profile_1_shortcut_path, false)); |
| 770 ASSERT_FALSE(base::PathExists(profile_1_shortcut_path)); | 772 ASSERT_FALSE(base::PathExists(profile_1_shortcut_path)); |
| 771 ASSERT_TRUE(base::PathExists(profile_2_shortcut_path)); | 773 ASSERT_TRUE(base::PathExists(profile_2_shortcut_path)); |
| 772 | 774 |
| 773 const base::FilePath system_level_shortcut_path = | 775 const base::FilePath system_level_shortcut_path = |
| 774 CreateRegularSystemLevelShortcut(FROM_HERE); | 776 CreateRegularSystemLevelShortcut(FROM_HERE); |
| 775 | 777 |
| 776 // Delete the profile that has a shortcut, which will exercise the non-profile | 778 // Delete the profile that has a shortcut, which will exercise the non-profile |
| 777 // shortcut creation path in |DeleteDesktopShortcuts()|, which is | 779 // shortcut creation path in |DeleteDesktopShortcuts()|, which is |
| 778 // not covered by the |DeleteSecondToLastProfileWithSystemLevelShortcut| test. | 780 // not covered by the |DeleteSecondToLastProfileWithSystemLevelShortcut| test. |
| 779 profile_info_cache_->DeleteProfileFromCache(profile_2_path_); | 781 profile_attributes_storage_->RemoveProfile(profile_2_path_); |
| 780 RunPendingTasks(); | 782 RunPendingTasks(); |
| 781 | 783 |
| 782 // Verify that only the system-level shortcut still exists. | 784 // Verify that only the system-level shortcut still exists. |
| 783 EXPECT_TRUE(base::PathExists(system_level_shortcut_path)); | 785 EXPECT_TRUE(base::PathExists(system_level_shortcut_path)); |
| 784 EXPECT_FALSE(base::PathExists( | 786 EXPECT_FALSE(base::PathExists( |
| 785 GetDefaultShortcutPathForProfile(base::string16()))); | 787 GetDefaultShortcutPathForProfile(base::string16()))); |
| 786 EXPECT_FALSE(base::PathExists(profile_1_shortcut_path)); | 788 EXPECT_FALSE(base::PathExists(profile_1_shortcut_path)); |
| 787 EXPECT_FALSE(base::PathExists(profile_2_shortcut_path)); | 789 EXPECT_FALSE(base::PathExists(profile_2_shortcut_path)); |
| 788 } | 790 } |
| 789 | 791 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 821 std::string badged_icon_1; | 823 std::string badged_icon_1; |
| 822 EXPECT_TRUE(base::ReadFileToString(icon_path_1, &badged_icon_1)); | 824 EXPECT_TRUE(base::ReadFileToString(icon_path_1, &badged_icon_1)); |
| 823 std::string badged_icon_2; | 825 std::string badged_icon_2; |
| 824 EXPECT_TRUE(base::ReadFileToString(icon_path_2, &badged_icon_2)); | 826 EXPECT_TRUE(base::ReadFileToString(icon_path_2, &badged_icon_2)); |
| 825 | 827 |
| 826 EXPECT_NE(badged_icon_1, unbadged_icon_1); | 828 EXPECT_NE(badged_icon_1, unbadged_icon_1); |
| 827 EXPECT_EQ(badged_icon_1, badged_icon_2); | 829 EXPECT_EQ(badged_icon_1, badged_icon_2); |
| 828 | 830 |
| 829 // Deleting the default profile will unbadge the new profile's icon and should | 831 // Deleting the default profile will unbadge the new profile's icon and should |
| 830 // result in an icon that is identical to the unbadged default profile icon. | 832 // result in an icon that is identical to the unbadged default profile icon. |
| 831 profile_info_cache_->DeleteProfileFromCache(profile_1_path_); | 833 profile_attributes_storage_->RemoveProfile(profile_1_path_); |
| 832 RunPendingTasks(); | 834 RunPendingTasks(); |
| 833 | 835 |
| 834 std::string unbadged_icon_2; | 836 std::string unbadged_icon_2; |
| 835 EXPECT_TRUE(base::ReadFileToString(icon_path_2, &unbadged_icon_2)); | 837 EXPECT_TRUE(base::ReadFileToString(icon_path_2, &unbadged_icon_2)); |
| 836 EXPECT_EQ(unbadged_icon_1, unbadged_icon_2); | 838 EXPECT_EQ(unbadged_icon_1, unbadged_icon_2); |
| 837 } | 839 } |
| 838 | 840 |
| 839 TEST_F(ProfileShortcutManagerTest, ProfileIconOnAvatarChange) { | 841 TEST_F(ProfileShortcutManagerTest, ProfileIconOnAvatarChange) { |
| 840 SetupAndCreateTwoShortcuts(FROM_HERE); | 842 SetupAndCreateTwoShortcuts(FROM_HERE); |
| 841 const base::FilePath icon_path_1 = | 843 const base::FilePath icon_path_1 = |
| 842 profiles::internal::GetProfileIconPath(profile_1_path_); | 844 profiles::internal::GetProfileIconPath(profile_1_path_); |
| 843 const base::FilePath icon_path_2 = | 845 const base::FilePath icon_path_2 = |
| 844 profiles::internal::GetProfileIconPath(profile_2_path_); | 846 profiles::internal::GetProfileIconPath(profile_2_path_); |
| 845 const size_t profile_index_1 = | |
| 846 profile_info_cache_->GetIndexOfProfileWithPath(profile_1_path_); | |
| 847 | 847 |
| 848 std::string badged_icon_1; | 848 std::string badged_icon_1; |
| 849 EXPECT_TRUE(base::ReadFileToString(icon_path_1, &badged_icon_1)); | 849 EXPECT_TRUE(base::ReadFileToString(icon_path_1, &badged_icon_1)); |
| 850 std::string badged_icon_2; | 850 std::string badged_icon_2; |
| 851 EXPECT_TRUE(base::ReadFileToString(icon_path_2, &badged_icon_2)); | 851 EXPECT_TRUE(base::ReadFileToString(icon_path_2, &badged_icon_2)); |
| 852 | 852 |
| 853 // Profile 1 and 2 are created with the same icon. | 853 // Profile 1 and 2 are created with the same icon. |
| 854 EXPECT_EQ(badged_icon_1, badged_icon_2); | 854 EXPECT_EQ(badged_icon_1, badged_icon_2); |
| 855 | 855 |
| 856 ProfileAttributesEntry* entry; |
| 857 ASSERT_TRUE(profile_attributes_storage_->GetProfileAttributesWithPath( |
| 858 profile_1_path_, &entry)); |
| 856 // Change profile 1's icon. | 859 // Change profile 1's icon. |
| 857 profile_info_cache_->SetAvatarIconOfProfileAtIndex(profile_index_1, 1); | 860 entry->SetAvatarIconIndex(1); |
| 858 RunPendingTasks(); | 861 RunPendingTasks(); |
| 859 | 862 |
| 860 std::string new_badged_icon_1; | 863 std::string new_badged_icon_1; |
| 861 EXPECT_TRUE(base::ReadFileToString(icon_path_1, &new_badged_icon_1)); | 864 EXPECT_TRUE(base::ReadFileToString(icon_path_1, &new_badged_icon_1)); |
| 862 EXPECT_NE(new_badged_icon_1, badged_icon_1); | 865 EXPECT_NE(new_badged_icon_1, badged_icon_1); |
| 863 | 866 |
| 864 // Ensure the new icon is not the unbadged icon. | 867 // Ensure the new icon is not the unbadged icon. |
| 865 profile_info_cache_->DeleteProfileFromCache(profile_2_path_); | 868 profile_attributes_storage_->RemoveProfile(profile_2_path_); |
| 866 RunPendingTasks(); | 869 RunPendingTasks(); |
| 867 | 870 |
| 868 std::string unbadged_icon_1; | 871 std::string unbadged_icon_1; |
| 869 EXPECT_TRUE(base::ReadFileToString(icon_path_1, &unbadged_icon_1)); | 872 EXPECT_TRUE(base::ReadFileToString(icon_path_1, &unbadged_icon_1)); |
| 870 EXPECT_NE(unbadged_icon_1, new_badged_icon_1); | 873 EXPECT_NE(unbadged_icon_1, new_badged_icon_1); |
| 871 | 874 |
| 872 // Ensure the icon doesn't change on avatar change without 2 profiles. | 875 // Ensure the icon doesn't change on avatar change without 2 profiles. |
| 873 profile_info_cache_->SetAvatarIconOfProfileAtIndex(profile_index_1, 1); | 876 entry->SetAvatarIconIndex(1); |
| 874 RunPendingTasks(); | 877 RunPendingTasks(); |
| 875 | 878 |
| 876 std::string unbadged_icon_1_a; | 879 std::string unbadged_icon_1_a; |
| 877 EXPECT_TRUE(base::ReadFileToString(icon_path_1, &unbadged_icon_1_a)); | 880 EXPECT_TRUE(base::ReadFileToString(icon_path_1, &unbadged_icon_1_a)); |
| 878 EXPECT_EQ(unbadged_icon_1, unbadged_icon_1_a); | 881 EXPECT_EQ(unbadged_icon_1, unbadged_icon_1_a); |
| 879 } | 882 } |
| OLD | NEW |