66 lines
1.9 KiB
C++
66 lines
1.9 KiB
C++
|
// 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
|