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

Unified Diff: chrome/installer/util/install_util.cc

Issue 1986823002: Reset user data directory and disk cache directory after downgrade. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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/util/install_util.h ('k') | chrome/installer/util/install_util_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/installer/util/install_util.cc
diff --git a/chrome/installer/util/install_util.cc b/chrome/installer/util/install_util.cc
index c5568048da4978a6a33234dc036ac5228fa95b7e..4a106c3a806ba9e804beba2c2afcef837d7d1512 100644
--- a/chrome/installer/util/install_util.cc
+++ b/chrome/installer/util/install_util.cc
@@ -44,6 +44,7 @@ using installer::ProductState;
namespace {
+const wchar_t kRegDowngradeVersion[] = L"DowngradeVersion";
const wchar_t kStageBinaryPatching[] = L"binary_patching";
const wchar_t kStageBuilding[] = L"building";
const wchar_t kStageConfiguringAutoLaunch[] = L"configuring_auto_launch";
@@ -630,6 +631,47 @@ bool InstallUtil::ProgramCompare::GetInfo(const base::File& file,
return GetFileInformationByHandle(file.GetPlatformFile(), info) != 0;
}
+// static
+base::Version InstallUtil::GetDowngradeVersion(
+ bool system_install,
+ const BrowserDistribution* dist) {
+ DCHECK(dist);
+ base::win::RegKey key;
+ base::string16 downgrade_version;
+ if (key.Open(system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER,
+ dist->GetStateKey().c_str(),
+ KEY_QUERY_VALUE | KEY_WOW64_32KEY) != ERROR_SUCCESS ||
+ key.ReadValue(kRegDowngradeVersion, &downgrade_version) !=
+ ERROR_SUCCESS) {
+ return base::Version();
+ }
+ return base::Version(base::UTF16ToASCII(downgrade_version));
+}
+
+// static
+void InstallUtil::AddUpdateDowngradeVersionItem(
+ bool system_install,
+ const base::Version* current_version,
+ const base::Version& new_version,
+ const BrowserDistribution* dist,
+ WorkItemList* list) {
+ DCHECK(list);
+ DCHECK(dist);
+ DCHECK_EQ(BrowserDistribution::CHROME_BROWSER, dist->GetType());
+ base::Version downgrade_version = GetDowngradeVersion(system_install, dist);
+ HKEY root = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
+ if (!current_version ||
+ (*current_version <= new_version &&
+ ((!downgrade_version.IsValid() || downgrade_version <= new_version)))) {
+ list->AddDeleteRegValueWorkItem(root, dist->GetStateKey(), KEY_WOW64_32KEY,
+ kRegDowngradeVersion);
+ } else if (*current_version > new_version && !downgrade_version.IsValid()) {
+ list->AddSetRegValueWorkItem(
+ root, dist->GetStateKey(), KEY_WOW64_32KEY, kRegDowngradeVersion,
+ base::ASCIIToUTF16(current_version->GetString()), true);
+ }
+}
+
InstallUtil::ProgramCompare::ProgramCompare(const base::FilePath& path_to_match)
: ProgramCompare(path_to_match, ComparisonType::FILE) {}
« no previous file with comments | « chrome/installer/util/install_util.h ('k') | chrome/installer/util/install_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698