1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
// Copyright 2013 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/common/importer/importer_test_registry_overrider_win.h"
#include <windows.h>
#include <memory>
#include <optional>
#include <string>
#include "base/environment.h"
#include "base/strings/utf_string_conversions.h"
#include "base/uuid.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(std::wstring* key) {
std::unique_ptr<base::Environment> env(base::Environment::Create());
std::optional<std::string> value =
env->GetVar(kTestHKCUOverrideEnvironmentVariable);
if (value.has_value()) {
*key = base::UTF8ToWide(value.value());
return true;
}
return false;
}
} // namespace
////////////////////////////////////////////////////////////////////////////////
// ImporterTestRegistryOverrider, public:
ImporterTestRegistryOverrider::ImporterTestRegistryOverrider()
: temporary_key_(kTestHKCUOverrideKeyPrefix +
base::UTF8ToWide(
base::Uuid::GenerateRandomV4().AsLowercaseString())) {
DCHECK(!GetTestKeyFromEnvironment(NULL));
std::unique_ptr<base::Environment> env(base::Environment::Create());
bool success = env->SetVar(kTestHKCUOverrideEnvironmentVariable,
base::WideToUTF8(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
std::wstring ImporterTestRegistryOverrider::GetTestRegistryOverride() {
std::wstring key;
GetTestKeyFromEnvironment(&key);
return key;
}
|