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

Unified Diff: goopdate/application_usage_data.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 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 | « goopdate/application_usage_data.h ('k') | goopdate/application_usage_data_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: goopdate/application_usage_data.cc
diff --git a/goopdate/application_usage_data.cc b/goopdate/application_usage_data.cc
deleted file mode 100644
index f1cf39bbd6cd11c9b68c386255245aee75c1a1d4..0000000000000000000000000000000000000000
--- a/goopdate/application_usage_data.cc
+++ /dev/null
@@ -1,337 +0,0 @@
-// Copyright 2007-2010 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// ========================================================================
-
-#include "omaha/goopdate/application_usage_data.h"
-#include "omaha/base/const_utils.h"
-#include "omaha/base/logging.h"
-#include "omaha/base/reg_key.h"
-#include "omaha/base/string.h"
-#include "omaha/base/user_info.h"
-#include "omaha/base/utils.h"
-#include "omaha/base/vistautil.h"
-#include "omaha/common/app_registry_utils.h"
-#include "omaha/common/const_goopdate.h"
-
-namespace omaha {
-
-namespace {
-
-HRESULT RegistryReadStringOrDword(const RegKey& key,
- const CString& value_name,
- CString* result) {
- ASSERT1(result);
- DWORD type = REG_NONE;
- DWORD value = 0;
-
- HRESULT hr = key.GetValueType(value_name, &type);
- if (FAILED(hr)) {
- return hr;
- }
-
- switch (type) {
- case REG_DWORD:
- hr = key.GetValue(value_name, &value);
- if (FAILED(hr)) {
- return hr;
- }
- *result = itostr(static_cast<const uint32>(value));
- return S_OK;
- case REG_SZ:
- return key.GetValue(value_name, result);
- default:
- return HRESULT_FROM_WIN32(ERROR_DATATYPE_MISMATCH);
- }
-}
-
-} // namespace
-
-ApplicationUsageData::ApplicationUsageData(bool is_machine,
- bool check_low_integrity)
- : exists_(false),
- did_run_(false),
- is_machine_(is_machine),
- is_pre_update_check_(true),
- check_low_integrity_(check_low_integrity) {
-}
-
-ApplicationUsageData::~ApplicationUsageData() {
-}
-
-HRESULT ApplicationUsageData::ReadDidRun(const CString& app_guid) {
- CORE_LOG(L4, (_T("[ApplicationUsageData::ReadDidRun][%s]"), app_guid));
- is_pre_update_check_ = true;
- HRESULT hr = ProcessDidRun(app_guid);
- if (FAILED(hr)) {
- CORE_LOG(LW, (_T("[ProcessDidRun failed][0x%08x]"), hr));
- return hr;
- }
-
- return S_OK;
-}
-
-ActiveStates ApplicationUsageData::active_state() const {
- if (exists()) {
- return did_run() ? ACTIVE_RUN : ACTIVE_NOTRUN;
- } else {
- return ACTIVE_UNKNOWN;
- }
-}
-
-HRESULT ApplicationUsageData::ResetDidRun(const CString& app_guid) {
- CORE_LOG(L4, (_T("[ApplicationUsageData::ResetDidRun][%s]"), app_guid));
- is_pre_update_check_ = false;
- return ProcessDidRun(app_guid);
-}
-
-HRESULT ApplicationUsageData::ProcessDidRun(const CString& app_guid) {
- CORE_LOG(L4, (_T("[ApplicationUsageData::ProcessDidRun][%s]"), app_guid));
- return is_machine_ ? ProcessMachineDidRun(app_guid) :
- ProcessUserDidRun(app_guid);
-}
-
-HRESULT ApplicationUsageData::ProcessMachineDidRun(const CString& app_guid) {
- ASSERT1(is_machine_);
-
- // Logic is as follows:
- // for each user under HKU\<sid>
- // pre/post process HKU\<sid>
- // if vista
- // pre/post process HKU\<lowintegrity IE>\<sid>
- // pre/post process HKLM
- RegKey users_key;
- HRESULT hr = users_key.Open(USERS_KEY, KEY_READ);
- if (SUCCEEDED(hr)) {
- uint32 num_users = users_key.GetSubkeyCount();
- for (uint32 i = 0; i < num_users; ++i) {
- CString sub_key_name;
- hr = users_key.GetSubkeyNameAt(i, &sub_key_name);
- if (FAILED(hr)) {
- CORE_LOG(LEVEL_WARNING, (_T("[Key enum failed.][0x%08x][%d][%s]"),
- hr, i, USERS_KEY));
- continue;
- }
-
- CString temp_key = AppendRegKeyPath(USERS_KEY,
- sub_key_name,
- GOOPDATE_REG_RELATIVE_CLIENT_STATE);
- CString user_state_key_name = AppendRegKeyPath(temp_key, app_guid);
- hr = ProcessKey(user_state_key_name);
- if (FAILED(hr)) {
- CORE_LOG(L4, (_T("[ProcessKey failed][%s][0x%08x]"), app_guid, hr));
- }
-
- if (check_low_integrity_) {
- // If we are running on vista we need to also look at the low
- // integrity IE key where IE can write to. Note that we cannot
- // use the IEGetWriteableHKCU function since this function assumes
- // that we are running with the user's credentials.
- CString temp_key = AppendRegKeyPath(USERS_KEY,
- sub_key_name,
- USER_REG_VISTA_LOW_INTEGRITY_HKCU);
- CString li_hkcu_name = AppendRegKeyPath(
- AppendRegKeyPath(
- temp_key,
- sub_key_name,
- GOOPDATE_REG_RELATIVE_CLIENT_STATE),
- app_guid);
- hr = ProcessKey(li_hkcu_name);
- if (FAILED(hr)) {
- CORE_LOG(L4, (_T("[ProcessKey failed][%s][0x%08x]"), app_guid, hr));
- }
- }
- } // End of for
-
- // Now Process the machine did run value also.
- CString machine_state_key_name =
- app_registry_utils::GetAppClientStateKey(true, app_guid);
- hr = ProcessBackWardCompatKey(machine_state_key_name);
- if (FAILED(hr)) {
- CORE_LOG(L4, (_T("[ProcessBackWardCompatKey failed][0x%08x][%s]"),
- hr, machine_state_key_name));
- }
- } else {
- CORE_LOG(LW, (_T("[Key open failed.][0x%08x][%s]"), hr, USERS_KEY));
- }
-
- return S_OK;
-}
-
-HRESULT ApplicationUsageData::ProcessUserDidRun(const CString& app_guid) {
- ASSERT1(!is_machine_);
-
- // Logic:
- // Pre/Post process HKCU\
- // if vista:
- // Pre/Post process HKCU\LowIntegrity
- CString state_key_name = app_registry_utils::GetAppClientStateKey(false,
- app_guid);
- HRESULT hr = ProcessKey(state_key_name);
- if (FAILED(hr)) {
- CORE_LOG(L4, (_T("[ProcessKey failed][0x%08x][%s]"),
- hr, state_key_name));
- }
-
- if (check_low_integrity_) {
- // If we are running on vista we need to also look at the low
- // integrity IE key where IE can write to. To avoid loading
- // ieframe.dll into our process, we just use the registry
- // key location directly instead of using IEGetWriteableHKCU
- CString sid;
- hr = user_info::GetProcessUser(NULL, NULL, &sid);
- if (FAILED(hr)) {
- CORE_LOG(LEVEL_WARNING, (_T("[GetProcessUser failed][0x%08x][%s]"),
- hr, app_guid));
- return hr;
- }
-
- CString temp_name = AppendRegKeyPath(USER_KEY_NAME,
- USER_REG_VISTA_LOW_INTEGRITY_HKCU,
- sid);
- CString lowintegrity_hkcu_name = AppendRegKeyPath(
- temp_name,
- GOOPDATE_REG_RELATIVE_CLIENT_STATE,
- app_guid);
- hr = ProcessKey(lowintegrity_hkcu_name);
- if (FAILED(hr)) {
- CORE_LOG(LEVEL_WARNING, (_T("[Could not ProcessKey][0x%08x][%s]"),
- hr, app_guid));
- }
- }
-
- return S_OK;
-}
-
-HRESULT ApplicationUsageData::ProcessKey(const CString& key_name) {
- return is_pre_update_check_ ? ProcessPreUpdateCheck(key_name) :
- ProcessPostUpdateCheck(key_name);
-}
-
-HRESULT ApplicationUsageData::ProcessPreUpdateCheck(const CString& key_name) {
- // Read in the regkey value if it exists, and or it with the previous value.
- RegKey key;
- HRESULT hr = key.Open(key_name, KEY_READ);
- if (FAILED(hr)) {
- CORE_LOG(L4, (_T("[failed to open key][%s][0x%08x]"), key_name, hr));
- return hr;
- }
-
- // Now that we have the key, we should try and read the value of the
- // did run key.
- CString did_run_str(_T("0"));
- hr = RegistryReadStringOrDword(key, kRegValueDidRun, &did_run_str);
- if (FAILED(hr)) {
- CORE_LOG(L3, (_T("[RegKey::GetValue failed][0x%08x][%s][%s]"),
- hr, key_name, kRegValueDidRun));
- return hr;
- }
-
- if (did_run_str == _T("1")) {
- did_run_ = true;
- }
- exists_ = true;
-
- return hr;
-}
-
-HRESULT ApplicationUsageData::ProcessBackWardCompatKey(
- const CString& key_name) {
- // This method exists to support the installers that have not been
- // updated to write to the HKCU key. Remove when we have all the installers
- // correcly updated.
- if (is_pre_update_check_) {
- // Read in the regkey value if it exists, and or it with the previous value.
- RegKey key;
- HRESULT hr = key.Open(key_name, KEY_READ);
- if (FAILED(hr)) {
- CORE_LOG(L4, (_T("[failed to open key][%s][0x%08x]"), key_name, hr));
- return hr;
- }
-
- // Now that we have the key, we should try and read the value of the
- // did run key.
- CString did_run_str;
- hr = RegistryReadStringOrDword(key, kRegValueDidRun, &did_run_str);
- if (FAILED(hr)) {
- CORE_LOG(L3, (_T("[RegKey::GetValue failed][0x%08x][%s][%s]"),
- hr, key_name, kRegValueDidRun));
- return hr;
- }
-
- if (did_run_str == _T("1")) {
- did_run_ = true;
- }
- exists_ = true;
-
- return hr;
- } else {
- RegKey key;
- HRESULT hr = key.Open(key_name);
- if (FAILED(hr)) {
- CORE_LOG(L4, (_T("[failed to open key][%s][0x%08x]"), key_name, hr));
- return hr;
- }
-
- // If the value exists, then it means that the installer has been updated,
- // and we delete the machine value.
- if (exists_) {
- hr = RegKey::DeleteValue(key_name, kRegValueDidRun);
- if (FAILED(hr)) {
- CORE_LOG(LEVEL_WARNING, (_T("[RegKey::DeleteValue failed][0x%08x][%s]"),
- hr, key_name));
- return hr;
- }
- } else {
- // Since the value does not exist else where, we reset the value in the
- // HKLM key to zero.
- exists_ = true;
- CString did_run_str;
- hr = RegistryReadStringOrDword(key, kRegValueDidRun, &did_run_str);
- if (SUCCEEDED(hr)) {
- hr = key.SetValue(kRegValueDidRun, _T("0"));
- if (FAILED(hr)) {
- CORE_LOG(LEVEL_WARNING, (_T("[RegKey::SetValue failed][0x%08x][%s]"),
- hr, key_name));
- return hr;
- }
- }
- }
- }
-
- return S_OK;
-}
-
-HRESULT ApplicationUsageData::ProcessPostUpdateCheck(const CString& key_name) {
- RegKey key;
- HRESULT hr = key.Open(key_name);
- if (FAILED(hr)) {
- CORE_LOG(L4, (_T("[failed to open key][%s][0x%08x]"), key_name, hr));
- return hr;
- }
-
- CString did_run_str;
- hr = RegistryReadStringOrDword(key, kRegValueDidRun, &did_run_str);
- if (SUCCEEDED(hr)) {
- exists_ = true;
- hr = key.SetValue(kRegValueDidRun, _T("0"));
- if (FAILED(hr)) {
- CORE_LOG(LEVEL_WARNING, (_T("[RegKey::SetValue failed][0x%08x][%s]"),
- hr, key_name));
- return hr;
- }
- }
- return S_OK;
-}
-
-} // namespace omaha
« no previous file with comments | « goopdate/application_usage_data.h ('k') | goopdate/application_usage_data_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698