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

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

Issue 6588003: Add support for the quick-enable-cf command to the installer. This encompase... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 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
Index: chrome/installer/setup/install_worker.cc
===================================================================
--- chrome/installer/setup/install_worker.cc (revision 76372)
+++ chrome/installer/setup/install_worker.cc (working copy)
@@ -615,6 +615,9 @@
AddGoogleUpdateWorkItems(installer_state, install_list);
+ AddQuickEnableWorkItems(installer_state, original_state, &setup_path,
+ &new_version, install_list);
+
// Append the tasks that run after the installation.
AppendPostInstallTasks(installer_state,
setup_path,
@@ -901,4 +904,110 @@
}
}
+void AddQuickEnableWorkItems(const InstallerState& installer_state,
grt (UTC plus 2) 2011/03/02 19:48:28 This function made me so sad that I rewrote it. T
tommi (sloooow) - chröme 2011/03/02 20:30:58 thanks. more easily digestible :)
grt (UTC plus 2) 2011/03/02 20:44:47 <burp>
+ const InstallationState& machine_state,
+ const FilePath* setup_path,
+ const Version* new_version,
+ WorkItemList* work_item_list) {
+ DCHECK(work_item_list);
+
+ enum QuickEnableOperation {
+ DO_NOTHING,
+ ADD_COMMAND,
+ REMOVE_COMMAND
+ } operation = DO_NOTHING;
+ const Version* binaries_version = NULL;
+ FilePath binaries_setup_path;
+
+ if (installer_state.operation() == InstallerState::UNINSTALL) {
+ // Add the quick-enable command if Chrome Frame single, multi, or ready-mode
+ // is being uninstalled, Chrome multi is installed, and Chrome multi is not
+ // being uninstalled.
+ const ProductState* chrome =
+ machine_state.GetProductState(installer_state.system_install(),
+ BrowserDistribution::CHROME_BROWSER);
+ if (installer_state.FindProduct(
+ BrowserDistribution::CHROME_FRAME) != NULL &&
+ chrome != NULL && chrome->is_multi_install() &&
+ installer_state.FindProduct(
+ BrowserDistribution::CHROME_BROWSER) == NULL) {
+ operation = ADD_COMMAND;
+ // Chrome multi's uninstall command has the proper path to setup.exe.
+ binaries_setup_path = chrome->uninstall_command().GetProgram();
+ }
+ } else {
robertshield 2011/03/02 14:58:57 Can we move the DCHECKS on setup_path and new_vers
grt (UTC plus 2) 2011/03/02 19:48:28 Done.
+ // Delete the quick-enable command if Chrome Frame single or Chrome Frame
+ // multi (not ready-mode) is being installed. Note that the command can
+ // only be present if the binaries are already installed, but we try to
+ // remove it in any case just to be sure.
+ const Product* cf =
+ installer_state.FindProduct(BrowserDistribution::CHROME_FRAME);
+ const Product* chrome =
+ installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER);
+ if (cf != NULL && (!installer_state.is_multi_install() ||
+ !cf->HasOption(installer::kOptionReadyMode))) {
+ operation = REMOVE_COMMAND;
+ } else if (cf != NULL) {
+ // Add the quick-enable command if Chrome Frame ready-mode is being
+ // installed.
+ DCHECK(cf->HasOption(installer::kOptionReadyMode));
tommi (sloooow) - chröme 2011/03/01 23:33:13 couldn't we also get here for a 'single' install (
grt (UTC plus 2) 2011/03/02 19:48:28 I don't think so (at least, that wasn't my plan).
+ DCHECK(setup_path);
+ DCHECK(new_version);
+ operation = ADD_COMMAND;
+ // This new version's setup.exe is the one we need.
+ binaries_version = new_version;
+ } else if (installer_state.is_multi_install() &&
+ machine_state.GetProductState(
+ installer_state.system_install(),
+ BrowserDistribution::CHROME_FRAME) == NULL) {
tommi (sloooow) - chröme 2011/03/01 23:33:13 What if there exists a system install of gcf and t
grt (UTC plus 2) 2011/03/02 19:48:28 Robert, Erik, and I just discussed this and reache
+ // Add the quick-enable command if Chrome Frame is not being installed,
+ // we're doing a multi-install of Chrome, and single Chrome Frame is not
+ // already installed.
+ DCHECK(installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER));
+ DCHECK(new_version);
+ operation = ADD_COMMAND;
+ // This new version's setup.exe is the one we need.
+ binaries_version = new_version;
+ } else {
+ // Else we're doing a single install of Chrome, so do nothing.
+ DCHECK(!installer_state.is_multi_install() && chrome != NULL);
+ }
+
+ // Get the proper path to setup.exe if needed.
+ if (operation == ADD_COMMAND) {
+ DCHECK(binaries_version);
+ DCHECK(!setup_path->empty());
+ binaries_setup_path =
+ installer_state.GetInstallerDirectory(*binaries_version).Append(
+ setup_path->BaseName());
+ }
+ }
+
+ if (operation != DO_NOTHING) {
+ BrowserDistribution* binaries =
+ BrowserDistribution::GetSpecificDistribution(
+ BrowserDistribution::CHROME_BINARIES);
+ std::wstring cmd_key(binaries->GetVersionKey());
+ cmd_key.append(1, L'\\').append(kCmdQuickEnableCf);
erikwright (departed) 2011/03/02 15:18:16 add \\Commands here, after the version key.
grt (UTC plus 2) 2011/03/02 19:48:28 Done.
+
+ if (operation == ADD_COMMAND) {
+ DCHECK(!binaries_setup_path.empty());
+ CommandLine cmd_line(binaries_setup_path);
+ cmd_line.AppendSwitch(switches::kMultiInstall);
+ if (installer_state.system_install())
+ cmd_line.AppendSwitch(switches::kSystemLevel);
+ if (installer_state.verbose_logging())
+ cmd_line.AppendSwitch(switches::kVerboseLogging);
+ cmd_line.AppendSwitch(switches::kChromeFrameQuickEnable);
+ ProductCommand cmd(cmd_line.command_line_string(), true, true);
+ 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 quick-enable-cf command");
+ }
+ }
+}
+
} // namespace installer

Powered by Google App Engine
This is Rietveld 408576698