1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/test/test_reg_util_win.h" 6 7#include "base/logging.h" 8#include "testing/gtest/include/gtest/gtest.h" 9 10namespace registry_util { 11 12const wchar_t RegistryOverrideManager::kTempTestKeyPath[] = 13 L"Software\\Chromium\\TempTestKeys"; 14 15RegistryOverrideManager::ScopedRegistryKeyOverride::ScopedRegistryKeyOverride( 16 HKEY override, 17 const std::wstring& temp_name) 18 : override_(override), 19 temp_name_(temp_name) { 20 DCHECK(!temp_name_.empty()); 21 std::wstring key_path(RegistryOverrideManager::kTempTestKeyPath); 22 key_path += L"\\" + temp_name_; 23 EXPECT_EQ(ERROR_SUCCESS, 24 temp_key_.Create(HKEY_CURRENT_USER, key_path.c_str(), KEY_ALL_ACCESS)); 25 EXPECT_EQ(ERROR_SUCCESS, 26 ::RegOverridePredefKey(override_, temp_key_.Handle())); 27} 28 29RegistryOverrideManager:: 30 ScopedRegistryKeyOverride::~ScopedRegistryKeyOverride() { 31 ::RegOverridePredefKey(override_, NULL); 32 // The temp key will be deleted via a call to DeleteAllTempKeys(). 33} 34 35RegistryOverrideManager::RegistryOverrideManager() { 36 DeleteAllTempKeys(); 37} 38 39RegistryOverrideManager::~RegistryOverrideManager() { 40 RemoveAllOverrides(); 41} 42 43void RegistryOverrideManager::OverrideRegistry(HKEY override, 44 const std::wstring& temp_name) { 45 overrides_.push_back(new ScopedRegistryKeyOverride(override, temp_name)); 46} 47 48void RegistryOverrideManager::RemoveAllOverrides() { 49 while (!overrides_.empty()) { 50 delete overrides_.back(); 51 overrides_.pop_back(); 52 } 53 54 DeleteAllTempKeys(); 55} 56 57// static 58void RegistryOverrideManager::DeleteAllTempKeys() { 59 base::win::RegKey key; 60 if (key.Open(HKEY_CURRENT_USER, L"", KEY_ALL_ACCESS) == ERROR_SUCCESS) { 61 key.DeleteKey(kTempTestKeyPath); 62 } 63} 64 65} // namespace registry_util 66