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

Unified Diff: chrome/installer/setup/install_worker.cc

Issue 10912096: C++ reability review for gab. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compile errors Created 8 years, 3 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 | « chrome/installer/setup/install_worker.h ('k') | chrome/installer/setup/install_worker_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/installer/setup/install_worker.cc
diff --git a/chrome/installer/setup/install_worker.cc b/chrome/installer/setup/install_worker.cc
index 4ba0e870b46d49918cc7fc96787490ae1984da23..9f9ccad03f7c705cd2adefa9537e5e05674cd275 100644
--- a/chrome/installer/setup/install_worker.cc
+++ b/chrome/installer/setup/install_worker.cc
@@ -88,6 +88,7 @@ void GetIELowRightsElevationPolicyKeyPath(ElevationPolicyId policy,
// Local helper to call AddRegisterComDllWorkItems for all DLLs in a set of
// products managed by a given package.
+// |old_version| can be NULL to indicate no Chrome is currently installed.
void AddRegisterComDllWorkItemsForPackage(const InstallerState& installer_state,
const Version* old_version,
const Version& new_version,
@@ -170,8 +171,8 @@ void AddInstallerCopyTasks(const InstallerState& installer_state,
void AddInstallAppCommandWorkItems(const InstallerState& installer_state,
const InstallationState& machine_state,
- const FilePath* setup_path,
- const Version* new_version,
+ const FilePath& setup_path,
+ const Version& new_version,
const Product& product,
WorkItemList* work_item_list) {
DCHECK(product.is_chrome_app_host());
@@ -180,19 +181,19 @@ void AddInstallAppCommandWorkItems(const InstallerState& installer_state,
cmd_key.append(1, L'\\').append(google_update::kRegCommandsKey)
.append(1, L'\\').append(kCmdInstallApp);
- if (installer_state.operation() != InstallerState::UNINSTALL) {
- FilePath target_path(installer_state.target_path());
- CommandLine cmd_line(target_path.Append(installer::kChromeAppHostExe));
+ if (installer_state.operation() == InstallerState::UNINSTALL) {
+ work_item_list->AddDeleteRegKeyWorkItem(
+ installer_state.root_key(), cmd_key)->set_log_message(
+ "removing install-application command");
+ } else {
+ CommandLine cmd_line(
+ installer_state.target_path().Append(installer::kChromeAppHostExe));
cmd_line.AppendSwitchASCII(::switches::kAppsInstallFromManifestURL, "%1");
AppCommand cmd(cmd_line.GetCommandLineString());
cmd.set_sends_pings(true);
cmd.set_is_web_accessible(true);
cmd.AddWorkItems(installer_state.root_key(), cmd_key, work_item_list);
- } else {
- work_item_list->AddDeleteRegKeyWorkItem(installer_state.root_key(),
- cmd_key)->set_log_message(
- "removing install-application command");
}
}
@@ -202,18 +203,19 @@ void AddProductSpecificWorkItems(const InstallationState& original_state,
const Version& new_version,
WorkItemList* list) {
const Products& products = installer_state.products();
- for (size_t i = 0; i < products.size(); ++i) {
- const Product& p = *products[i];
+ for (Products::const_iterator it = products.begin(); it < products.end();
+ ++it) {
+ const Product& p = **it;
if (p.is_chrome_frame()) {
AddChromeFrameWorkItems(original_state, installer_state, setup_path,
new_version, p, list);
}
if (p.is_chrome_app_host()) {
AddInstallAppCommandWorkItems(installer_state, original_state,
- &setup_path, &new_version, p, list);
+ setup_path, new_version, p, list);
}
if (p.is_chrome()) {
- AddOsUpgradeWorkItems(installer_state, &setup_path, &new_version, p,
+ AddOsUpgradeWorkItems(installer_state, setup_path, new_version, p,
list);
}
}
@@ -265,28 +267,30 @@ void AddDeleteUninstallShortcutsForMSIWorkItems(
}
}
+// Adds Chrome specific install work items to |install_list|.
+// |current_version| can be NULL to indicate no Chrome is currently installed.
void AddChromeWorkItems(const InstallationState& original_state,
const InstallerState& installer_state,
const FilePath& setup_path,
const FilePath& archive_path,
const FilePath& src_path,
const FilePath& temp_path,
+ const Version* current_version,
const Version& new_version,
- scoped_ptr<Version>* current_version,
WorkItemList* install_list) {
const FilePath& target_path = installer_state.target_path();
- if (current_version != NULL && current_version->get() != NULL) {
+ if (current_version) {
// Delete the archive from an existing install to save some disk space. We
// make this an unconditional work item since there's no need to roll this
// back; if installation fails we'll be moved to the "-full" channel anyway.
FilePath old_installer_dir(
- installer_state.GetInstallerDirectory(**current_version));
+ installer_state.GetInstallerDirectory(*current_version));
FilePath old_archive(old_installer_dir.Append(installer::kChromeArchive));
// Don't delete the archive that we are actually installing from.
if (archive_path != old_archive) {
- install_list->AddDeleteTreeWorkItem(old_archive, temp_path)
- ->set_ignore_failure(true);
+ install_list->AddDeleteTreeWorkItem(old_archive, temp_path)->
+ set_ignore_failure(true);
}
}
@@ -370,9 +374,8 @@ void AddChromeWorkItems(const InstallationState& original_state,
// otherwise), there is no need to do this.
// Note that we pass true for check_duplicates to avoid failing on in-use
// repair runs if the current_version is the same as the new_version.
- bool check_for_duplicates =
- (current_version != NULL && current_version->get() != NULL &&
- current_version->get()->Equals(new_version));
+ bool check_for_duplicates = (current_version &&
+ current_version->Equals(new_version));
install_list->AddMoveTreeWorkItem(
src_path.AppendASCII(new_version.GetString()).value(),
target_path.AppendASCII(new_version.GetString()).value(),
@@ -382,8 +385,8 @@ void AddChromeWorkItems(const InstallationState& original_state,
// Delete any old_chrome.exe if present (ignore failure if it's in use).
install_list->AddDeleteTreeWorkItem(
- target_path.Append(installer::kChromeOldExe), temp_path)
- ->set_ignore_failure(true);
+ target_path.Append(installer::kChromeOldExe), temp_path)->
+ set_ignore_failure(true);
// Copy installer in install directory and
// add shortcut in Control Panel->Add/Remove Programs.
@@ -423,16 +426,12 @@ bool ProbeCommandExecuteCallback(const string16& command_execute_id,
void AddGenericQuickEnableWorkItems(const InstallerState& installer_state,
const InstallationState& machine_state,
- const FilePath* setup_path,
- const Version* new_version,
- WorkItemList* work_item_list,
+ const FilePath& setup_path,
+ const Version& new_version,
bool have_child_product,
const CommandLine& child_product_switches,
- const string16& command_id) {
- DCHECK(setup_path ||
- installer_state.operation() == InstallerState::UNINSTALL);
- DCHECK(new_version ||
- installer_state.operation() == InstallerState::UNINSTALL);
+ const string16& command_id,
+ WorkItemList* work_item_list) {
DCHECK(work_item_list);
const bool system_install = installer_state.system_install();
@@ -442,9 +441,8 @@ void AddGenericQuickEnableWorkItems(const InstallerState& installer_state,
const ProductState* product_state = NULL;
// Are the Chrome Binaries already on the machine?
- product_state =
- machine_state.GetProductState(system_install,
- BrowserDistribution::CHROME_BINARIES);
+ product_state = machine_state.GetProductState(
+ system_install, BrowserDistribution::CHROME_BINARIES);
if (product_state != NULL && product_state->is_multi_install())
have_chrome_binaries = true;
@@ -453,14 +451,12 @@ void AddGenericQuickEnableWorkItems(const InstallerState& installer_state,
if (installer_state.operation() == InstallerState::UNINSTALL) {
// Forget about multi-install Chrome if it is being uninstalled.
- product =
- installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES);
+ product = installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES);
if (product != NULL && installer_state.is_multi_install())
have_chrome_binaries = false;
} else {
// Check if we're installing Chrome Binaries
- product =
- installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES);
+ product = installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES);
if (product != NULL && installer_state.is_multi_install())
have_chrome_binaries = true;
}
@@ -487,9 +483,8 @@ void AddGenericQuickEnableWorkItems(const InstallerState& installer_state,
if (installer_state.operation() == InstallerState::UNINSTALL) {
// One or more products are being uninstalled, but not the binaries. Use
// the path to the currently installed Chrome setup.exe.
- product_state =
- machine_state.GetProductState(system_install,
- BrowserDistribution::CHROME_BINARIES);
+ product_state = machine_state.GetProductState(
+ system_install, BrowserDistribution::CHROME_BINARIES);
DCHECK(product_state);
binaries_setup_path = product_state->uninstall_command().GetProgram();
} else {
@@ -498,8 +493,8 @@ void AddGenericQuickEnableWorkItems(const InstallerState& installer_state,
// multi-install Chrome Binaries of the given |version|.
DCHECK(installer_state.is_multi_install());
binaries_setup_path =
- installer_state.GetInstallerDirectory(*new_version).Append(
- setup_path->BaseName());
+ installer_state.GetInstallerDirectory(new_version).Append(
+ setup_path.BaseName());
}
}
@@ -526,9 +521,9 @@ void AddGenericQuickEnableWorkItems(const InstallerState& installer_state,
cmd.AddWorkItems(installer_state.root_key(), cmd_key, work_item_list);
} else {
DCHECK(operation == REMOVE_COMMAND);
- work_item_list->AddDeleteRegKeyWorkItem(installer_state.root_key(),
- cmd_key)->set_log_message(
- "removing " + WideToASCII(command_id) + " command");
+ work_item_list->AddDeleteRegKeyWorkItem(
+ installer_state.root_key(), cmd_key)->set_log_message(
+ "removing " + WideToASCII(command_id) + " command");
}
}
}
@@ -541,8 +536,8 @@ void AddGenericQuickEnableWorkItems(const InstallerState& installer_state,
void AddUninstallShortcutWorkItems(const InstallerState& installer_state,
const FilePath& setup_path,
const Version& new_version,
- WorkItemList* install_list,
- const Product& product) {
+ const Product& product,
+ WorkItemList* install_list) {
HKEY reg_root = installer_state.root_key();
BrowserDistribution* browser_dist = product.distribution();
DCHECK(browser_dist);
@@ -715,8 +710,8 @@ void AddOemInstallWorkItems(const InstallationState& original_state,
string16 oem_install;
if (source_product->GetOemInstall(&oem_install)) {
VLOG(1) << "Mirroring oeminstall=\"" << oem_install << "\" from "
- << BrowserDistribution::GetSpecificDistribution(source_type)
- ->GetAppShortCutName();
+ << BrowserDistribution::GetSpecificDistribution(source_type)->
+ GetAppShortCutName();
install_list->AddCreateRegKeyWorkItem(root_key, multi_key);
// Always overwrite an old value.
install_list->AddSetRegValueWorkItem(root_key, multi_key,
@@ -750,12 +745,13 @@ void AddEulaAcceptedWorkItems(const InstallationState& original_state,
BrowserDistribution::Type product_type;
DWORD eula_accepted;
const Products& products = installer_state.products();
- for (size_t i = 0, count = products.size(); i != count; ++i) {
- if (products[i]->is_chrome_binaries())
+ for (Products::const_iterator it = products.begin(); it < products.end();
+ ++it) {
+ const Product& product = **it;
+ if (product.is_chrome_binaries())
continue;
DWORD dword_value = 0;
- BrowserDistribution::Type this_type =
- products[i]->distribution()->GetType();
+ BrowserDistribution::Type this_type = product.distribution()->GetType();
const ProductState* product_state =
original_state.GetNonVersionedProductState(
system_install, this_type);
@@ -769,8 +765,8 @@ void AddEulaAcceptedWorkItems(const InstallationState& original_state,
if (have_eula_accepted) {
VLOG(1) << "Mirroring eulaaccepted=" << eula_accepted << " from "
- << BrowserDistribution::GetSpecificDistribution(product_type)
- ->GetAppShortCutName();
+ << BrowserDistribution::GetSpecificDistribution(product_type)->
+ GetAppShortCutName();
install_list->AddCreateRegKeyWorkItem(root_key, multi_key);
install_list->AddSetRegValueWorkItem(
root_key, multi_key, google_update::kRegEULAAceptedField,
@@ -830,9 +826,7 @@ void AddGoogleUpdateWorkItems(const InstallationState& original_state,
}
AddOemInstallWorkItems(original_state, installer_state, install_list);
-
AddEulaAcceptedWorkItems(original_state, installer_state, install_list);
-
AddUsageStatsWorkItems(original_state, installer_state, install_list);
// TODO(grt): check for other keys/values we should put in the package's
@@ -889,21 +883,12 @@ void AddUsageStatsWorkItems(const InstallationState& original_state,
HKEY_CURRENT_USER, dist->GetStateKey(),
google_update::kRegUsageStatsField);
}
- install_list->AddDeleteRegValueWorkItem(root_key, dist->GetStateKey(),
- google_update::kRegUsageStatsField);
+ install_list->AddDeleteRegValueWorkItem(
+ root_key, dist->GetStateKey(), google_update::kRegUsageStatsField);
}
}
}
-// After a successful copying of all the files, this function is called to
-// do a few post install tasks:
-// - Handle the case of in-use-update by updating "opv" (old version) key or
-// deleting it if not required.
-// - Register any new dlls and unregister old dlls.
-// - If this is an MSI install, ensures that the MSI marker is set, and sets
-// it if not.
-// If these operations are successful, the function returns true, otherwise
-// false.
bool AppendPostInstallTasks(const InstallerState& installer_state,
const FilePath& setup_path,
const Version* current_version,
@@ -947,7 +932,7 @@ bool AppendPostInstallTasks(const InstallerState& installer_state,
BrowserDistribution* dist = products[i]->distribution();
version_key = dist->GetVersionKey();
- if (current_version != NULL) {
+ if (current_version) {
in_use_update_work_items->AddSetRegValueWorkItem(root, version_key,
google_update::kRegOldVersionField,
ASCIIToWide(current_version->GetString()), true);
@@ -1042,8 +1027,8 @@ void AddInstallWorkItems(const InstallationState& original_state,
const FilePath& archive_path,
const FilePath& src_path,
const FilePath& temp_path,
+ const Version* current_version,
const Version& new_version,
- scoped_ptr<Version>* current_version,
WorkItemList* install_list) {
DCHECK(install_list);
@@ -1062,8 +1047,8 @@ void AddInstallWorkItems(const InstallationState& original_state,
archive_path,
src_path,
temp_path,
- new_version,
current_version,
+ new_version,
install_list);
}
@@ -1082,17 +1067,18 @@ void AddInstallWorkItems(const InstallationState& original_state,
const bool add_language_identifier = !installer_state.system_install();
const Products& products = installer_state.products();
- for (size_t i = 0; i < products.size(); ++i) {
- const Product* product = products[i];
+ for (Products::const_iterator it = products.begin(); it < products.end();
+ ++it) {
+ const Product& product = **it;
AddUninstallShortcutWorkItems(installer_state, setup_path, new_version,
- install_list, *product);
+ product, install_list);
- AddVersionKeyWorkItems(root, product->distribution(), new_version,
+ AddVersionKeyWorkItems(root, product.distribution(), new_version,
add_language_identifier, install_list);
AddDelegateExecuteWorkItems(installer_state, src_path, new_version,
- *product, install_list);
+ product, install_list);
// TODO(gab): This is only disabled for M22 as the shortcut CL using Active
// Setup will not make it in M22.
@@ -1111,16 +1097,16 @@ void AddInstallWorkItems(const InstallationState& original_state,
AddGoogleUpdateWorkItems(original_state, installer_state, install_list);
AddQuickEnableApplicationHostWorkItems(installer_state, original_state,
- &setup_path, &new_version,
+ setup_path, new_version,
install_list);
AddQuickEnableChromeFrameWorkItems(installer_state, original_state,
- &setup_path, &new_version, install_list);
+ setup_path, new_version, install_list);
// Append the tasks that run after the installation.
AppendPostInstallTasks(installer_state,
setup_path,
- current_version->get(),
+ current_version,
new_version,
temp_path,
install_list);
@@ -1189,7 +1175,7 @@ void AddChromeFrameWorkItems(const InstallationState& original_state,
list->AddSetRegValueWorkItem(root, dist->GetStateKey(),
kChromeFrameReadyModeField,
static_cast<int64>(is_install ? 1 : 0), // The value we want to set.
- is_install ? false : true); // Overwrite existing value.
+ !is_install); // Overwrite existing value.
if (is_install) {
FilePath installer_path(installer_state
.GetInstallerDirectory(new_version).Append(setup_path.BaseName()));
@@ -1284,15 +1270,14 @@ void AddChromeFrameWorkItems(const InstallationState& original_state,
// check if Chrome is installed, and if so, update its uninstallation
// command lines.
const ProductState* chrome_state = original_state.GetProductState(
- installer_state.system_install(),
- BrowserDistribution::CHROME_BROWSER);
+ installer_state.system_install(), BrowserDistribution::CHROME_BROWSER);
if (chrome_state != NULL) {
DCHECK(chrome_state->is_multi_install());
Product chrome(BrowserDistribution::GetSpecificDistribution(
BrowserDistribution::CHROME_BROWSER));
chrome.InitializeFromUninstallCommand(chrome_state->uninstall_command());
AddUninstallShortcutWorkItems(installer_state, setup_path,
- chrome_state->version(), list, chrome);
+ chrome_state->version(), chrome, list);
} else {
NOTREACHED() << "What happened to Chrome?";
}
@@ -1497,13 +1482,9 @@ void RefreshElevationPolicy() {
void AddQuickEnableChromeFrameWorkItems(const InstallerState& installer_state,
const InstallationState& machine_state,
- const FilePath* setup_path,
- const Version* new_version,
+ const FilePath& setup_path,
+ const Version& new_version,
WorkItemList* work_item_list) {
- DCHECK(setup_path ||
- installer_state.operation() == InstallerState::UNINSTALL);
- DCHECK(new_version ||
- installer_state.operation() == InstallerState::UNINSTALL);
DCHECK(work_item_list);
const bool system_install = installer_state.system_install();
@@ -1513,9 +1494,8 @@ void AddQuickEnableChromeFrameWorkItems(const InstallerState& installer_state,
const ProductState* product_state = NULL;
// Is Chrome Frame !ready-mode already on the machine?
- product_state =
- machine_state.GetProductState(system_install,
- BrowserDistribution::CHROME_FRAME);
+ product_state = machine_state.GetProductState(
+ system_install, BrowserDistribution::CHROME_FRAME);
if (product_state != NULL &&
!product_state->uninstall_command().HasSwitch(
switches::kChromeFrameReadyMode))
@@ -1550,22 +1530,18 @@ void AddQuickEnableChromeFrameWorkItems(const InstallerState& installer_state,
machine_state,
setup_path,
new_version,
- work_item_list,
have_chrome_frame,
cmd_line,
- kCmdQuickEnableCf);
+ kCmdQuickEnableCf,
+ work_item_list);
}
void AddQuickEnableApplicationHostWorkItems(
const InstallerState& installer_state,
const InstallationState& machine_state,
- const FilePath* setup_path,
- const Version* new_version,
+ const FilePath& setup_path,
+ const Version& new_version,
WorkItemList* work_item_list) {
- DCHECK(setup_path ||
- installer_state.operation() == InstallerState::UNINSTALL);
- DCHECK(new_version ||
- installer_state.operation() == InstallerState::UNINSTALL);
DCHECK(work_item_list);
CommandLine cmd_line(CommandLine::NO_PROGRAM);
@@ -1581,15 +1557,15 @@ void AddQuickEnableApplicationHostWorkItems(
machine_state,
setup_path,
new_version,
- work_item_list,
false, // have_child_product
cmd_line,
- kCmdQuickEnableApplicationHost);
+ kCmdQuickEnableApplicationHost,
+ work_item_list);
}
void AddOsUpgradeWorkItems(const InstallerState& installer_state,
- const FilePath* setup_path,
- const Version* new_version,
+ const FilePath& setup_path,
+ const Version& new_version,
const Product& product,
WorkItemList* install_list) {
const HKEY root_key = installer_state.root_key();
@@ -1599,12 +1575,15 @@ void AddOsUpgradeWorkItems(const InstallerState& installer_state,
.append(1, FilePath::kSeparators[0])
.append(kCmdOnOsUpgrade);
- // This will make Google Update call setup.exe with --on-os-upgrade switch.
- // For Chrome, this leads to HandleOsUpgradeForBrowser() being called.
- if (installer_state.operation() != InstallerState::UNINSTALL) {
+ if (installer_state.operation() == InstallerState::UNINSTALL) {
+ install_list->AddDeleteRegKeyWorkItem(root_key, cmd_key)->
+ set_log_message("Removing OS upgrade command");
+ } else {
+ // Register with Google Update to have setup.exe --on-os-upgrade called on
+ // OS upgrade.
CommandLine cmd_line(installer_state
- .GetInstallerDirectory(*new_version)
- .Append(setup_path->BaseName()));
+ .GetInstallerDirectory(new_version)
+ .Append(setup_path.BaseName()));
// Add the main option to indicate OS upgrade flow.
cmd_line.AppendSwitch(installer::switches::kOnOsUpgrade);
// Add product-specific options.
@@ -1617,9 +1596,6 @@ void AddOsUpgradeWorkItems(const InstallerState& installer_state,
AppCommand cmd(cmd_line.GetCommandLineString());
cmd.set_is_auto_run_on_os_upgrade(true);
cmd.AddWorkItems(installer_state.root_key(), cmd_key, install_list);
- } else {
- install_list->AddDeleteRegKeyWorkItem(root_key, cmd_key)
- ->set_log_message("Removing OS upgrade command");
}
}
« no previous file with comments | « chrome/installer/setup/install_worker.h ('k') | chrome/installer/setup/install_worker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698