| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/at_exit.h" | 6 #include "base/at_exit.h" |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/scoped_ptr.h" | 8 #include "base/scoped_ptr.h" |
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| 11 #include "base/win/registry.h" | 11 #include "base/win/registry.h" |
| 12 #include "chrome/common/policy_constants.h" | 12 #include "chrome/common/policy_constants.h" |
| 13 #include "chrome_frame/policy_settings.h" | 13 #include "chrome_frame/policy_settings.h" |
| 14 #include "chrome_frame/test/chrome_frame_test_utils.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 16 |
| 16 using base::win::RegKey; | 17 using base::win::RegKey; |
| 18 using chrome_frame_test::ScopedVirtualizeHklmAndHkcu; |
| 19 using chrome_frame_test::TempRegKeyOverride; |
| 17 | 20 |
| 18 namespace { | 21 namespace { |
| 19 | 22 |
| 20 // A best effort way to zap CF policy entries that may be in the registry. | 23 // A best effort way to zap CF policy entries that may be in the registry. |
| 21 void DeleteChromeFramePolicyEntries(HKEY root) { | 24 void DeleteChromeFramePolicyEntries(HKEY root) { |
| 22 RegKey key; | 25 RegKey key; |
| 23 if (key.Open(root, policy::kRegistrySubKey, KEY_ALL_ACCESS)) { | 26 if (key.Open(root, policy::kRegistrySubKey, KEY_ALL_ACCESS)) { |
| 24 key.DeleteValue( | 27 key.DeleteValue( |
| 25 ASCIIToWide(policy::key::kChromeFrameRendererSettings).c_str()); | 28 ASCIIToWide(policy::key::kChromeFrameRendererSettings).c_str()); |
| 26 key.DeleteKey(ASCIIToWide(policy::key::kRenderInChromeFrameList).c_str()); | 29 key.DeleteKey(ASCIIToWide(policy::key::kRenderInChromeFrameList).c_str()); |
| 27 key.DeleteKey(ASCIIToWide(policy::key::kRenderInHostList).c_str()); | 30 key.DeleteKey(ASCIIToWide(policy::key::kRenderInHostList).c_str()); |
| 28 key.DeleteKey(ASCIIToWide(policy::key::kChromeFrameContentTypes).c_str()); | 31 key.DeleteKey(ASCIIToWide(policy::key::kChromeFrameContentTypes).c_str()); |
| 29 key.DeleteKey(ASCIIToWide(policy::key::kApplicationLocaleValue).c_str()); | 32 key.DeleteKey(ASCIIToWide(policy::key::kApplicationLocaleValue).c_str()); |
| 30 } | 33 } |
| 31 } | 34 } |
| 32 | 35 |
| 33 class TempRegKeyOverride { | |
| 34 public: | |
| 35 static const wchar_t kTempTestKeyPath[]; | |
| 36 | |
| 37 TempRegKeyOverride(HKEY override, const wchar_t* temp_name) | |
| 38 : override_(override), temp_name_(temp_name) { | |
| 39 DCHECK(temp_name && lstrlenW(temp_name)); | |
| 40 std::wstring key_path(kTempTestKeyPath); | |
| 41 key_path += L"\\" + temp_name_; | |
| 42 EXPECT_TRUE(temp_key_.Create(HKEY_CURRENT_USER, key_path.c_str(), | |
| 43 KEY_ALL_ACCESS)); | |
| 44 EXPECT_EQ(ERROR_SUCCESS, | |
| 45 ::RegOverridePredefKey(override_, temp_key_.Handle())); | |
| 46 } | |
| 47 | |
| 48 ~TempRegKeyOverride() { | |
| 49 ::RegOverridePredefKey(override_, NULL); | |
| 50 // The temp key will be deleted via a call to DeleteAllTempKeys(). | |
| 51 } | |
| 52 | |
| 53 static void DeleteAllTempKeys() { | |
| 54 RegKey key; | |
| 55 if (key.Open(HKEY_CURRENT_USER, L"", KEY_ALL_ACCESS)) { | |
| 56 key.DeleteKey(kTempTestKeyPath); | |
| 57 } | |
| 58 } | |
| 59 | |
| 60 protected: | |
| 61 HKEY override_; | |
| 62 RegKey temp_key_; | |
| 63 std::wstring temp_name_; | |
| 64 }; | |
| 65 | |
| 66 const wchar_t TempRegKeyOverride::kTempTestKeyPath[] = | |
| 67 L"Software\\Chromium\\TempTestKeys"; | |
| 68 | |
| 69 bool InitializePolicyKey(HKEY policy_root, RegKey* policy_key) { | 36 bool InitializePolicyKey(HKEY policy_root, RegKey* policy_key) { |
| 70 EXPECT_TRUE(policy_key->Create(policy_root, policy::kRegistrySubKey, | 37 EXPECT_TRUE(policy_key->Create(policy_root, policy::kRegistrySubKey, |
| 71 KEY_ALL_ACCESS)); | 38 KEY_ALL_ACCESS)); |
| 72 return policy_key->Valid(); | 39 return policy_key->Valid(); |
| 73 } | 40 } |
| 74 | 41 |
| 75 void WritePolicyList(RegKey* policy_key, const wchar_t* list_name, | 42 void WritePolicyList(RegKey* policy_key, const wchar_t* list_name, |
| 76 const wchar_t* values[], int count) { | 43 const wchar_t* values[], int count) { |
| 77 DCHECK(policy_key); | 44 DCHECK(policy_key); |
| 78 // Remove any previous settings | 45 // Remove any previous settings |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 ASCIIToWide(policy::key::kApplicationLocaleValue)); | 96 ASCIIToWide(policy::key::kApplicationLocaleValue)); |
| 130 EXPECT_TRUE(policy_key.WriteValue(application_locale_value.c_str(), locale)); | 97 EXPECT_TRUE(policy_key.WriteValue(application_locale_value.c_str(), locale)); |
| 131 return true; | 98 return true; |
| 132 } | 99 } |
| 133 | 100 |
| 134 } // end namespace | 101 } // end namespace |
| 135 | 102 |
| 136 class PolicySettingsTest : public testing::Test { | 103 class PolicySettingsTest : public testing::Test { |
| 137 protected: | 104 protected: |
| 138 void SetUp() { | 105 void SetUp() { |
| 139 TempRegKeyOverride::DeleteAllTempKeys(); | |
| 140 | |
| 141 hklm_pol_.reset(new TempRegKeyOverride(HKEY_LOCAL_MACHINE, L"hklm_pol")); | |
| 142 hkcu_pol_.reset(new TempRegKeyOverride(HKEY_CURRENT_USER, L"hkcu_pol")); | |
| 143 | |
| 144 ResetPolicySettings(); | 106 ResetPolicySettings(); |
| 145 } | 107 } |
| 146 | 108 |
| 147 void TearDown() { | 109 void TearDown() { |
| 148 hkcu_pol_.reset(NULL); | |
| 149 hklm_pol_.reset(NULL); | |
| 150 TempRegKeyOverride::DeleteAllTempKeys(); | |
| 151 } | 110 } |
| 152 | 111 |
| 153 void ResetPolicySettings() { | 112 void ResetPolicySettings() { |
| 154 at_exit_manager_.ProcessCallbacksNow(); | 113 //at_exit_manager_.ProcessCallbacksNow(); |
| 114 DeleteAllSingletons(); |
| 155 } | 115 } |
| 156 | 116 |
| 157 // This is used to manage life cycle of PolicySettings singleton. | 117 // This is used to manage life cycle of PolicySettings singleton. |
| 158 base::ShadowingAtExitManager at_exit_manager_; | 118 // base::ShadowingAtExitManager at_exit_manager_; |
| 159 scoped_ptr<TempRegKeyOverride> hklm_pol_; | 119 |
| 160 scoped_ptr<TempRegKeyOverride> hkcu_pol_; | 120 ScopedVirtualizeHklmAndHkcu registry_virtualization_; |
| 161 }; | 121 }; |
| 162 | 122 |
| 163 TEST_F(PolicySettingsTest, RendererForUrl) { | 123 TEST_F(PolicySettingsTest, RendererForUrl) { |
| 164 const wchar_t* kTestUrls[] = { | 124 const wchar_t* kTestUrls[] = { |
| 165 L"http://www.example.com", | 125 L"http://www.example.com", |
| 166 L"http://www.pattern.com", | 126 L"http://www.pattern.com", |
| 167 L"http://www.test.com" | 127 L"http://www.test.com" |
| 168 }; | 128 }; |
| 169 const wchar_t* kTestFilters[] = { | 129 const wchar_t* kTestFilters[] = { |
| 170 L"*.example.com", | 130 L"*.example.com", |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 HKEY root[] = { HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER }; | 205 HKEY root[] = { HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER }; |
| 246 for (int i = 0; i < arraysize(root); ++i) { | 206 for (int i = 0; i < arraysize(root); ++i) { |
| 247 SetChromeApplicationLocale(root[i], kTestApplicationLocale); | 207 SetChromeApplicationLocale(root[i], kTestApplicationLocale); |
| 248 ResetPolicySettings(); | 208 ResetPolicySettings(); |
| 249 EXPECT_EQ(std::wstring(kTestApplicationLocale), | 209 EXPECT_EQ(std::wstring(kTestApplicationLocale), |
| 250 PolicySettings::GetInstance()->ApplicationLocale()); | 210 PolicySettings::GetInstance()->ApplicationLocale()); |
| 251 | 211 |
| 252 DeleteChromeFramePolicyEntries(root[i]); | 212 DeleteChromeFramePolicyEntries(root[i]); |
| 253 } | 213 } |
| 254 } | 214 } |
| OLD | NEW |