| Index: chrome/browser/shell_integration_win_unittest.cc
|
| diff --git a/chrome/browser/shell_integration_win_unittest.cc b/chrome/browser/shell_integration_win_unittest.cc
|
| index 04b600d01aff02218c765fcedda398d4e803cfa6..53ff859a6c54029741999b4089b5215203992228 100644
|
| --- a/chrome/browser/shell_integration_win_unittest.cc
|
| +++ b/chrome/browser/shell_integration_win_unittest.cc
|
| @@ -22,27 +22,91 @@
|
|
|
| namespace {
|
|
|
| -class ShellIntegrationWinMigrateShortcutTest : public testing::Test {
|
| +class ShortcutTest : public testing::Test {
|
| protected:
|
| + virtual void CreateShortcuts() = 0;
|
| +
|
| virtual void SetUp() OVERRIDE {
|
| ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
|
|
|
| // A path to a random target.
|
| - base::FilePath other_target;
|
| - file_util::CreateTemporaryFileInDir(temp_dir_.path(), &other_target);
|
| + file_util::CreateTemporaryFileInDir(temp_dir_.path(), &other_target_);
|
|
|
| // This doesn't need to actually have a base name of "chrome.exe".
|
| file_util::CreateTemporaryFileInDir(temp_dir_.path(), &chrome_exe_);
|
| + file_util::CreateTemporaryFileInDir(temp_dir_.path(), &app_host_exe_);
|
|
|
| chrome_app_id_ =
|
| ShellUtil::GetBrowserModelId(BrowserDistribution::GetDistribution(),
|
| true);
|
|
|
| + base::FilePath default_user_data_dir;
|
| + chrome::GetDefaultUserDataDirectory(&default_user_data_dir);
|
| + base::FilePath default_profile_path =
|
| + default_user_data_dir.AppendASCII(chrome::kInitialProfile);
|
| + app_list_app_id_ =
|
| + ShellIntegration::GetAppListAppModelIdForProfile(default_profile_path);
|
| + non_default_profile_ = string16(L"NonDefault");
|
| + non_default_chrome_app_id_ =
|
| + ShellIntegration::GetChromiumModelIdForProfile(
|
| + default_user_data_dir.Append(non_default_profile_));
|
| +
|
| + CreateShortcuts();
|
| + }
|
| +
|
| + void AddTestShortcut(
|
| + const base::win::ShortcutProperties& shortcut_properties) {
|
| + shortcuts_properties_.push_back(shortcut_properties);
|
| + base::FilePath shortcut_path =
|
| + temp_dir_.path().Append(L"Shortcut " +
|
| + base::IntToString16(shortcuts_.size()) +
|
| + installer::kLnkExt);
|
| + shortcuts_.push_back(shortcut_path);
|
| + ASSERT_TRUE(base::win::CreateOrUpdateShortcutLink(
|
| + shortcut_path, shortcut_properties,
|
| + base::win::SHORTCUT_CREATE_ALWAYS));
|
| + }
|
| +
|
| + base::win::ScopedCOMInitializer com_initializer_;
|
| +
|
| + base::ScopedTempDir temp_dir_;
|
| +
|
| + // Test shortcuts.
|
| + std::vector<base::FilePath> shortcuts_;
|
| +
|
| + // Initial properties for the test shortcuts.
|
| + std::vector<base::win::ShortcutProperties> shortcuts_properties_;
|
| +
|
| + // The path to a fake chrome.exe.
|
| + base::FilePath chrome_exe_;
|
| +
|
| + // The path to a fake app_host.exe.
|
| + base::FilePath app_host_exe_;
|
| +
|
| + // The path to a random target.
|
| + base::FilePath other_target_;
|
| +
|
| + // Chrome's AppUserModelId.
|
| + string16 chrome_app_id_;
|
| +
|
| + // A profile that isn't the Default profile.
|
| + string16 non_default_profile_;
|
| +
|
| + // Chrome's AppUserModelId for the non-default profile.
|
| + string16 non_default_chrome_app_id_;
|
| +
|
| + // The app launcher's app id.
|
| + string16 app_list_app_id_;
|
| +};
|
| +
|
| +class ShellIntegrationWinMigrateShortcutTest : public ShortcutTest {
|
| + protected:
|
| + virtual void CreateShortcuts() OVERRIDE {
|
| // A temporary object to pass properties to AddTestShortcut().
|
| base::win::ShortcutProperties temp_properties;
|
|
|
| // Shortcut 0 doesn't point to chrome.exe and thus should never be migrated.
|
| - temp_properties.set_target(other_target);
|
| + temp_properties.set_target(other_target_);
|
| temp_properties.set_app_id(L"Dumbo");
|
| temp_properties.set_dual_mode(false);
|
| ASSERT_NO_FATAL_FAILURE(AddTestShortcut(temp_properties));
|
| @@ -89,35 +153,16 @@ class ShellIntegrationWinMigrateShortcutTest : public testing::Test {
|
| base::win::ShortcutProperties no_properties;
|
| no_properties.set_target(chrome_exe_);
|
| ASSERT_NO_FATAL_FAILURE(AddTestShortcut(no_properties));
|
| - }
|
|
|
| - void AddTestShortcut(
|
| - const base::win::ShortcutProperties& shortcut_properties) {
|
| - shortcuts_properties_.push_back(shortcut_properties);
|
| - base::FilePath shortcut_path =
|
| - temp_dir_.path().Append(L"Shortcut " +
|
| - base::IntToString16(shortcuts_.size()) +
|
| - installer::kLnkExt);
|
| - shortcuts_.push_back(shortcut_path);
|
| - ASSERT_TRUE(base::win::CreateOrUpdateShortcutLink(
|
| - shortcut_path, shortcut_properties,
|
| - base::win::SHORTCUT_CREATE_ALWAYS));
|
| + // Shortcut 7 has a non-default profile directory and so should get a non-
|
| + // default app id.
|
| + temp_properties.set_target(chrome_exe_);
|
| + temp_properties.set_app_id(L"Dumbo");
|
| + temp_properties.set_arguments(
|
| + string16(L"--profile-directory=") + non_default_profile_);
|
| + temp_properties.set_dual_mode(false);
|
| + ASSERT_NO_FATAL_FAILURE(AddTestShortcut(temp_properties));
|
| }
|
| -
|
| - base::win::ScopedCOMInitializer com_initializer_;
|
| - base::ScopedTempDir temp_dir_;
|
| -
|
| - // The path to a fake chrome.exe.
|
| - base::FilePath chrome_exe_;
|
| -
|
| - // Test shortcuts.
|
| - std::vector<base::FilePath> shortcuts_;
|
| -
|
| - // Initial properties for the test shortcuts.
|
| - std::vector<base::win::ShortcutProperties> shortcuts_properties_;
|
| -
|
| - // Chrome's AppUserModelId.
|
| - string16 chrome_app_id_;
|
| };
|
|
|
| } // namespace
|
| @@ -127,15 +172,16 @@ TEST_F(ShellIntegrationWinMigrateShortcutTest, DontCheckDualMode) {
|
| if (base::win::GetVersion() < base::win::VERSION_WIN7)
|
| return;
|
|
|
| - EXPECT_EQ(4,
|
| + EXPECT_EQ(5,
|
| ShellIntegration::MigrateShortcutsInPathInternal(
|
| chrome_exe_, temp_dir_.path(), false));
|
|
|
| - // Only shortcut 1, 4, 5, and 6 should have been migrated.
|
| + // Only shortcut 1, 4, 5, 6 and 7 should have been migrated.
|
| shortcuts_properties_[1].set_app_id(chrome_app_id_);
|
| shortcuts_properties_[4].set_app_id(chrome_app_id_);
|
| shortcuts_properties_[5].set_app_id(chrome_app_id_);
|
| shortcuts_properties_[6].set_app_id(chrome_app_id_);
|
| + shortcuts_properties_[7].set_app_id(non_default_chrome_app_id_);
|
|
|
| for (size_t i = 0; i < shortcuts_.size(); ++i)
|
| base::win::ValidateShortcut(shortcuts_[i], shortcuts_properties_[i]);
|
| @@ -146,23 +192,25 @@ TEST_F(ShellIntegrationWinMigrateShortcutTest, CheckDualMode) {
|
| if (base::win::GetVersion() < base::win::VERSION_WIN7)
|
| return;
|
|
|
| - EXPECT_EQ(5,
|
| + EXPECT_EQ(6,
|
| ShellIntegration::MigrateShortcutsInPathInternal(
|
| chrome_exe_, temp_dir_.path(), true));
|
|
|
| - // Shortcut 1, 4, 5, and 6 should have had both their app_id and dual_mode
|
| + // Shortcut 1, 4, 5, 6 and 7 should have had both their app_id and dual_mode
|
| // properties fixed and shortcut 2 should also have had it's dual_mode
|
| // property fixed.
|
| shortcuts_properties_[1].set_app_id(chrome_app_id_);
|
| shortcuts_properties_[4].set_app_id(chrome_app_id_);
|
| shortcuts_properties_[5].set_app_id(chrome_app_id_);
|
| shortcuts_properties_[6].set_app_id(chrome_app_id_);
|
| + shortcuts_properties_[7].set_app_id(non_default_chrome_app_id_);
|
|
|
| shortcuts_properties_[1].set_dual_mode(true);
|
| shortcuts_properties_[2].set_dual_mode(true);
|
| shortcuts_properties_[4].set_dual_mode(true);
|
| shortcuts_properties_[5].set_dual_mode(true);
|
| shortcuts_properties_[6].set_dual_mode(true);
|
| + shortcuts_properties_[7].set_dual_mode(true);
|
|
|
| for (size_t i = 0; i < shortcuts_.size(); ++i)
|
| base::win::ValidateShortcut(shortcuts_[i], shortcuts_properties_[i]);
|
| @@ -222,3 +270,30 @@ TEST(ShellIntegrationWinTest, GetAppListAppModelIdForProfileTest) {
|
| EXPECT_EQ(base_app_id + L".udd.UserDataTest",
|
| ShellIntegration::GetAppListAppModelIdForProfile(profile_path));
|
| }
|
| +
|
| +// TODO(calamity): remove this test once app_host.exe is removed
|
| +class AppHostMigrateShortcutTest : public ShortcutTest {
|
| + protected:
|
| + virtual void CreateShortcuts() OVERRIDE {
|
| + base::win::ShortcutProperties temp_properties;
|
| +
|
| + // Shortcut 0 points to app_host.exe and should be retargeted to chrome.exe.
|
| + temp_properties.set_target(app_host_exe_);
|
| + temp_properties.set_app_id(L"SomeAppId");
|
| + temp_properties.set_arguments(L"--show-app-list");
|
| + ASSERT_NO_FATAL_FAILURE(AddTestShortcut(temp_properties));
|
| + }
|
| +};
|
| +
|
| +// Test migration when not checking for dual mode.
|
| +TEST_F(AppHostMigrateShortcutTest, AppHostExeRetargetsToChromeExe) {
|
| + EXPECT_EQ(1,
|
| + ShellIntegration::MigrateAppHostShortcutsInPathInternal(
|
| + chrome_exe_, app_host_exe_, temp_dir_.path(), false));
|
| +
|
| + // app_host.exe should now be chrome.exe
|
| + shortcuts_properties_[0].set_target(chrome_exe_);
|
| +
|
| + for (size_t i = 0; i < shortcuts_.size(); ++i)
|
| + base::win::ValidateShortcut(shortcuts_[i], shortcuts_properties_[i]);
|
| +}
|
|
|