diff options
Diffstat (limited to 'chromium/chrome/common/importer/importer_test_registry_overrider_win.cc')
-rw-r--r-- | chromium/chrome/common/importer/importer_test_registry_overrider_win.cc | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/chromium/chrome/common/importer/importer_test_registry_overrider_win.cc b/chromium/chrome/common/importer/importer_test_registry_overrider_win.cc new file mode 100644 index 00000000000..0f881968259 --- /dev/null +++ b/chromium/chrome/common/importer/importer_test_registry_overrider_win.cc @@ -0,0 +1,70 @@ +// Copyright (c) 2013 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 "chrome/common/importer/importer_test_registry_overrider_win.h" + +#include <windows.h> + +#include <memory> +#include <string> + +#include "base/environment.h" +#include "base/guid.h" +#include "base/strings/utf_string_conversions.h" +#include "base/win/registry.h" + +namespace { + +// The key to which a random subkey will be appended. This key itself will never +// be deleted. +const wchar_t kTestHKCUOverrideKeyPrefix[] = L"SOFTWARE\\Chromium Unit Tests\\"; +const char kTestHKCUOverrideEnvironmentVariable[] = + "IE_IMPORTER_TEST_OVERRIDE_HKCU"; + +// Reads the environment variable set by a previous call to +// SetTestRegistryOverride() into |key| if it exists and |key| is not NULL. +// Returns true if the variable was successfully read. +bool GetTestKeyFromEnvironment(base::string16* key) { + std::unique_ptr<base::Environment> env(base::Environment::Create()); + std::string value; + bool result = env->GetVar(kTestHKCUOverrideEnvironmentVariable, &value); + if (result) + *key = base::UTF8ToUTF16(value); + return result; +} + +} // namespace + +//////////////////////////////////////////////////////////////////////////////// +// ImporterTestRegistryOverrider, public: + +ImporterTestRegistryOverrider::ImporterTestRegistryOverrider() + : temporary_key_(kTestHKCUOverrideKeyPrefix + + base::UTF8ToUTF16(base::GenerateGUID())) { + DCHECK(!GetTestKeyFromEnvironment(NULL)); + + std::unique_ptr<base::Environment> env(base::Environment::Create()); + bool success = env->SetVar(kTestHKCUOverrideEnvironmentVariable, + base::UTF16ToUTF8(temporary_key_)); + DCHECK(success); +} + +ImporterTestRegistryOverrider::~ImporterTestRegistryOverrider() { + base::win::RegKey reg_key(HKEY_CURRENT_USER, temporary_key_.c_str(), + KEY_ALL_ACCESS); + DCHECK(reg_key.Valid()); + reg_key.DeleteKey(L""); + + std::unique_ptr<base::Environment> env(base::Environment::Create()); + bool success = env->UnSetVar(kTestHKCUOverrideEnvironmentVariable); + DCHECK(success); +} + +// static +base::string16 ImporterTestRegistryOverrider::GetTestRegistryOverride() { + base::string16 key; + if (!GetTestKeyFromEnvironment(&key)) + return base::string16(); + return key; +} |