Index: chrome/installer/setup/install_worker_unittest.cc |
diff --git a/chrome/installer/setup/install_worker_unittest.cc b/chrome/installer/setup/install_worker_unittest.cc |
index 67ef806c18e159708b0cb8329a97560b66fa5c48..e5936df72421bbcb771c0824109d34e0a15b7b8b 100644 |
--- a/chrome/installer/setup/install_worker_unittest.cc |
+++ b/chrome/installer/setup/install_worker_unittest.cc |
@@ -20,6 +20,7 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
#include "testing/gmock/include/gmock/gmock.h" |
+using base::win::RegKey; |
using installer::InstallationState; |
using installer::InstallerState; |
using installer::Product; |
@@ -27,13 +28,16 @@ using installer::ProductState; |
using ::testing::_; |
using ::testing::AtLeast; |
-using ::testing::HasSubstr; |
using ::testing::AtMost; |
+using ::testing::Bool; |
+using ::testing::Combine; |
+using ::testing::HasSubstr; |
using ::testing::Eq; |
using ::testing::Return; |
using ::testing::StrCaseEq; |
using ::testing::StrEq; |
using ::testing::StrictMock; |
+using ::testing::Values; |
// Mock classes to help with testing |
//------------------------------------------------------------------------------ |
@@ -42,6 +46,10 @@ class MockWorkItemList : public WorkItemList { |
public: |
MockWorkItemList() {} |
+ MOCK_METHOD4(AddCopyRegKeyWorkItem, WorkItem* (HKEY, |
+ const std::wstring&, |
+ const std::wstring&, |
+ CopyOverWriteOption)); |
MOCK_METHOD5(AddCopyTreeWorkItem, WorkItem*(const std::wstring&, |
const std::wstring&, |
const std::wstring&, |
@@ -176,11 +184,26 @@ class InstallWorkerTest : public testing::Test { |
virtual void TearDown() { |
} |
+ void MaybeAddBinariesToInstallationState( |
+ bool system_level, |
+ MockInstallationState* installation_state) { |
+ if (installation_state->GetProductState( |
+ system_level, BrowserDistribution::CHROME_BINARIES) == NULL) { |
+ MockProductState product_state; |
+ product_state.set_version(current_version_->Clone()); |
+ installation_state->SetProductState(system_level, |
+ BrowserDistribution::CHROME_BINARIES, |
+ product_state); |
+ } |
+ } |
+ |
void AddChromeToInstallationState( |
bool system_level, |
bool multi_install, |
bool with_chrome_frame_ready_mode, |
MockInstallationState* installation_state) { |
+ if (multi_install) |
+ MaybeAddBinariesToInstallationState(system_level, installation_state); |
MockProductState product_state; |
product_state.set_version(current_version_->Clone()); |
product_state.set_multi_install(multi_install); |
@@ -192,7 +215,9 @@ class InstallWorkerTest : public testing::Test { |
FilePath install_path = |
installer::GetChromeInstallPath(system_level, dist); |
product_state.SetUninstallProgram( |
- install_path.Append(installer::kSetupExe)); |
+ install_path.AppendASCII(current_version_->GetString()) |
+ .Append(installer::kInstallerDir) |
+ .Append(installer::kSetupExe)); |
product_state.AddUninstallSwitch(installer::switches::kUninstall); |
if (system_level) |
product_state.AddUninstallSwitch(installer::switches::kSystemLevel); |
@@ -216,6 +241,8 @@ class InstallWorkerTest : public testing::Test { |
bool multi_install, |
bool ready_mode, |
MockInstallationState* installation_state) { |
+ if (multi_install) |
+ MaybeAddBinariesToInstallationState(system_level, installation_state); |
MockProductState product_state; |
product_state.set_version(current_version_->Clone()); |
product_state.set_multi_install(multi_install); |
@@ -226,7 +253,9 @@ class InstallWorkerTest : public testing::Test { |
FilePath install_path = |
installer::GetChromeInstallPath(system_level, dist); |
product_state.SetUninstallProgram( |
- install_path.Append(installer::kSetupExe)); |
+ install_path.AppendASCII(current_version_->GetString()) |
+ .Append(installer::kInstallerDir) |
+ .Append(installer::kSetupExe)); |
product_state.AddUninstallSwitch(installer::switches::kUninstall); |
product_state.AddUninstallSwitch(installer::switches::kChromeFrame); |
if (system_level) |
@@ -393,141 +422,72 @@ namespace { |
const wchar_t elevation_key[] = |
L"SOFTWARE\\Microsoft\\Internet Explorer\\Low Rights\\ElevationPolicy\\" |
L"{E0A900DF-9611-4446-86BD-4B1D47E7DB2A}"; |
-const wchar_t dragdrop_key[] = |
- L"SOFTWARE\\Microsoft\\Internet Explorer\\Low Rights\\DragDrop\\" |
- L"{E0A900DF-9611-4446-86BD-4B1D47E7DB2A}"; |
+const wchar_t old_elevation_key[] = |
+ L"SOFTWARE\\Microsoft\\Internet Explorer\\Low Rights\\ElevationPolicy\\" |
+ L"{6C288DD7-76FB-4721-B628-56FAC252E199}"; |
} // namespace |
-TEST_F(InstallWorkerTest, ElevationPolicyWorkItems) { |
- const bool system_level = true; |
- const HKEY root = HKEY_LOCAL_MACHINE; |
- const bool multi_install = true; |
- MockWorkItemList work_item_list; |
- |
- scoped_ptr<MockInstallationState> installation_state( |
- BuildChromeInstallationState(system_level, multi_install)); |
- |
- scoped_ptr<MockInstallerState> installer_state( |
- BuildChromeInstallerState(system_level, multi_install, |
- *installation_state, |
- InstallerState::MULTI_INSTALL)); |
- |
- EXPECT_CALL(work_item_list, AddCreateRegKeyWorkItem(root, |
- StrEq(elevation_key))).Times(1); |
- |
- EXPECT_CALL(work_item_list, AddCreateRegKeyWorkItem(root, |
- StrEq(dragdrop_key))).Times(1); |
- |
- EXPECT_CALL(work_item_list, AddSetRegDwordValueWorkItem(root, |
- StrEq(elevation_key), StrEq(L"Policy"), 3, _)).Times(1); |
- |
- EXPECT_CALL(work_item_list, AddSetRegStringValueWorkItem(root, |
- StrEq(elevation_key), StrEq(L"AppName"), |
- StrEq(installer::kChromeLauncherExe), _)).Times(1); |
- |
- EXPECT_CALL(work_item_list, AddSetRegStringValueWorkItem(root, |
- StrEq(elevation_key), StrEq(L"AppPath"), _, _)).Times(1); |
- |
- EXPECT_CALL(work_item_list, AddSetRegDwordValueWorkItem(root, |
- StrEq(dragdrop_key), StrEq(L"Policy"), 3, _)).Times(1); |
- |
- EXPECT_CALL(work_item_list, AddSetRegStringValueWorkItem(root, |
- StrEq(dragdrop_key), StrEq(L"AppName"), |
- StrEq(chrome::kBrowserProcessExecutableName), _)).Times(1); |
- |
- EXPECT_CALL(work_item_list, AddSetRegStringValueWorkItem(root, |
- StrEq(dragdrop_key), StrEq(L"AppPath"), _, _)).Times(1); |
+// A test class for worker functions that manipulate the old IE low rights |
+// policies. |
+// Parameters: |
+// bool : system_level_ |
+// bool : multi_install_ |
+class OldIELowRightsTests : public InstallWorkerTest, |
+ public ::testing::WithParamInterface<std::tr1::tuple<bool, bool> > { |
+ protected: |
+ virtual void SetUp() OVERRIDE { |
+ InstallWorkerTest::SetUp(); |
- AddElevationPolicyWorkItems(*installation_state.get(), |
- *installer_state.get(), |
- *new_version_.get(), |
- &work_item_list); |
-} |
+ const ParamType& param = GetParam(); |
+ system_level_ = std::tr1::get<0>(param); |
+ multi_install_ = std::tr1::get<1>(param); |
+ root_key_ = system_level_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
-TEST_F(InstallWorkerTest, ElevationPolicyUninstall) { |
- const bool system_level = true; |
- const HKEY root = HKEY_LOCAL_MACHINE; |
- const bool multi_install = true; |
- MockWorkItemList work_item_list; |
+ installation_state_.reset(new MockInstallationState()); |
+ AddChromeFrameToInstallationState(system_level_, multi_install_, false, |
+ installation_state_.get()); |
+ installer_state_.reset(BuildBasicInstallerState( |
+ system_level_, multi_install_, *installation_state_, |
+ multi_install_ ? InstallerState::MULTI_UPDATE : |
+ InstallerState::SINGLE_INSTALL_OR_UPDATE)); |
+ AddChromeFrameToInstallerState(*installation_state_, false, |
+ installer_state_.get()); |
+ } |
- scoped_ptr<MockInstallationState> installation_state( |
- BuildChromeInstallationState(system_level, multi_install)); |
+ scoped_ptr<MockInstallationState> installation_state_; |
+ scoped_ptr<MockInstallerState> installer_state_; |
+ bool system_level_; |
+ bool multi_install_; |
+ HKEY root_key_; |
+}; |
- scoped_ptr<MockInstallerState> installer_state( |
- BuildChromeInstallerState(system_level, multi_install, |
- *installation_state, |
- InstallerState::UNINSTALL)); |
+TEST_P(OldIELowRightsTests, AddDeleteOldIELowRightsPolicyWorkItems) { |
+ StrictMock<MockWorkItemList> work_item_list; |
- EXPECT_CALL(work_item_list, AddDeleteRegKeyWorkItem(root, |
- StrEq(elevation_key))).Times(1); |
- EXPECT_CALL(work_item_list, AddDeleteRegKeyWorkItem(root, |
- StrEq(dragdrop_key))).Times(1); |
+ EXPECT_CALL(work_item_list, |
+ AddDeleteRegKeyWorkItem(root_key_, StrEq(old_elevation_key))) |
+ .Times(1); |
- AddElevationPolicyWorkItems(*installation_state.get(), |
- *installer_state.get(), |
- *new_version_.get(), |
- &work_item_list); |
+ AddDeleteOldIELowRightsPolicyWorkItems(*installer_state_.get(), |
+ &work_item_list); |
} |
-TEST_F(InstallWorkerTest, ElevationPolicySingleNoop) { |
- const bool system_level = true; |
- const bool multi_install = false; // nothing should be done for single. |
- MockWorkItemList work_item_list; |
+TEST_P(OldIELowRightsTests, AddCopyIELowRightsPolicyWorkItems) { |
+ StrictMock<MockWorkItemList> work_item_list; |
- scoped_ptr<MockInstallationState> installation_state( |
- BuildChromeInstallationState(system_level, multi_install)); |
+ // The old elevation policy key should only be copied when there's no old |
+ // value. |
+ EXPECT_CALL(work_item_list, |
+ AddCopyRegKeyWorkItem(root_key_, StrEq(elevation_key), |
+ StrEq(old_elevation_key), |
+ Eq(WorkItem::IF_NOT_PRESENT))).Times(1); |
- scoped_ptr<MockInstallerState> installer_state( |
- BuildChromeInstallerState(system_level, multi_install, |
- *installation_state, |
- InstallerState::UNINSTALL)); |
- |
- EXPECT_CALL(work_item_list, AddDeleteRegKeyWorkItem(_, _)).Times(0); |
- EXPECT_CALL(work_item_list, AddCreateRegKeyWorkItem(_, _)).Times(0); |
- EXPECT_CALL(work_item_list, AddSetRegDwordValueWorkItem(_, _, _, _, _)) |
- .Times(0); |
- EXPECT_CALL(work_item_list, AddSetRegStringValueWorkItem(_, _, _, _, _)) |
- .Times(0); |
- |
- AddElevationPolicyWorkItems(*installation_state.get(), |
- *installer_state.get(), |
- *new_version_.get(), |
- &work_item_list); |
+ AddCopyIELowRightsPolicyWorkItems(*installer_state_.get(), &work_item_list); |
} |
-TEST_F(InstallWorkerTest, ElevationPolicyExistingSingleCFNoop) { |
- const bool system_level = true; |
- const bool multi_install = true; |
- MockWorkItemList work_item_list; |
- |
- scoped_ptr<MockInstallationState> installation_state( |
- BuildChromeInstallationState(system_level, multi_install)); |
- |
- MockProductState cf_state; |
- cf_state.set_version(current_version_->Clone()); |
- cf_state.set_multi_install(false); |
- |
- installation_state->SetProductState(system_level, |
- BrowserDistribution::CHROME_FRAME, cf_state); |
- |
- scoped_ptr<MockInstallerState> installer_state( |
- BuildChromeInstallerState(system_level, multi_install, |
- *installation_state, |
- InstallerState::MULTI_INSTALL)); |
- |
- EXPECT_CALL(work_item_list, AddDeleteRegKeyWorkItem(_, _)).Times(0); |
- EXPECT_CALL(work_item_list, AddCreateRegKeyWorkItem(_, _)).Times(0); |
- EXPECT_CALL(work_item_list, AddSetRegDwordValueWorkItem(_, _, _, _, _)) |
- .Times(0); |
- EXPECT_CALL(work_item_list, AddSetRegStringValueWorkItem(_, _, _, _, _)) |
- .Times(0); |
- |
- AddElevationPolicyWorkItems(*installation_state.get(), |
- *installer_state.get(), |
- *new_version_.get(), |
- &work_item_list); |
-} |
+INSTANTIATE_TEST_CASE_P(Variations, OldIELowRightsTests, |
+ Combine(Bool(), Bool())); |
TEST_F(InstallWorkerTest, GoogleUpdateWorkItemsTest) { |
const bool system_level = true; |
@@ -535,7 +495,7 @@ TEST_F(InstallWorkerTest, GoogleUpdateWorkItemsTest) { |
MockWorkItemList work_item_list; |
scoped_ptr<MockInstallationState> installation_state( |
- BuildChromeInstallationState(system_level, multi_install)); |
+ BuildChromeInstallationState(system_level, false)); |
MockProductState cf_state; |
cf_state.set_version(current_version_->Clone()); |