| 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;
|
| +}
|
| +
|
|
|