Index: chrome/installer/setup/install_worker.cc |
diff --git a/chrome/installer/setup/install_worker.cc b/chrome/installer/setup/install_worker.cc |
index b771ac3993b9c741a21adeec21971d87854ca4d2..120021989124d9d8be72dfa8ff440b9883ae8775 100644 |
--- a/chrome/installer/setup/install_worker.cc |
+++ b/chrome/installer/setup/install_worker.cc |
@@ -199,11 +199,11 @@ void AddUninstallShortcutWorkItems(const InstallerState& installer_state, |
true); |
install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg, |
L"Version", |
- UTF8ToWide(new_version.GetString()), |
+ ASCIIToWide(new_version.GetString()), |
true); |
install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg, |
L"DisplayVersion", |
- UTF8ToWide(new_version.GetString()), |
+ ASCIIToWide(new_version.GetString()), |
true); |
install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg, |
L"InstallDate", |
@@ -254,7 +254,7 @@ void AddVersionKeyWorkItems(HKEY root, |
false); // set during first install |
list->AddSetRegValueWorkItem(root, version_key, |
google_update::kRegVersionField, |
- UTF8ToWide(new_version.GetString()), |
+ ASCIIToWide(new_version.GetString()), |
true); // overwrite version |
} |
@@ -547,14 +547,19 @@ bool AppendPostInstallTasks(const InstallerState& installer_state, |
const Products& products = installer_state.products(); |
// Append work items that will only be executed if this was an update. |
- // We update the 'opv' key with the current version that is active and 'cmd' |
- // key with the rename command to run. |
+ // We update the 'opv' value with the current version that is active, |
+ // the 'cpv' value with the critical update version (if present), and the |
+ // 'cmd' value with the rename command to run. |
{ |
scoped_ptr<WorkItemList> in_use_update_work_items( |
WorkItem::CreateConditionalWorkItemList( |
new ConditionRunIfFileExists(new_chrome_exe))); |
in_use_update_work_items->set_log_message("InUseUpdateWorkItemList"); |
+ // |critical_version| will be valid only if this in-use update includes a |
+ // version considered critical relative to the version being updated. |
+ Version critical_version(installer_state.DetermineCriticalVersion( |
+ current_version, new_version)); |
FilePath installer_path(installer_state.GetInstallerDirectory(new_version) |
.Append(setup_path.BaseName())); |
@@ -574,7 +579,15 @@ bool AppendPostInstallTasks(const InstallerState& installer_state, |
if (current_version != NULL) { |
in_use_update_work_items->AddSetRegValueWorkItem(root, version_key, |
google_update::kRegOldVersionField, |
- UTF8ToWide(current_version->GetString()), true); |
+ ASCIIToWide(current_version->GetString()), true); |
+ } |
+ if (critical_version.IsValid()) { |
+ in_use_update_work_items->AddSetRegValueWorkItem(root, version_key, |
+ google_update::kRegCriticalVersionField, |
+ ASCIIToWide(critical_version.GetString()), true); |
+ } else { |
+ in_use_update_work_items->AddDeleteRegValueWorkItem(root, version_key, |
+ google_update::kRegCriticalVersionField); |
} |
// Adding this registry entry for all products is overkill. |
@@ -585,22 +598,25 @@ bool AppendPostInstallTasks(const InstallerState& installer_state, |
CommandLine product_rename_cmd(rename); |
products[i]->AppendRenameFlags(&product_rename_cmd); |
in_use_update_work_items->AddSetRegValueWorkItem( |
- root, |
- version_key, |
- google_update::kRegRenameCmdField, |
- product_rename_cmd.GetCommandLineString(), |
- true); |
+ root, version_key, google_update::kRegRenameCmdField, |
+ product_rename_cmd.GetCommandLineString(), true); |
} |
if (current_version != NULL && installer_state.is_multi_install()) { |
BrowserDistribution* dist = |
installer_state.multi_package_binaries_distribution(); |
+ version_key = dist->GetVersionKey(); |
in_use_update_work_items->AddSetRegValueWorkItem( |
- root, |
- dist->GetVersionKey(), |
- google_update::kRegOldVersionField, |
- UTF8ToWide(current_version->GetString()), |
- true); |
+ root, version_key, google_update::kRegOldVersionField, |
+ ASCIIToWide(current_version->GetString()), true); |
+ if (critical_version.IsValid()) { |
+ in_use_update_work_items->AddSetRegValueWorkItem( |
+ root, version_key, google_update::kRegCriticalVersionField, |
+ ASCIIToWide(critical_version.GetString()), true); |
+ } else { |
+ in_use_update_work_items->AddDeleteRegValueWorkItem( |
+ root, version_key, google_update::kRegCriticalVersionField); |
+ } |
// TODO(tommi): We should move the rename command here. We also need to |
// update upgrade_utils::SwapNewChromeExeIfPresent. |
} |
@@ -620,14 +636,16 @@ bool AppendPostInstallTasks(const InstallerState& installer_state, |
new Not(new ConditionRunIfFileExists(new_chrome_exe)))); |
regular_update_work_items->set_log_message("RegularUpdateWorkItemList"); |
- // Since this was not an in-use-update, delete 'opv' and 'cmd' keys. |
+ // Since this was not an in-use-update, delete 'opv', 'cpv', and 'cmd' keys. |
for (size_t i = 0; i < products.size(); ++i) { |
BrowserDistribution* dist = products[i]->distribution(); |
std::wstring version_key(dist->GetVersionKey()); |
regular_update_work_items->AddDeleteRegValueWorkItem(root, version_key, |
- google_update::kRegOldVersionField); |
+ google_update::kRegOldVersionField); |
+ regular_update_work_items->AddDeleteRegValueWorkItem(root, version_key, |
+ google_update::kRegCriticalVersionField); |
regular_update_work_items->AddDeleteRegValueWorkItem(root, version_key, |
- google_update::kRegRenameCmdField); |
+ google_update::kRegRenameCmdField); |
} |
if (installer_state.FindProduct(BrowserDistribution::CHROME_FRAME)) { |