Index: chrome/app/user_data_dir_win_unittest.cc |
diff --git a/chrome/app/user_data_dir_win_unittest.cc b/chrome/app/user_data_dir_win_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6a2518c7eb006bf02961fb1a434ac750635d4c12 |
--- /dev/null |
+++ b/chrome/app/user_data_dir_win_unittest.cc |
@@ -0,0 +1,137 @@ |
+// Copyright 2016 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 <algorithm> |
+ |
+#include "base/strings/utf_string_conversions.h" |
+#include "base/test/test_reg_util_win.h" |
+#include "chrome/common/chrome_paths.h" |
+#include "chrome/install_static/install_util.h" |
+#include "chrome_elf/nt_registry/nt_registry.h" |
+#include "components/policy/policy_constants.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace { |
+ |
+inline bool EndsWith(const std::wstring& value, const std::wstring& ending) { |
+ if (ending.size() > value.size()) |
+ return false; |
+ return std::equal(ending.rbegin(), ending.rend(), value.rbegin()); |
+} |
+ |
+} // namespace |
+ |
+TEST(UserDataDir, EmptyResultsInDefault) { |
+ std::wstring result, invalid; |
+ |
+ install_static::GetUserDataDirectory(L"", &result, &invalid); |
grt (UTC plus 2)
2016/11/21 10:29:54
can these tests be in install_static_unittests?
scottmg
2016/11/21 19:34:00
Done.
|
+ EXPECT_TRUE(EndsWith(result, L"\\Google\\Chrome\\User Data")); |
+ EXPECT_EQ(std::wstring(), invalid); |
+} |
+ |
+TEST(UserDataDir, InvalidResultsInDefault) { |
+ std::wstring result, invalid; |
+ |
+ install_static::GetUserDataDirectory(L"<>|:", &result, &invalid); |
+ EXPECT_TRUE(EndsWith(result, L"\\Google\\Chrome\\User Data")); |
+ EXPECT_EQ(L"<>|:", invalid); |
+} |
+ |
+TEST(UserDataDir, RegistrySettingsInHKLMOverrides) { |
+ std::wstring result, invalid; |
+ |
+ // Override the registry to say one value in HKLM, and confirm it takes |
+ // precedence over the command line in both implementations. |
+ registry_util::RegistryOverrideManager override_manager; |
+ base::string16 temp; |
+ override_manager.OverrideRegistry(HKEY_LOCAL_MACHINE, &temp); |
+ ASSERT_TRUE(nt::SetTestingOverride(nt::HKLM, temp)); |
+ |
+ base::win::RegKey key(HKEY_LOCAL_MACHINE, policy::kRegistryChromePolicyKey, |
+ KEY_WRITE); |
+ LONG rv = key.WriteValue( |
+ base::UTF8ToUTF16(policy::key::kUserDataDir).c_str(), L"yyy"); |
+ ASSERT_EQ(rv, ERROR_SUCCESS); |
+ |
+ install_static::GetUserDataDirectory(L"xxx", &result, &invalid); |
+ |
+ EXPECT_TRUE(EndsWith(result, L"\\yyy")); |
+ EXPECT_EQ(std::wstring(), invalid); |
+} |
+ |
+TEST(UserDataDir, RegistrySettingsInHKCUOverrides) { |
+ std::wstring result, invalid; |
+ |
+ // Override the registry to say one value in HKCU, and confirm it takes |
+ // precedence over the command line in both implementations. |
+ registry_util::RegistryOverrideManager override_manager; |
+ base::string16 temp; |
+ override_manager.OverrideRegistry(HKEY_CURRENT_USER, &temp); |
+ ASSERT_TRUE(nt::SetTestingOverride(nt::HKCU, temp)); |
+ |
+ base::win::RegKey key(HKEY_CURRENT_USER, policy::kRegistryChromePolicyKey, |
+ KEY_WRITE); |
+ LONG rv = key.WriteValue( |
+ base::UTF8ToUTF16(policy::key::kUserDataDir).c_str(), L"yyy"); |
+ ASSERT_EQ(rv, ERROR_SUCCESS); |
+ |
+ install_static::GetUserDataDirectory(L"xxx", &result, &invalid); |
+ |
+ EXPECT_TRUE(EndsWith(result, L"\\yyy")); |
+ EXPECT_EQ(std::wstring(), invalid); |
+} |
+ |
+TEST(UserDataDir, RegistrySettingsInHKLMTakesPrecedenceOverHKCU) { |
+ std::wstring result, invalid; |
+ |
+ // Override the registry in both HKLM and HKCU, and confirm HKLM takes |
+ // precedence. |
+ registry_util::RegistryOverrideManager override_manager; |
+ base::string16 temp; |
+ override_manager.OverrideRegistry(HKEY_LOCAL_MACHINE, &temp); |
+ ASSERT_TRUE(nt::SetTestingOverride(nt::HKLM, temp)); |
+ LONG rv; |
+ base::win::RegKey key1(HKEY_LOCAL_MACHINE, policy::kRegistryChromePolicyKey, |
+ KEY_WRITE); |
+ rv = key1.WriteValue(base::UTF8ToUTF16(policy::key::kUserDataDir).c_str(), |
+ L"111"); |
+ ASSERT_EQ(rv, ERROR_SUCCESS); |
+ |
+ override_manager.OverrideRegistry(HKEY_CURRENT_USER, &temp); |
+ ASSERT_TRUE(nt::SetTestingOverride(nt::HKCU, temp)); |
+ base::win::RegKey key2(HKEY_CURRENT_USER, policy::kRegistryChromePolicyKey, |
+ KEY_WRITE); |
+ rv = key2.WriteValue(base::UTF8ToUTF16(policy::key::kUserDataDir).c_str(), |
+ L"222"); |
+ ASSERT_EQ(rv, ERROR_SUCCESS); |
+ |
+ install_static::GetUserDataDirectory(L"xxx", &result, &invalid); |
+ |
+ EXPECT_TRUE(EndsWith(result, L"\\111")); |
+ EXPECT_EQ(std::wstring(), invalid); |
+} |
+ |
+TEST(UserDataDir, RegistrySettingWithPathExpansion) { |
+ std::wstring result, invalid; |
+ |
+ registry_util::RegistryOverrideManager override_manager; |
+ base::string16 temp; |
+ override_manager.OverrideRegistry(HKEY_CURRENT_USER, &temp); |
+ ASSERT_TRUE(nt::SetTestingOverride(nt::HKCU, temp)); |
+ base::win::RegKey key(HKEY_CURRENT_USER, policy::kRegistryChromePolicyKey, |
+ KEY_WRITE); |
+ LONG rv = key.WriteValue( |
+ base::UTF8ToUTF16(policy::key::kUserDataDir).c_str(), L"${windows}"); |
+ ASSERT_EQ(rv, ERROR_SUCCESS); |
+ |
+ install_static::GetUserDataDirectory(L"xxx", &result, &invalid); |
+ |
+ EXPECT_EQ(strlen("X:\\WINDOWS"), result.size()); |
+ EXPECT_EQ(std::wstring::npos, result.find(L"${windows}")); |
+ std::wstring upper; |
+ std::transform(result.begin(), result.end(), std::back_inserter(upper), |
+ toupper); |
+ EXPECT_TRUE(EndsWith(upper, L"\\WINDOWS")); |
+ EXPECT_EQ(std::wstring(), invalid); |
+} |