// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/installer/util/per_install_values.h"
#include <shlobj.h>
#include "base/values.h"
#include "base/win/registry.h"
#include "base/win/windows_types.h"
#include "build/branding_buildflags.h"
#include "chrome/install_static/install_details.h"
#include "chrome/install_static/install_util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace installer {
TEST(PerInstallValuesTest, SetGetDelete) {
#if BUILDFLAG(USE_GOOGLE_UPDATE_INTEGRATION)
const HKEY root = install_static::IsSystemInstall() ? HKEY_LOCAL_MACHINE
: HKEY_CURRENT_USER;
#else
const HKEY root = HKEY_CURRENT_USER;
#endif
const std::wstring key_path =
install_static::IsSystemInstall()
? install_static::GetClientStateMediumKeyPath()
: install_static::GetClientStateKeyPath();
const bool key_already_exists =
base::win::RegKey(root, key_path.c_str(),
KEY_WOW64_32KEY | KEY_QUERY_VALUE)
.Valid();
#if BUILDFLAG(USE_GOOGLE_UPDATE_INTEGRATION)
if (install_static::IsSystemInstall() && !key_already_exists &&
!::IsUserAnAdmin()) {
GTEST_SKIP();
}
#endif
PerInstallValue test_value(L"PerInstallValueTest");
ASSERT_FALSE(test_value.Get());
test_value.Set(base::Value(227));
ASSERT_EQ(*test_value.Get(), base::Value(227));
test_value.Delete();
ASSERT_FALSE(test_value.Get());
if (!key_already_exists) {
ASSERT_EQ(
base::win::RegKey(root, key_path.c_str(), KEY_WOW64_32KEY | DELETE)
.DeleteKey(L""),
ERROR_SUCCESS);
}
}
} // namespace installer