Index: chrome/installer/setup/install_worker.cc |
diff --git a/chrome/installer/setup/install_worker.cc b/chrome/installer/setup/install_worker.cc |
index 43ce81a1676efa5126c00999bd3bd8c73bbfaafc..4e0e79a2f87ac55e1f8c576c9c4c1c6bb5554f33 100644 |
--- a/chrome/installer/setup/install_worker.cc |
+++ b/chrome/installer/setup/install_worker.cc |
@@ -319,6 +319,15 @@ void AddProductSpecificWorkItems(const InstallationState& original_state, |
AddInstallAppCommandWorkItems(installer_state, original_state, |
&setup_path, &new_version, p, list); |
} |
+ if (p.is_chrome()) { |
+ // In Chrome Browser, add registry entries so that when an OS upgrade |
+ // occurs, Google Update will call setup.exe with --on-os-upgrade switch, |
+ // which leads to ChromeBrowserOnOsUpgrade() being called. |
+ CommandLine cmd_line(CommandLine::NO_PROGRAM); |
+ RenderChromeBrowserOsUpgradeCommand(installer_state, setup_path, |
+ new_version, &cmd_line); |
+ AddOsUpgradeWorkItems(original_state, installer_state, p, cmd_line, list); |
+ } |
} |
} |
@@ -1593,4 +1602,41 @@ void AddQuickEnableApplicationHostWorkItems( |
kCmdQuickEnableApplicationHost); |
} |
+void RenderChromeBrowserOsUpgradeCommand( |
gab
2012/08/28 16:08:19
s/Render/Get
gab
2012/08/28 16:08:19
Remove "ChromeBrowser" from function name
grt (UTC plus 2)
2012/08/28 19:35:39
suggestion: you can make this product-independent
huangs
2012/08/29 17:02:54
Took grt@'s approach.
|
+ const InstallerState& installer_state, |
+ const FilePath& setup_path, |
+ const Version& new_version, |
+ CommandLine* cmd_line) { |
+ FilePath installer_path(installer_state |
+ .GetInstallerDirectory(new_version).Append(setup_path.BaseName())); |
+ cmd_line->SetProgram(installer_path); |
+ cmd_line->AppendSwitch(installer::switches::kOnOsUpgrade); |
+ cmd_line->AppendSwitch(installer::switches::kChrome); |
gab
2012/08/28 16:08:19
nit: unindent 2 spaces
huangs
2012/08/29 17:02:54
Done.
|
+ if (installer_state.system_install()) |
+ cmd_line->AppendSwitch(installer::switches::kSystemLevel); |
+ if (installer_state.is_multi_install()) |
+ cmd_line->AppendSwitch(installer::switches::kMultiInstall); |
+ if (installer_state.verbose_logging()) |
+ cmd_line->AppendSwitch(installer::switches::kVerboseLogging); |
+} |
+ |
+void AddOsUpgradeWorkItems(const InstallationState& original_state, |
+ const InstallerState& installer_state, |
+ const Product& product, |
+ const CommandLine& cmd_line, |
+ WorkItemList* install_list) { |
+ const HKEY root_key = installer_state.root_key(); |
+ std::wstring cmd_key(product.distribution()->GetVersionKey()); |
gab
2012/08/28 16:08:19
std::wstring -> string16
huangs
2012/08/29 17:02:54
Done. Also replacing everywhere else in file.
On
|
+ cmd_key.append(1, L'\\').append(google_update::kRegCommandsKey) |
gab
2012/08/28 16:08:19
use
.push_back(FilePath::kSeparators[0])
instead o
huangs
2012/08/29 17:02:54
Okay, but .push_back() returns void, and cannot be
|
+ .append(1, L'\\').append(kCmdOnOsUpgrade); |
+ if (installer_state.operation() != InstallerState::UNINSTALL) { |
+ install_list->set_log_message("Adding OS upgrade command"); |
+ AppCommand cmd(cmd_line.GetCommandLineString(), false, false, true); |
+ cmd.AddWorkItems(installer_state.root_key(), cmd_key, install_list); |
+ } else { |
+ install_list->set_log_message("Removing OS upgrade command"); |
+ install_list->AddDeleteRegKeyWorkItem(root_key, cmd_key); |
+ } |
+} |
+ |
} // namespace installer |