Index: chrome/installer/setup/setup_util_unittest.cc |
diff --git a/chrome/installer/setup/setup_util_unittest.cc b/chrome/installer/setup/setup_util_unittest.cc |
index a2d88cc4425581d8a8713404ea381ac6e284333a..9b9ea3b154a1fac9bce8c1fe50aab3d74803ee58 100644 |
--- a/chrome/installer/setup/setup_util_unittest.cc |
+++ b/chrome/installer/setup/setup_util_unittest.cc |
@@ -14,6 +14,7 @@ |
#include "base/files/file_util.h" |
#include "base/files/scoped_temp_dir.h" |
#include "base/macros.h" |
+#include "base/memory/ptr_util.h" |
#include "base/process/kill.h" |
#include "base/process/launch.h" |
#include "base/process/process_handle.h" |
@@ -718,4 +719,142 @@ TEST_F(DeleteRegistryKeyPartialTest, NonEmptyKeyWithPreserve) { |
} |
} |
+class LegacyCleanupsTest : public ::testing::Test { |
+ protected: |
+ LegacyCleanupsTest() { |
+ EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); |
+ registry_override_manager_.OverrideRegistry(HKEY_CURRENT_USER); |
+ installer_state_ = |
+ base::MakeUnique<FakeInstallerState>(temp_dir_.GetPath()); |
+ // Create the state to be cleared. |
+ EXPECT_TRUE(base::win::RegKey(HKEY_CURRENT_USER, kBinariesClientsKeyPath, |
+ KEY_WRITE | KEY_WOW64_32KEY) |
+ .Valid()); |
+#if defined(GOOGLE_CHROME_BUILD) |
+ EXPECT_TRUE(base::win::RegKey(HKEY_CURRENT_USER, kGCFClientsKeyPath, |
+ KEY_WRITE | KEY_WOW64_32KEY) |
+ .Valid()); |
+ EXPECT_TRUE(base::win::RegKey(HKEY_CURRENT_USER, kAppLauncherClientsKeyPath, |
+ KEY_WRITE | KEY_WOW64_32KEY) |
+ .Valid()); |
+ EXPECT_GT(base::WriteFile(GetAppHostExePath(), "cha", 3), 0); |
+ EXPECT_TRUE( |
+ base::win::RegKey(HKEY_CURRENT_USER, |
+ GetChromeAppCommandPath(L"install-extension").c_str(), |
+ KEY_WRITE | KEY_WOW64_32KEY) |
+ .Valid()); |
+ |
+#endif |
+ } |
+ |
+ const InstallerState& installer_state() const { return *installer_state_; } |
+ |
+ bool HasBinariesVersionKey() const { |
+ return base::win::RegKey(HKEY_CURRENT_USER, kBinariesClientsKeyPath, |
+ KEY_QUERY_VALUE | KEY_WOW64_32KEY) |
+ .Valid(); |
+ } |
+ |
+#if defined(GOOGLE_CHROME_BUILD) |
+ bool HasMultiGCFVersionKey() const { |
+ return base::win::RegKey(HKEY_CURRENT_USER, kGCFClientsKeyPath, |
+ KEY_QUERY_VALUE | KEY_WOW64_32KEY) |
+ .Valid(); |
+ } |
+ |
+ bool HasAppLauncherVersionKey() const { |
+ return base::win::RegKey(HKEY_CURRENT_USER, kAppLauncherClientsKeyPath, |
+ KEY_QUERY_VALUE | KEY_WOW64_32KEY) |
+ .Valid(); |
+ } |
+ |
+ bool HasAppHostExe() const { return base::PathExists(GetAppHostExePath()); } |
+ |
+ bool HasInstallExtensionCommand() const { |
+ return base::win::RegKey( |
+ HKEY_CURRENT_USER, |
+ GetChromeAppCommandPath(L"install-extension").c_str(), |
+ KEY_QUERY_VALUE | KEY_WOW64_32KEY) |
+ .Valid(); |
+ } |
+#endif |
+ |
+ private: |
+ // An InstallerState for a per-user install of Chrome in a given directory. |
+ class FakeInstallerState : public InstallerState { |
+ public: |
+ explicit FakeInstallerState(const base::FilePath& target_path) { |
+ BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
+ operation_ = InstallerState::SINGLE_INSTALL_OR_UPDATE; |
+ target_path_ = target_path; |
+ state_key_ = dist->GetStateKey(); |
+ state_type_ = dist->GetType(); |
+ product_ = base::MakeUnique<Product>(dist); |
+ level_ = InstallerState::USER_LEVEL; |
+ root_key_ = HKEY_CURRENT_USER; |
+ } |
+ }; |
+ |
+#if defined(GOOGLE_CHROME_BUILD) |
+ base::FilePath GetAppHostExePath() const { |
+ return installer_state_->target_path().AppendASCII("app_host.exe"); |
+ } |
+ |
+ base::string16 GetChromeAppCommandPath(const wchar_t* command) const { |
+ return base::string16( |
+ L"SOFTWARE\\Google\\Update\\Clients\\" |
+ L"{8A69D345-D564-463c-AFF1-A69D9E530F96}\\Commands\\") + |
+ command; |
+ } |
+#endif |
+ |
+ static const wchar_t kBinariesClientsKeyPath[]; |
+#if defined(GOOGLE_CHROME_BUILD) |
+ static const wchar_t kGCFClientsKeyPath[]; |
+ static const wchar_t kAppLauncherClientsKeyPath[]; |
+#endif |
+ |
+ base::ScopedTempDir temp_dir_; |
+ registry_util::RegistryOverrideManager registry_override_manager_; |
+ std::unique_ptr<FakeInstallerState> installer_state_; |
+ DISALLOW_COPY_AND_ASSIGN(LegacyCleanupsTest); |
+}; |
+ |
+#if defined(GOOGLE_CHROME_BUILD) |
+const wchar_t LegacyCleanupsTest::kBinariesClientsKeyPath[] = |
+ L"SOFTWARE\\Google\\Update\\Clients\\" |
+ L"{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}"; |
+const wchar_t LegacyCleanupsTest::kGCFClientsKeyPath[] = |
+ L"SOFTWARE\\Google\\Update\\Clients\\" |
+ L"{8BA986DA-5100-405E-AA35-86F34A02ACBF}"; |
+const wchar_t LegacyCleanupsTest::kAppLauncherClientsKeyPath[] = |
+ L"SOFTWARE\\Google\\Update\\Clients\\" |
+ L"{FDA71E6F-AC4C-4a00-8B70-9958A68906BF}"; |
+#else |
+const wchar_t LegacyCleanupsTest::kBinariesClientsKeyPath[] = |
+ L"SOFTWARE\\Chromium Binaries"; |
+#endif |
+ |
+TEST_F(LegacyCleanupsTest, NoOpOnFailedUpdate) { |
+ DoLegacyCleanups(installer_state(), INSTALL_FAILED); |
+ EXPECT_TRUE(HasBinariesVersionKey()); |
+#if defined(GOOGLE_CHROME_BUILD) |
+ EXPECT_TRUE(HasMultiGCFVersionKey()); |
+ EXPECT_TRUE(HasAppLauncherVersionKey()); |
+ EXPECT_TRUE(HasAppHostExe()); |
+ EXPECT_TRUE(HasInstallExtensionCommand()); |
+#endif |
+} |
+ |
+TEST_F(LegacyCleanupsTest, Do) { |
+ DoLegacyCleanups(installer_state(), NEW_VERSION_UPDATED); |
+ EXPECT_FALSE(HasBinariesVersionKey()); |
+#if defined(GOOGLE_CHROME_BUILD) |
+ EXPECT_FALSE(HasMultiGCFVersionKey()); |
+ EXPECT_FALSE(HasAppLauncherVersionKey()); |
+ EXPECT_FALSE(HasAppHostExe()); |
+ EXPECT_FALSE(HasInstallExtensionCommand()); |
+#endif |
+} |
+ |
} // namespace installer |