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

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

Issue 2773002: Fix problem whereby the "-full" magic value is removed from the "ap" value wh... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 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
Index: chrome/installer/util/google_update_settings.cc
===================================================================
--- chrome/installer/util/google_update_settings.cc (revision 49062)
+++ chrome/installer/util/google_update_settings.cc (working copy)
@@ -95,15 +95,15 @@
}
int GoogleUpdateSettings::GetLastRunTime() {
- std::wstring time_s;
- if (!ReadGoogleUpdateStrKey(google_update::kRegLastRunTimeField, &time_s))
- return -1;
- int64 time_i;
- if (!StringToInt64(time_s, &time_i))
- return -1;
- base::TimeDelta td =
+ std::wstring time_s;
+ if (!ReadGoogleUpdateStrKey(google_update::kRegLastRunTimeField, &time_s))
+ return -1;
+ int64 time_i;
+ if (!StringToInt64(time_s, &time_i))
+ return -1;
+ base::TimeDelta td =
base::Time::NowFromSystemTime() - base::Time::FromInternalValue(time_i);
- return td.InDays();
+ return td.InDays();
}
bool GoogleUpdateSettings::SetLastRunTime() {
@@ -175,3 +175,67 @@
return true;
}
+
+void GoogleUpdateSettings::UpdateDiffInstallStatus(bool system_install,
+ bool incremental_install, int install_return_code,
+ const std::wstring& product_guid) {
+ HKEY reg_root = (system_install) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
+
+ RegKey key;
+ std::wstring ap_key_value;
+ std::wstring reg_key(google_update::kRegPathClientState);
+ reg_key.append(L"\\");
+ reg_key.append(product_guid);
+ if (!key.Open(reg_root, reg_key.c_str(), KEY_ALL_ACCESS) ||
+ !key.ReadValue(google_update::kRegApField, &ap_key_value)) {
+ LOG(INFO) << "Application key not found.";
+ if (!incremental_install || !install_return_code) {
+ LOG(INFO) << "Returning without changing application key.";
+ key.Close();
+ return;
+ } else if (!key.Valid()) {
+ reg_key.assign(google_update::kRegPathClientState);
+ if (!key.Open(reg_root, reg_key.c_str(), KEY_ALL_ACCESS) ||
+ !key.CreateKey(product_guid.c_str(), KEY_ALL_ACCESS)) {
+ LOG(ERROR) << "Failed to create application key.";
+ key.Close();
+ return;
+ }
+ }
+ }
+
+ std::wstring new_value = GetNewGoogleUpdateApKey(
+ incremental_install, install_return_code, ap_key_value);
+ if ((new_value.compare(ap_key_value) != 0) &&
+ !key.WriteValue(google_update::kRegApField, new_value.c_str())) {
+ LOG(ERROR) << "Failed to write value " << new_value
+ << " to the registry field " << google_update::kRegApField;
+ }
+ key.Close();
+}
+
+std::wstring GoogleUpdateSettings::GetNewGoogleUpdateApKey(
+ bool diff_install, int install_return_code, const std::wstring& value) {
+ // Magic suffix that we need to add or remove to "ap" key value.
+ const std::wstring kMagicSuffix = L"-full";
+
+ bool has_magic_string = false;
+ if ((value.length() >= kMagicSuffix.length()) &&
+ (value.rfind(kMagicSuffix) == (value.length() - kMagicSuffix.length()))) {
+ LOG(INFO) << "Incremental installer failure key already set.";
+ has_magic_string = true;
+ }
+
+ std::wstring new_value(value);
+ if ((!diff_install || !install_return_code) && has_magic_string) {
+ LOG(INFO) << "Removing failure key from value " << value;
+ new_value = value.substr(0, value.length() - kMagicSuffix.length());
+ } else if ((diff_install && install_return_code) &&
+ !has_magic_string) {
+ LOG(INFO) << "Incremental installer failed, setting failure key.";
+ new_value.append(kMagicSuffix);
+ }
+
+ return new_value;
+}
+

Powered by Google App Engine
This is Rietveld 408576698