summaryrefslogtreecommitdiffstats
path: root/chrome/installer/setup/install.cc
diff options
context:
space:
mode:
authorkuchhal@chromium.org <kuchhal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-07 23:40:38 +0000
committerkuchhal@chromium.org <kuchhal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-07 23:40:38 +0000
commit28c196952f639ae961bfb63365362a15ed2e34d7 (patch)
treed335385079d0b494648e615c0ca3c335670d0221 /chrome/installer/setup/install.cc
parent19ef18a1027eaa9eb95bc89bf7fb27c102a24c16 (diff)
downloadchromium_src-28c196952f639ae961bfb63365362a15ed2e34d7.zip
chromium_src-28c196952f639ae961bfb63365362a15ed2e34d7.tar.gz
chromium_src-28c196952f639ae961bfb63365362a15ed2e34d7.tar.bz2
* Check the presence of new_chrome.exe before using opv key for version.
Review URL: http://codereview.chromium.org/10214 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5035 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/installer/setup/install.cc')
-rw-r--r--chrome/installer/setup/install.cc18
1 files changed, 12 insertions, 6 deletions
diff --git a/chrome/installer/setup/install.cc b/chrome/installer/setup/install.cc
index b051f82..7543212 100644
--- a/chrome/installer/setup/install.cc
+++ b/chrome/installer/setup/install.cc
@@ -160,13 +160,13 @@ bool installer::InstallNewVersion(const std::wstring& exe_path,
std::wstring new_chrome_exe = AppendPath(install_path,
installer_util::kChromeNewExe);
BrowserDistribution* dist = BrowserDistribution::GetDistribution();
- RegKey chrome_key(reg_root, dist->GetVersionKey().c_str(),
- KEY_READ | KEY_WRITE);
+ RegKey chrome_key(reg_root, dist->GetVersionKey().c_str(), KEY_READ);
std::wstring current_version;
if (file_util::PathExists(new_chrome_exe))
chrome_key.ReadValue(google_update::kRegOldVersionField, &current_version);
if (current_version.empty())
chrome_key.ReadValue(google_update::kRegVersionField, &current_version);
+ chrome_key.Close();
install_list->AddDeleteTreeWorkItem(new_chrome_exe, std::wstring());
install_list->AddCopyTreeWorkItem(
@@ -250,11 +250,17 @@ bool installer::InstallNewVersion(const std::wstring& exe_path,
}
}
} else {
- if (chrome_key.ValueExists(google_update::kRegOldVersionField) &&
- !chrome_key.DeleteValue(google_update::kRegOldVersionField)) {
- LOG(ERROR) << "New chrome.exe doesn't exist but failed to delete "
- << "old version value in registry.";
+ scoped_ptr<WorkItemList> inuse_list(WorkItem::CreateWorkItemList());
+ inuse_list->AddDeleteRegValueWorkItem(reg_root, version_key,
+ google_update::kRegOldVersionField,
+ true);
+ inuse_list->AddDeleteRegValueWorkItem(reg_root, version_key,
+ google_update::kRegRenameCmdField,
+ true);
+ if (!inuse_list->Do()) {
+ LOG(ERROR) << "Couldn't write old version/rename value to registry.";
success = false;
+ inuse_list->Rollback();
}
}
}