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

Side by Side Diff: chrome/installer/setup/setup_util_unittest.cc

Issue 2589753002: Remove multi-install from chrome/installer/setup. (Closed)
Patch Set: sync to position 441108 Created 3 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 unified diff | Download patch
OLDNEW
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 "chrome/installer/setup/setup_util_unittest.h" 5 #include "chrome/installer/setup/setup_util_unittest.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <shlobj.h> 8 #include <shlobj.h>
9 9
10 #include <memory> 10 #include <memory>
11 #include <string> 11 #include <string>
12 12
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/files/file_util.h" 14 #include "base/files/file_util.h"
15 #include "base/files/scoped_temp_dir.h" 15 #include "base/files/scoped_temp_dir.h"
16 #include "base/macros.h" 16 #include "base/macros.h"
17 #include "base/memory/ptr_util.h"
17 #include "base/process/kill.h" 18 #include "base/process/kill.h"
18 #include "base/process/launch.h" 19 #include "base/process/launch.h"
19 #include "base/process/process_handle.h" 20 #include "base/process/process_handle.h"
20 #include "base/strings/string_util.h" 21 #include "base/strings/string_util.h"
21 #include "base/test/histogram_tester.h" 22 #include "base/test/histogram_tester.h"
22 #include "base/test/test_reg_util_win.h" 23 #include "base/test/test_reg_util_win.h"
23 #include "base/test/test_timeouts.h" 24 #include "base/test/test_timeouts.h"
24 #include "base/threading/platform_thread.h" 25 #include "base/threading/platform_thread.h"
25 #include "base/version.h" 26 #include "base/version.h"
26 #include "base/win/registry.h" 27 #include "base/win/registry.h"
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 } 712 }
712 } 713 }
713 714
714 // Ensure that all values are absent. 715 // Ensure that all values are absent.
715 { 716 {
716 base::win::RegistryValueIterator it(root_, path_.c_str()); 717 base::win::RegistryValueIterator it(root_, path_.c_str());
717 ASSERT_EQ(0u, it.ValueCount()); 718 ASSERT_EQ(0u, it.ValueCount());
718 } 719 }
719 } 720 }
720 721
722 class LegacyCleanupsTest : public ::testing::Test {
723 protected:
724 LegacyCleanupsTest() {
725 EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
726 registry_override_manager_.OverrideRegistry(HKEY_CURRENT_USER);
727 installer_state_ =
728 base::MakeUnique<FakeInstallerState>(temp_dir_.GetPath());
729 // Create the state to be cleared.
730 EXPECT_TRUE(base::win::RegKey(HKEY_CURRENT_USER, kBinariesClientsKeyPath,
731 KEY_WRITE | KEY_WOW64_32KEY)
732 .Valid());
733 #if defined(GOOGLE_CHROME_BUILD)
734 EXPECT_TRUE(base::win::RegKey(HKEY_CURRENT_USER, kGCFClientsKeyPath,
735 KEY_WRITE | KEY_WOW64_32KEY)
736 .Valid());
737 EXPECT_TRUE(base::win::RegKey(HKEY_CURRENT_USER, kAppLauncherClientsKeyPath,
738 KEY_WRITE | KEY_WOW64_32KEY)
739 .Valid());
740 EXPECT_GT(base::WriteFile(GetAppHostExePath(), "cha", 3), 0);
741 EXPECT_TRUE(
742 base::win::RegKey(HKEY_CURRENT_USER,
743 GetChromeAppCommandPath(L"install-extension").c_str(),
744 KEY_WRITE | KEY_WOW64_32KEY)
745 .Valid());
746
747 #endif
748 }
749
750 const InstallerState& installer_state() const { return *installer_state_; }
751
752 bool HasBinariesVersionKey() const {
753 return base::win::RegKey(HKEY_CURRENT_USER, kBinariesClientsKeyPath,
754 KEY_QUERY_VALUE | KEY_WOW64_32KEY)
755 .Valid();
756 }
757
758 #if defined(GOOGLE_CHROME_BUILD)
759 bool HasMultiGCFVersionKey() const {
760 return base::win::RegKey(HKEY_CURRENT_USER, kGCFClientsKeyPath,
761 KEY_QUERY_VALUE | KEY_WOW64_32KEY)
762 .Valid();
763 }
764
765 bool HasAppLauncherVersionKey() const {
766 return base::win::RegKey(HKEY_CURRENT_USER, kAppLauncherClientsKeyPath,
767 KEY_QUERY_VALUE | KEY_WOW64_32KEY)
768 .Valid();
769 }
770
771 bool HasAppHostExe() const { return base::PathExists(GetAppHostExePath()); }
772
773 bool HasInstallExtensionCommand() const {
774 return base::win::RegKey(
775 HKEY_CURRENT_USER,
776 GetChromeAppCommandPath(L"install-extension").c_str(),
777 KEY_QUERY_VALUE | KEY_WOW64_32KEY)
778 .Valid();
779 }
780 #endif
781
782 private:
783 // An InstallerState for a per-user install of Chrome in a given directory.
784 class FakeInstallerState : public InstallerState {
785 public:
786 explicit FakeInstallerState(const base::FilePath& target_path) {
787 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
788 operation_ = InstallerState::SINGLE_INSTALL_OR_UPDATE;
789 target_path_ = target_path;
790 state_key_ = dist->GetStateKey();
791 state_type_ = dist->GetType();
792 product_ = base::MakeUnique<Product>(dist);
793 level_ = InstallerState::USER_LEVEL;
794 root_key_ = HKEY_CURRENT_USER;
795 }
796 };
797
798 #if defined(GOOGLE_CHROME_BUILD)
799 base::FilePath GetAppHostExePath() const {
800 return installer_state_->target_path().AppendASCII("app_host.exe");
801 }
802
803 base::string16 GetChromeAppCommandPath(const wchar_t* command) const {
804 return base::string16(
805 L"SOFTWARE\\Google\\Update\\Clients\\"
806 L"{8A69D345-D564-463c-AFF1-A69D9E530F96}\\Commands\\") +
807 command;
808 }
809 #endif
810
811 static const wchar_t kBinariesClientsKeyPath[];
812 #if defined(GOOGLE_CHROME_BUILD)
813 static const wchar_t kGCFClientsKeyPath[];
814 static const wchar_t kAppLauncherClientsKeyPath[];
815 #endif
816
817 base::ScopedTempDir temp_dir_;
818 registry_util::RegistryOverrideManager registry_override_manager_;
819 std::unique_ptr<FakeInstallerState> installer_state_;
820 DISALLOW_COPY_AND_ASSIGN(LegacyCleanupsTest);
821 };
822
823 #if defined(GOOGLE_CHROME_BUILD)
824 const wchar_t LegacyCleanupsTest::kBinariesClientsKeyPath[] =
825 L"SOFTWARE\\Google\\Update\\Clients\\"
826 L"{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}";
827 const wchar_t LegacyCleanupsTest::kGCFClientsKeyPath[] =
828 L"SOFTWARE\\Google\\Update\\Clients\\"
829 L"{8BA986DA-5100-405E-AA35-86F34A02ACBF}";
830 const wchar_t LegacyCleanupsTest::kAppLauncherClientsKeyPath[] =
831 L"SOFTWARE\\Google\\Update\\Clients\\"
832 L"{FDA71E6F-AC4C-4a00-8B70-9958A68906BF}";
833 #else
834 const wchar_t LegacyCleanupsTest::kBinariesClientsKeyPath[] =
835 L"SOFTWARE\\Chromium Binaries";
836 #endif
837
838 TEST_F(LegacyCleanupsTest, NoOpOnFailedUpdate) {
839 DoLegacyCleanups(installer_state(), INSTALL_FAILED);
840 EXPECT_TRUE(HasBinariesVersionKey());
841 #if defined(GOOGLE_CHROME_BUILD)
842 EXPECT_TRUE(HasMultiGCFVersionKey());
843 EXPECT_TRUE(HasAppLauncherVersionKey());
844 EXPECT_TRUE(HasAppHostExe());
845 EXPECT_TRUE(HasInstallExtensionCommand());
846 #endif
847 }
848
849 TEST_F(LegacyCleanupsTest, Do) {
850 DoLegacyCleanups(installer_state(), NEW_VERSION_UPDATED);
851 EXPECT_FALSE(HasBinariesVersionKey());
852 #if defined(GOOGLE_CHROME_BUILD)
853 EXPECT_FALSE(HasMultiGCFVersionKey());
854 EXPECT_FALSE(HasAppLauncherVersionKey());
855 EXPECT_FALSE(HasAppHostExe());
856 EXPECT_FALSE(HasInstallExtensionCommand());
857 #endif
858 }
859
721 } // namespace installer 860 } // namespace installer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698