Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(601)

Unified Diff: chrome/browser/profiles/profile_shortcut_manager_unittest_win.cc

Issue 11876027: ProfileShortcutManagerWin: Don't create user level shortcut when system level one exists. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/profiles/profile_shortcut_manager_win.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.
+ 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));
+}
« no previous file with comments | « no previous file | chrome/browser/profiles/profile_shortcut_manager_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698