| 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 |