OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/prefs/mock_pref_change_callback.h" | 9 #include "base/prefs/mock_pref_change_callback.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
11 #include "chrome/browser/extensions/api/preference/preference_api.h" | 11 #include "chrome/browser/extensions/api/preference/preference_api.h" |
| 12 #include "chrome/browser/extensions/extension_pref_store.h" |
12 #include "chrome/browser/extensions/extension_prefs.h" | 13 #include "chrome/browser/extensions/extension_prefs.h" |
13 #include "chrome/browser/extensions/extension_prefs_unittest.h" | 14 #include "chrome/browser/extensions/extension_prefs_unittest.h" |
| 15 #include "chrome/browser/prefs/pref_service_mock_factory.h" |
| 16 #include "chrome/browser/prefs/pref_service_syncable.h" |
14 #include "chrome/test/base/testing_profile.h" | 17 #include "chrome/test/base/testing_profile.h" |
15 #include "components/user_prefs/pref_registry_syncable.h" | 18 #include "components/user_prefs/pref_registry_syncable.h" |
16 #include "extensions/common/extension.h" | 19 #include "extensions/common/extension.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
18 | 21 |
19 using base::Value; | 22 using base::Value; |
20 | 23 |
21 namespace extensions { | 24 namespace extensions { |
22 | 25 |
23 namespace { | 26 namespace { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 Extension* extension, | 77 Extension* extension, |
75 const std::string& key, | 78 const std::string& key, |
76 base::Value* value); | 79 base::Value* value); |
77 void InstallExtension(Extension* extension); | 80 void InstallExtension(Extension* extension); |
78 void UninstallExtension(const std::string& extension_id); | 81 void UninstallExtension(const std::string& extension_id); |
79 | 82 |
80 protected: | 83 protected: |
81 void EnsureExtensionInstalled(Extension* extension); | 84 void EnsureExtensionInstalled(Extension* extension); |
82 void EnsureExtensionUninstalled(const std::string& extension_id); | 85 void EnsureExtensionUninstalled(const std::string& extension_id); |
83 | 86 |
| 87 // Creates a new incognito PrefService from |test_extension_prefs_|. |
| 88 scoped_ptr<PrefService> CreateIncognitoPrefService(); |
| 89 |
84 TestPreferenceAPI test_preference_api_; | 90 TestPreferenceAPI test_preference_api_; |
85 }; | 91 }; |
86 | 92 |
87 ExtensionControlledPrefsTest::ExtensionControlledPrefsTest() | 93 ExtensionControlledPrefsTest::ExtensionControlledPrefsTest() |
88 : PrefsPrepopulatedTestBase(), | 94 : PrefsPrepopulatedTestBase(new PrefServiceMockFactory), |
89 test_preference_api_(&prefs_) { | 95 test_preference_api_(&prefs_) { |
90 } | 96 } |
91 | 97 |
92 ExtensionControlledPrefsTest::~ExtensionControlledPrefsTest() { | 98 ExtensionControlledPrefsTest::~ExtensionControlledPrefsTest() { |
93 } | 99 } |
94 | 100 |
95 void ExtensionControlledPrefsTest::RegisterPreferences( | 101 void ExtensionControlledPrefsTest::RegisterPreferences( |
96 user_prefs::PrefRegistrySyncable* registry) { | 102 user_prefs::PrefRegistrySyncable* registry) { |
97 registry->RegisterStringPref( | 103 registry->RegisterStringPref( |
98 kPref1, kDefaultPref1, user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); | 104 kPref1, kDefaultPref1, user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 extension4() }; | 173 extension4() }; |
168 for (size_t i = 0; i < kNumInstalledExtensions; ++i) { | 174 for (size_t i = 0; i < kNumInstalledExtensions; ++i) { |
169 if (extensions[i]->id() == extension_id) { | 175 if (extensions[i]->id() == extension_id) { |
170 installed_[i] = false; | 176 installed_[i] = false; |
171 break; | 177 break; |
172 } | 178 } |
173 } | 179 } |
174 prefs()->OnExtensionUninstalled(extension_id, Manifest::INTERNAL, false); | 180 prefs()->OnExtensionUninstalled(extension_id, Manifest::INTERNAL, false); |
175 } | 181 } |
176 | 182 |
| 183 scoped_ptr<PrefService> |
| 184 ExtensionControlledPrefsTest::CreateIncognitoPrefService() { |
| 185 // This downcast is safe due to the PrefServiceMockFactory that was passed to |
| 186 // TestExtensionPrefs by way of PrefsPrepopulatedTestBase. |
| 187 PrefServiceSyncable* pref_service = |
| 188 static_cast<PrefServiceSyncable*>(prefs_.pref_service()); |
| 189 return scoped_ptr<PrefService>(pref_service->CreateIncognitoPrefService( |
| 190 new ExtensionPrefStore(prefs_.extension_pref_value_map(), true))).Pass(); |
| 191 } |
| 192 |
177 class ControlledPrefsInstallOneExtension | 193 class ControlledPrefsInstallOneExtension |
178 : public ExtensionControlledPrefsTest { | 194 : public ExtensionControlledPrefsTest { |
179 virtual void Initialize() OVERRIDE { | 195 virtual void Initialize() OVERRIDE { |
180 InstallExtensionControlledPref(extension1(), | 196 InstallExtensionControlledPref(extension1(), |
181 kPref1, | 197 kPref1, |
182 new base::StringValue("val1")); | 198 new base::StringValue("val1")); |
183 } | 199 } |
184 virtual void Verify() OVERRIDE { | 200 virtual void Verify() OVERRIDE { |
185 std::string actual = prefs()->pref_service()->GetString(kPref1); | 201 std::string actual = prefs()->pref_service()->GetString(kPref1); |
186 EXPECT_EQ("val1", actual); | 202 EXPECT_EQ("val1", actual); |
187 } | 203 } |
188 }; | 204 }; |
189 TEST_F(ControlledPrefsInstallOneExtension, | 205 TEST_F(ControlledPrefsInstallOneExtension, |
190 ControlledPrefsInstallOneExtension) { } | 206 ControlledPrefsInstallOneExtension) { } |
191 | 207 |
192 // Check that we do not forget persistent incognito values after a reload. | 208 // Check that we do not forget persistent incognito values after a reload. |
193 class ControlledPrefsInstallIncognitoPersistent | 209 class ControlledPrefsInstallIncognitoPersistent |
194 : public ExtensionControlledPrefsTest { | 210 : public ExtensionControlledPrefsTest { |
195 public: | 211 public: |
196 virtual void Initialize() OVERRIDE { | 212 virtual void Initialize() OVERRIDE { |
197 InstallExtensionControlledPref( | 213 InstallExtensionControlledPref( |
198 extension1(), kPref1, new base::StringValue("val1")); | 214 extension1(), kPref1, new base::StringValue("val1")); |
199 InstallExtensionControlledPrefIncognito( | 215 InstallExtensionControlledPrefIncognito( |
200 extension1(), kPref1, new base::StringValue("val2")); | 216 extension1(), kPref1, new base::StringValue("val2")); |
201 scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); | 217 scoped_ptr<PrefService> incog_prefs(CreateIncognitoPrefService()); |
202 std::string actual = incog_prefs->GetString(kPref1); | 218 std::string actual = incog_prefs->GetString(kPref1); |
203 EXPECT_EQ("val2", actual); | 219 EXPECT_EQ("val2", actual); |
204 } | 220 } |
205 | 221 |
206 virtual void Verify() OVERRIDE { | 222 virtual void Verify() OVERRIDE { |
207 // Main pref service shall see only non-incognito settings. | 223 // Main pref service shall see only non-incognito settings. |
208 std::string actual = prefs()->pref_service()->GetString(kPref1); | 224 std::string actual = prefs()->pref_service()->GetString(kPref1); |
209 EXPECT_EQ("val1", actual); | 225 EXPECT_EQ("val1", actual); |
210 // Incognito pref service shall see incognito values. | 226 // Incognito pref service shall see incognito values. |
211 scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); | 227 scoped_ptr<PrefService> incog_prefs(CreateIncognitoPrefService()); |
212 actual = incog_prefs->GetString(kPref1); | 228 actual = incog_prefs->GetString(kPref1); |
213 EXPECT_EQ("val2", actual); | 229 EXPECT_EQ("val2", actual); |
214 } | 230 } |
215 }; | 231 }; |
216 TEST_F(ControlledPrefsInstallIncognitoPersistent, | 232 TEST_F(ControlledPrefsInstallIncognitoPersistent, |
217 ControlledPrefsInstallIncognitoPersistent) { } | 233 ControlledPrefsInstallIncognitoPersistent) { } |
218 | 234 |
219 // Check that we forget 'session only' incognito values after a reload. | 235 // Check that we forget 'session only' incognito values after a reload. |
220 class ControlledPrefsInstallIncognitoSessionOnly | 236 class ControlledPrefsInstallIncognitoSessionOnly |
221 : public ExtensionControlledPrefsTest { | 237 : public ExtensionControlledPrefsTest { |
222 public: | 238 public: |
223 ControlledPrefsInstallIncognitoSessionOnly() : iteration_(0) {} | 239 ControlledPrefsInstallIncognitoSessionOnly() : iteration_(0) {} |
224 | 240 |
225 virtual void Initialize() OVERRIDE { | 241 virtual void Initialize() OVERRIDE { |
226 InstallExtensionControlledPref( | 242 InstallExtensionControlledPref( |
227 extension1(), kPref1, new base::StringValue("val1")); | 243 extension1(), kPref1, new base::StringValue("val1")); |
228 InstallExtensionControlledPrefIncognitoSessionOnly( | 244 InstallExtensionControlledPrefIncognitoSessionOnly( |
229 extension1(), kPref1, new base::StringValue("val2")); | 245 extension1(), kPref1, new base::StringValue("val2")); |
230 scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); | 246 scoped_ptr<PrefService> incog_prefs(CreateIncognitoPrefService()); |
231 std::string actual = incog_prefs->GetString(kPref1); | 247 std::string actual = incog_prefs->GetString(kPref1); |
232 EXPECT_EQ("val2", actual); | 248 EXPECT_EQ("val2", actual); |
233 } | 249 } |
234 virtual void Verify() OVERRIDE { | 250 virtual void Verify() OVERRIDE { |
235 // Main pref service shall see only non-incognito settings. | 251 // Main pref service shall see only non-incognito settings. |
236 std::string actual = prefs()->pref_service()->GetString(kPref1); | 252 std::string actual = prefs()->pref_service()->GetString(kPref1); |
237 EXPECT_EQ("val1", actual); | 253 EXPECT_EQ("val1", actual); |
238 // Incognito pref service shall see session-only incognito values only | 254 // Incognito pref service shall see session-only incognito values only |
239 // during first run. Once the pref service was reloaded, all values shall be | 255 // during first run. Once the pref service was reloaded, all values shall be |
240 // discarded. | 256 // discarded. |
241 scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); | 257 scoped_ptr<PrefService> incog_prefs(CreateIncognitoPrefService()); |
242 actual = incog_prefs->GetString(kPref1); | 258 actual = incog_prefs->GetString(kPref1); |
243 if (iteration_ == 0) { | 259 if (iteration_ == 0) { |
244 EXPECT_EQ("val2", actual); | 260 EXPECT_EQ("val2", actual); |
245 } else { | 261 } else { |
246 EXPECT_EQ("val1", actual); | 262 EXPECT_EQ("val1", actual); |
247 } | 263 } |
248 ++iteration_; | 264 ++iteration_; |
249 } | 265 } |
250 int iteration_; | 266 int iteration_; |
251 }; | 267 }; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 using testing::_; | 305 using testing::_; |
290 using testing::Mock; | 306 using testing::Mock; |
291 using testing::StrEq; | 307 using testing::StrEq; |
292 | 308 |
293 MockPrefChangeCallback observer(prefs()->pref_service()); | 309 MockPrefChangeCallback observer(prefs()->pref_service()); |
294 PrefChangeRegistrar registrar; | 310 PrefChangeRegistrar registrar; |
295 registrar.Init(prefs()->pref_service()); | 311 registrar.Init(prefs()->pref_service()); |
296 registrar.Add(kPref1, observer.GetCallback()); | 312 registrar.Add(kPref1, observer.GetCallback()); |
297 | 313 |
298 MockPrefChangeCallback incognito_observer(prefs()->pref_service()); | 314 MockPrefChangeCallback incognito_observer(prefs()->pref_service()); |
299 scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); | 315 scoped_ptr<PrefService> incog_prefs(CreateIncognitoPrefService()); |
300 PrefChangeRegistrar incognito_registrar; | 316 PrefChangeRegistrar incognito_registrar; |
301 incognito_registrar.Init(incog_prefs.get()); | 317 incognito_registrar.Init(incog_prefs.get()); |
302 incognito_registrar.Add(kPref1, incognito_observer.GetCallback()); | 318 incognito_registrar.Add(kPref1, incognito_observer.GetCallback()); |
303 | 319 |
304 // Write value and check notification. | 320 // Write value and check notification. |
305 EXPECT_CALL(observer, OnPreferenceChanged(_)); | 321 EXPECT_CALL(observer, OnPreferenceChanged(_)); |
306 EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)); | 322 EXPECT_CALL(incognito_observer, OnPreferenceChanged(_)); |
307 InstallExtensionControlledPref(extension1(), kPref1, | 323 InstallExtensionControlledPref(extension1(), kPref1, |
308 new base::StringValue("https://www.chromium.org")); | 324 new base::StringValue("https://www.chromium.org")); |
309 Mock::VerifyAndClearExpectations(&observer); | 325 Mock::VerifyAndClearExpectations(&observer); |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 EXPECT_EQ(kDefaultPref1, actual); | 474 EXPECT_EQ(kDefaultPref1, actual); |
459 } | 475 } |
460 } | 476 } |
461 | 477 |
462 private: | 478 private: |
463 int iteration_; | 479 int iteration_; |
464 }; | 480 }; |
465 TEST_F(ControlledPrefsDisableExtensions, ControlledPrefsDisableExtensions) { } | 481 TEST_F(ControlledPrefsDisableExtensions, ControlledPrefsDisableExtensions) { } |
466 | 482 |
467 } // namespace extensions | 483 } // namespace extensions |
OLD | NEW |