Chromium Code Reviews| Index: chrome/browser/profiles/profile_shortcut_manager_unittest_win.cc |
| =================================================================== |
| --- chrome/browser/profiles/profile_shortcut_manager_unittest_win.cc (revision 176381) |
| +++ chrome/browser/profiles/profile_shortcut_manager_unittest_win.cc (working copy) |
| @@ -4,6 +4,7 @@ |
| #include <objbase.h> // For CoInitialize(). |
| +#include "base/base_paths.h" |
| #include "base/file_util.h" |
| #include "base/location.h" |
| #include "base/message_loop.h" |
| @@ -35,7 +36,8 @@ |
| file_thread_(BrowserThread::FILE, &message_loop_), |
| profile_shortcut_manager_(NULL), |
| profile_info_cache_(NULL), |
| - fake_user_desktop_(base::DIR_USER_DESKTOP) { |
| + fake_user_desktop_(base::DIR_USER_DESKTOP), |
| + fake_system_desktop_(base::DIR_COMMON_DESKTOP) { |
| } |
| virtual void SetUp() OVERRIDE { |
| @@ -56,7 +58,10 @@ |
| distribution_, |
| ShellUtil::CURRENT_USER, |
| &shortcuts_directory_)); |
| - |
| + ASSERT_TRUE(ShellUtil::GetShortcutPath(ShellUtil::SHORTCUT_LOCATION_DESKTOP, |
| + distribution_, |
| + ShellUtil::SYSTEM_LEVEL, |
| + &system_shortcuts_directory_)); |
| profile_1_name_ = L"My profile"; |
| profile_1_path_ = CreateProfileDirectory(profile_1_name_); |
| profile_2_name_ = L"My profile 2"; |
| @@ -216,6 +221,22 @@ |
| return shortcut_path; |
| } |
| + FilePath CreateRegularSystemLevelShortcut( |
| + const tracked_objects::Location& location) { |
| + installer::Product product(distribution_); |
| + ShellUtil::ShortcutProperties properties(ShellUtil::SYSTEM_LEVEL); |
| + product.AddDefaultShortcutProperties(exe_path_, &properties); |
| + EXPECT_TRUE(ShellUtil::CreateOrUpdateShortcut( |
| + ShellUtil::SHORTCUT_LOCATION_DESKTOP, distribution_, properties, |
| + ShellUtil::SHELL_SHORTCUT_CREATE_ALWAYS)) << location.ToString(); |
| + const FilePath system_level_shortcut_path = |
| + system_shortcuts_directory_.Append(distribution_->GetAppShortCutName() + |
| + installer::kLnkExt); |
| + EXPECT_TRUE(file_util::PathExists(system_level_shortcut_path)) |
| + << location.ToString(); |
| + return system_level_shortcut_path; |
| + } |
| + |
| void RenameProfile(const tracked_objects::Location& location, |
| const FilePath& profile_path, |
| const string16& new_profile_name) { |
| @@ -236,9 +257,11 @@ |
| scoped_ptr<TestingProfileManager> profile_manager_; |
| scoped_ptr<ProfileShortcutManager> profile_shortcut_manager_; |
| ProfileInfoCache* profile_info_cache_; |
| + FilePath exe_path_; |
| base::ScopedPathOverride fake_user_desktop_; |
| - FilePath exe_path_; |
| FilePath shortcuts_directory_; |
| + base::ScopedPathOverride fake_system_desktop_; |
| + FilePath system_shortcuts_directory_; |
| string16 profile_1_name_; |
| FilePath profile_1_path_; |
| string16 profile_2_name_; |
| @@ -629,3 +652,75 @@ |
| RunPendingTasks(); |
| EXPECT_FALSE(result.has_shortcuts); |
| } |
| + |
| +TEST_F(ProfileShortcutManagerTest, ProfileShortcutsWithSystemLevelShortcut) { |
| + const FilePath system_level_shortcut_path = |
| + CreateRegularSystemLevelShortcut(FROM_HERE); |
| + |
| + // Create the initial profile. |
| + profile_info_cache_->AddProfileToCache(profile_1_path_, profile_1_name_, |
| + string16(), 0, false); |
| + RunPendingTasks(); |
| + ASSERT_EQ(1U, profile_info_cache_->GetNumberOfProfiles()); |
| + |
| + // Ensure system level continues to exist and user level was not created. |
|
gab
2013/01/15 23:09:14
nit: We tend to write "system-level" with a dash a
Alexei Svitkine (slow)
2013/01/16 16:11:44
Done.
|
| + EXPECT_TRUE(file_util::PathExists(system_level_shortcut_path)); |
| + EXPECT_FALSE(file_util::PathExists( |
| + GetDefaultShortcutPathForProfile(string16()))); |
| + |
| + // Create another profile with a shortcut and ensure both profiles receive |
| + // user level profile shortcuts and the system level one still exists. |
| + CreateProfileWithShortcut(FROM_HERE, profile_2_name_, profile_2_path_); |
| + ValidateProfileShortcut(FROM_HERE, profile_1_name_, profile_1_path_); |
| + ValidateProfileShortcut(FROM_HERE, profile_2_name_, profile_2_path_); |
| + EXPECT_TRUE(file_util::PathExists(system_level_shortcut_path)); |
| +} |
| + |
| +TEST_F(ProfileShortcutManagerTest, |
| + DeleteSecondToLastProfileWithSystemLevelShortcut) { |
| + SetupAndCreateTwoShortcuts(FROM_HERE); |
| + |
| + const FilePath system_level_shortcut_path = |
| + CreateRegularSystemLevelShortcut(FROM_HERE); |
| + |
| + // Delete a profile and verify that only the system level shortcut still |
| + // exists. |
| + profile_info_cache_->DeleteProfileFromCache(profile_1_path_); |
| + RunPendingTasks(); |
| + |
| + EXPECT_TRUE(file_util::PathExists(system_level_shortcut_path)); |
| + EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(string16())); |
| + EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_1_name_)); |
| + EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_2_name_)); |
| +} |
| + |
| +TEST_F(ProfileShortcutManagerTest, |
| + DeleteSecondToLastProfileWithShortcutWhenSystemLevelShortcutExists) { |
| + SetupAndCreateTwoShortcuts(FROM_HERE); |
| + |
| + const FilePath profile_1_shortcut_path = |
| + GetDefaultShortcutPathForProfile(profile_1_name_); |
| + const FilePath profile_2_shortcut_path = |
| + GetDefaultShortcutPathForProfile(profile_2_name_); |
| + |
| + // Delete the shortcut for the first profile, but keep the one for the 2nd. |
| + ASSERT_TRUE(file_util::Delete(profile_1_shortcut_path, false)); |
| + ASSERT_FALSE(file_util::PathExists(profile_1_shortcut_path)); |
| + ASSERT_TRUE(file_util::PathExists(profile_2_shortcut_path)); |
| + |
| + const FilePath system_level_shortcut_path = |
| + CreateRegularSystemLevelShortcut(FROM_HERE); |
| + |
| + // Delete the profile that has a shortcut, which will exercise the non-profile |
| + // shortcut creation path in |DeleteDesktopShortcutsAndIconFile()|, which is |
| + // not covered by the |DeleteSecondToLastProfileWithSystemLevelShortcut| test. |
| + profile_info_cache_->DeleteProfileFromCache(profile_2_path_); |
| + RunPendingTasks(); |
| + |
| + // Verify that only the system level shortcut still exists. |
| + EXPECT_TRUE(file_util::PathExists(system_level_shortcut_path)); |
| + EXPECT_FALSE(file_util::PathExists( |
| + GetDefaultShortcutPathForProfile(string16()))); |
| + EXPECT_FALSE(file_util::PathExists(profile_1_shortcut_path)); |
| + EXPECT_FALSE(file_util::PathExists(profile_2_shortcut_path)); |
| +} |