Index: chrome/browser/importer/ie_importer_test_registry_overrider_win.cc |
diff --git a/chrome/browser/importer/ie_importer_test_registry_overrider_win.cc b/chrome/browser/importer/ie_importer_test_registry_overrider_win.cc |
index 09933fa7cb663442e48c517a682ab5c9d7c91ae6..dff796b84f9351c07c4d2bca04c4b2017914c0f8 100644 |
--- a/chrome/browser/importer/ie_importer_test_registry_overrider_win.cc |
+++ b/chrome/browser/importer/ie_importer_test_registry_overrider_win.cc |
@@ -19,15 +19,20 @@ namespace { |
// The key to which a random subkey will be appended. This key itself will never |
// be deleted. |
-const wchar_t kTestHKCUOverrideKey[] = L"SOFTWARE\\Chromium Unit Tests"; |
+const wchar_t kTestHKCUOverrideKeyPrefix[] = L"SOFTWARE\\Chromium Unit Tests\\"; |
const char kTestHKCUOverrideEnvironmentVariable[] = |
"IE_IMPORTER_TEST_OVERRIDE_HKCU"; |
-base::string16 GetTestKeyFromSubKey(const base::string16& subkey) { |
- base::string16 key(kTestHKCUOverrideKey); |
- key.push_back(L'\\'); |
- key.append(subkey); |
- return key; |
+// 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) { |
+ scoped_ptr<base::Environment> env(base::Environment::Create()); |
+ std::string value; |
+ bool result = env->GetVar(kTestHKCUOverrideEnvironmentVariable, &value); |
+ if (result) |
+ *key = UTF8ToUTF16(value); |
+ return result; |
} |
} // namespace |
@@ -36,102 +41,42 @@ base::string16 GetTestKeyFromSubKey(const base::string16& subkey) { |
// IEImporterTestRegistryOverrider, public: |
IEImporterTestRegistryOverrider::IEImporterTestRegistryOverrider() |
- : override_performed_(false), override_initiated_(false) { |
+ : override_initiated_(false) { |
} |
IEImporterTestRegistryOverrider::~IEImporterTestRegistryOverrider() { |
- base::AutoLock auto_lock(lock_.Get()); |
- if (override_performed_) { |
- override_active_in_process_ = false; |
- |
- DWORD result = RegOverridePredefKey(HKEY_CURRENT_USER, NULL); |
- DLOG_IF(ERROR, result != ERROR_SUCCESS) |
- << "Failed to unset current override"; |
- |
- if (override_initiated_) { |
- base::string16 subkey; |
- if (!GetSubKeyFromEnvironment(&subkey)) { |
- NOTREACHED(); |
- } else { |
- base::string16 key(GetTestKeyFromSubKey(subkey)); |
- base::win::RegKey reg_key(HKEY_CURRENT_USER, key.c_str(), |
- KEY_ALL_ACCESS); |
- DCHECK(reg_key.Valid()); |
- reg_key.DeleteKey(L""); |
- } |
- |
- scoped_ptr<base::Environment> env(base::Environment::Create()); |
- env->UnSetVar(kTestHKCUOverrideEnvironmentVariable); |
+ if (override_initiated_) { |
+ base::string16 key; |
+ if (!GetTestKeyFromEnvironment(&key)) { |
robertshield
2013/05/22 19:31:35
The environment is process-global, but override_in
gab
2013/05/22 20:07:40
Changed as discussed.
|
+ NOTREACHED(); |
+ } else { |
+ base::win::RegKey reg_key(HKEY_CURRENT_USER, key.c_str(), KEY_ALL_ACCESS); |
+ DCHECK(reg_key.Valid()); |
+ reg_key.DeleteKey(L""); |
} |
+ |
+ scoped_ptr<base::Environment> env(base::Environment::Create()); |
+ env->UnSetVar(kTestHKCUOverrideEnvironmentVariable); |
} |
} |
-bool IEImporterTestRegistryOverrider::SetRegistryOverride() { |
- base::AutoLock auto_lock(lock_.Get()); |
- DCHECK(!GetSubKeyFromEnvironment(NULL)); |
+bool IEImporterTestRegistryOverrider::SetTestRegistryOverride() { |
+ DCHECK(!GetTestKeyFromEnvironment(NULL)); |
+ |
override_initiated_ = true; |
+ |
scoped_ptr<base::Environment> env(base::Environment::Create()); |
- const base::string16 random_subkey(UTF8ToUTF16(base::GenerateGUID())); |
- return StartRegistryOverride(random_subkey) && |
- env->SetVar(kTestHKCUOverrideEnvironmentVariable, |
- UTF16ToUTF8(random_subkey)); |
-} |
-bool IEImporterTestRegistryOverrider::StartRegistryOverrideIfNeeded() { |
- base::AutoLock auto_lock(lock_.Get()); |
- base::string16 subkey; |
- if (!GetSubKeyFromEnvironment(&subkey)) |
- return true; |
- return StartRegistryOverride(subkey); |
-} |
+ base::string16 random_key(kTestHKCUOverrideKeyPrefix); |
+ random_key.append(UTF8ToUTF16(base::GenerateGUID())); |
-//////////////////////////////////////////////////////////////////////////////// |
-// IEImporterTestRegistryOverrider, private: |
- |
-bool IEImporterTestRegistryOverrider::StartRegistryOverride( |
- const base::string16& subkey) { |
- lock_.Get().AssertAcquired(); |
- // Override the registry whether |override_active_in_process_| or not as some |
- // Windows API calls seem to reset the override (IUrlHistoryStg2::AddUrl is |
- // suspected on Win7-). However, make sure to first undo any existing override |
- // as this method will otherwise generate a fake key within the current fake |
- // key. |
- DWORD result = RegOverridePredefKey(HKEY_CURRENT_USER, NULL); |
- DLOG_IF(ERROR, result != ERROR_SUCCESS) << "Failed to unset current override"; |
- |
- const base::string16 key(GetTestKeyFromSubKey(subkey)); |
- base::win::RegKey temp_hkcu_hive_key; |
- result = temp_hkcu_hive_key.Create(HKEY_CURRENT_USER, key.c_str(), |
- KEY_ALL_ACCESS); |
- if (result != ERROR_SUCCESS || !temp_hkcu_hive_key.Valid()) { |
- DPLOG(ERROR) << result; |
- return false; |
- } |
- |
- if (!override_active_in_process_) { |
- // Only take ownership of the override if it wasn't already set in this |
- // process. |
- override_performed_ = true; |
- override_active_in_process_ = true; |
- } |
- return RegOverridePredefKey(HKEY_CURRENT_USER, |
- temp_hkcu_hive_key.Handle()) == ERROR_SUCCESS; |
+ return env->SetVar(kTestHKCUOverrideEnvironmentVariable, |
+ UTF16ToUTF8(random_key)); |
} |
-bool IEImporterTestRegistryOverrider::GetSubKeyFromEnvironment( |
- base::string16* subkey) { |
- lock_.Get().AssertAcquired(); |
- scoped_ptr<base::Environment> env(base::Environment::Create()); |
- std::string value; |
- bool result = env->GetVar(kTestHKCUOverrideEnvironmentVariable, &value); |
- if (result && subkey) |
- *subkey = UTF8ToUTF16(value); |
- return result; |
+base::string16 IEImporterTestRegistryOverrider::GetTestRegistryOverride() { |
robertshield
2013/05/22 19:31:35
// static
gab
2013/05/22 20:07:40
Done.
|
+ base::string16 key; |
+ if (!GetTestKeyFromEnvironment(&key)) |
+ return string16(); |
+ return key; |
} |
- |
-// static |
-bool IEImporterTestRegistryOverrider::override_active_in_process_ = false; |
- |
-// static |
-base::LazyInstance<base::Lock>::Leaky IEImporterTestRegistryOverrider::lock_ = |
- LAZY_INSTANCE_INITIALIZER; |