blob: e23c6e9b27a54797525f73194cf7afc49e00bf99 [file] [log] [blame]
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/test/test_reg_util_win.h"
#include "base/logging.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace registry_util {
const wchar_t RegistryOverrideManager::kTempTestKeyPath[] =
L"Software\\Chromium\\TempTestKeys";
RegistryOverrideManager::ScopedRegistryKeyOverride::ScopedRegistryKeyOverride(
HKEY override,
const std::wstring& temp_name)
: override_(override),
temp_name_(temp_name) {
DCHECK(!temp_name_.empty());
std::wstring key_path(RegistryOverrideManager::kTempTestKeyPath);
key_path += L"\\" + temp_name_;
EXPECT_EQ(ERROR_SUCCESS,
temp_key_.Create(HKEY_CURRENT_USER, key_path.c_str(), KEY_ALL_ACCESS));
EXPECT_EQ(ERROR_SUCCESS,
::RegOverridePredefKey(override_, temp_key_.Handle()));
}
RegistryOverrideManager::
ScopedRegistryKeyOverride::~ScopedRegistryKeyOverride() {
::RegOverridePredefKey(override_, NULL);
// The temp key will be deleted via a call to DeleteAllTempKeys().
}
RegistryOverrideManager::RegistryOverrideManager() {
DeleteAllTempKeys();
}
RegistryOverrideManager::~RegistryOverrideManager() {
RemoveAllOverrides();
}
void RegistryOverrideManager::OverrideRegistry(HKEY override,
const std::wstring& temp_name) {
overrides_.push_back(new ScopedRegistryKeyOverride(override, temp_name));
}
void RegistryOverrideManager::RemoveAllOverrides() {
while (!overrides_.empty()) {
delete overrides_.back();
overrides_.pop_back();
}
DeleteAllTempKeys();
}
// static
void RegistryOverrideManager::DeleteAllTempKeys() {
base::win::RegKey key;
if (key.Open(HKEY_CURRENT_USER, L"", KEY_ALL_ACCESS) == ERROR_SUCCESS) {
key.DeleteKey(kTempTestKeyPath);
}
}
} // namespace registry_util