Chromium Code Reviews| Index: chrome/browser/extensions/extension_prefs_unittest.cc |
| diff --git a/chrome/browser/extensions/extension_prefs_unittest.cc b/chrome/browser/extensions/extension_prefs_unittest.cc |
| index 6b59740e9307d2c7cc2d2814145b42124ba4df47..c4ff74ff70dc6b5d50d1f41ea2e7517e88fa27b2 100644 |
| --- a/chrome/browser/extensions/extension_prefs_unittest.cc |
| +++ b/chrome/browser/extensions/extension_prefs_unittest.cc |
| @@ -1,4 +1,4 @@ |
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| +// Copyright (c) 2011 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. |
| @@ -22,6 +22,8 @@ |
| using base::Time; |
| using base::TimeDelta; |
| +namespace { |
| + |
| const char kPref1[] = "path1.subpath"; |
| const char kPref2[] = "path2"; |
| const char kPref3[] = "path3"; |
| @@ -33,6 +35,8 @@ const char kDefaultPref2[] = "default pref 2"; |
| const char kDefaultPref3[] = "default pref 3"; |
| const char kDefaultPref4[] = "default pref 4"; |
| +} // namespace |
| + |
| static void AddPattern(ExtensionExtent* extent, const std::string& pattern) { |
|
danno
2011/01/14 13:05:09
maybe an anon namespace because of the generic nam
battre
2011/01/20 17:59:29
Is already static.
|
| int schemes = URLPattern::SCHEME_ALL; |
| extent->AddPattern(URLPattern(schemes, pattern)); |
| @@ -591,21 +595,23 @@ class ExtensionPrefsPreferencesBase : public ExtensionPrefsTest { |
| void InstallExtControlledPref(Extension *ext, |
| const std::string& key, |
| Value* val) { |
| - // Install extension the first time a preference is set for it. |
| - Extension* extensions[] = {ext1_, ext2_, ext3_}; |
| - for (int i = 0; i < 3; ++i) { |
| - if (ext == extensions[i] && !installed[i]) { |
| - prefs()->OnExtensionInstalled(ext, Extension::ENABLED, true); |
| - installed[i] = true; |
| - break; |
| - } |
| - } |
| + EnsureExtensionInstalled(ext); |
| + prefs()->SetExtensionControlledPref(ext->id(), key, false, val); |
| + } |
| + |
| + void InstallExtControlledPrefIncognito(Extension *ext, |
| + const std::string& key, |
| + Value* val) { |
| + EnsureExtensionInstalled(ext); |
| + prefs()->SetExtensionControlledPref(ext->id(), key, true, val); |
| + } |
| - prefs()->SetExtensionControlledPref(ext->id(), key, val); |
| + void InstallExtension(Extension *ext) { |
| + EnsureExtensionInstalled(ext); |
| } |
| void UninstallExtension(const std::string& extension_id) { |
| - prefs()->OnExtensionUninstalled(extension_id, Extension::INTERNAL, false); |
| + EnsureExtensionUninstalled(extension_id); |
| } |
| // Weak references, for convenience. |
| @@ -617,6 +623,29 @@ class ExtensionPrefsPreferencesBase : public ExtensionPrefsTest { |
| bool installed[3]; |
| private: |
| + void EnsureExtensionInstalled(Extension *ext) { |
| + // Install extension the first time a preference is set for it. |
| + Extension* extensions[] = {ext1_, ext2_, ext3_}; |
| + for (int i = 0; i < 3; ++i) { |
| + if (ext == extensions[i] && !installed[i]) { |
| + prefs()->OnExtensionInstalled(ext, Extension::ENABLED, true); |
| + installed[i] = true; |
| + break; |
| + } |
| + } |
| + } |
| + |
| + void EnsureExtensionUninstalled(const std::string& extension_id) { |
| + Extension* extensions[] = {ext1_, ext2_, ext3_}; |
| + for (int i = 0; i < 3; ++i) { |
| + if (extensions[i]->id() == extension_id) { |
| + installed[i] = false; |
| + break; |
| + } |
| + } |
| + prefs()->OnExtensionUninstalled(extension_id, Extension::INTERNAL, false); |
| + } |
| + |
| scoped_refptr<Extension> ext1_scoped_; |
| scoped_refptr<Extension> ext2_scoped_; |
| scoped_refptr<Extension> ext3_scoped_; |
| @@ -634,63 +663,40 @@ class ExtensionPrefsInstallOneExtension |
| }; |
| TEST_F(ExtensionPrefsInstallOneExtension, ExtensionPrefsInstallOneExtension) {} |
| -// Make sure the last-installed extension wins for each preference. |
| -class ExtensionPrefsInstallOverwrittenExtensions |
| +// Check that we forget incognito values after a reload. |
| +class ExtensionPrefsInstallIncognito |
| : public ExtensionPrefsPreferencesBase { |
| - virtual void Initialize() { |
| - InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1")); |
| - InstallExtControlledPref(ext2_, kPref1, Value::CreateStringValue("val2")); |
| - InstallExtControlledPref(ext3_, kPref1, Value::CreateStringValue("val3")); |
| - |
| - InstallExtControlledPref(ext1_, kPref2, Value::CreateStringValue("val4")); |
| - InstallExtControlledPref(ext2_, kPref2, Value::CreateStringValue("val5")); |
| - |
| - InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val6")); |
| - InstallExtControlledPref(ext1_, kPref2, Value::CreateStringValue("val7")); |
| - InstallExtControlledPref(ext1_, kPref3, Value::CreateStringValue("val8")); |
| - } |
| - virtual void Verify() { |
| - std::string actual; |
| - actual = prefs()->pref_service()->GetString(kPref1); |
| - EXPECT_EQ("val3", actual); |
| - actual = prefs()->pref_service()->GetString(kPref2); |
| - EXPECT_EQ("val5", actual); |
| - actual = prefs()->pref_service()->GetString(kPref3); |
| - EXPECT_EQ("val8", actual); |
| - } |
| -}; |
| -TEST_F(ExtensionPrefsInstallOverwrittenExtensions, |
| - ExtensionPrefsInstallOverwrittenExtensions) {} |
| + public: |
| + ExtensionPrefsInstallIncognito() : iteration_(0) {} |
| -// Make sure the last-installed extension wins even if other extensions set |
| -// the same or different preferences later. |
| -class ExtensionPrefsInstallInterleavedExtensions |
| - : public ExtensionPrefsPreferencesBase { |
| virtual void Initialize() { |
| InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1")); |
| - InstallExtControlledPref(ext2_, kPref2, Value::CreateStringValue("val2")); |
| - InstallExtControlledPref(ext3_, kPref3, Value::CreateStringValue("val3")); |
| - |
| - InstallExtControlledPref(ext3_, kPref3, Value::CreateStringValue("val4")); |
| - InstallExtControlledPref(ext2_, kPref3, Value::CreateStringValue("val5")); |
| - InstallExtControlledPref(ext1_, kPref3, Value::CreateStringValue("val6")); |
| - |
| - InstallExtControlledPref(ext3_, kPref1, Value::CreateStringValue("val7")); |
| + InstallExtControlledPrefIncognito(ext1_, kPref1, |
| + Value::CreateStringValue("val2")); |
| + scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); |
| + std::string actual = incog_prefs->GetString(kPref1); |
| + EXPECT_EQ("val2", actual); |
| } |
| virtual void Verify() { |
| - std::string actual; |
| - actual = prefs()->pref_service()->GetString(kPref1); |
| - EXPECT_EQ("val7", actual); |
| - actual = prefs()->pref_service()->GetString(kPref2); |
| - EXPECT_EQ("val2", actual); |
| - actual = prefs()->pref_service()->GetString(kPref3); |
| - EXPECT_EQ("val4", actual); |
| + // Main pref service shall see only non-incognito settings. |
| + std::string actual = prefs()->pref_service()->GetString(kPref1); |
| + EXPECT_EQ("val1", actual); |
| + // Incognito pref service shall see incognito values only during first run. |
| + // Once the pref service was reloaded, all values shall be discarded. |
| + scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); |
| + actual = incog_prefs->GetString(kPref1); |
| + if (iteration_ == 0) { |
| + EXPECT_EQ("val2", actual); |
| + } else { |
| + EXPECT_EQ("val1", actual); |
| + } |
| + ++iteration_; |
| } |
| + int iteration_; |
| }; |
| -TEST_F(ExtensionPrefsInstallInterleavedExtensions, |
| - ExtensionPrefsInstallInterleavedExtensions) {} |
| +TEST_F(ExtensionPrefsInstallIncognito, ExtensionPrefsInstallOneExtension) {} |
| -class ExtensionPrefsUninstallOnlyExtension |
| +class ExtensionPrefsUninstallExtension |
| : public ExtensionPrefsPreferencesBase { |
| virtual void Initialize() { |
| InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1")); |
| @@ -706,89 +712,10 @@ class ExtensionPrefsUninstallOnlyExtension |
| EXPECT_EQ(kDefaultPref2, actual); |
| } |
| }; |
| -TEST_F(ExtensionPrefsUninstallOnlyExtension, |
| - ExtensionPrefsUninstallOnlyExtension) {} |
| - |
| -// Tests uninstalling an extension that wasn't winning for any preferences. |
| -class ExtensionPrefsUninstallIrrelevantExtension |
| - : public ExtensionPrefsPreferencesBase { |
| - virtual void Initialize() { |
| - InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1")); |
| - InstallExtControlledPref(ext2_, kPref1, Value::CreateStringValue("val2")); |
| +TEST_F(ExtensionPrefsUninstallExtension, |
| + ExtensionPrefsUninstallExtension) {} |
| - InstallExtControlledPref(ext1_, kPref2, Value::CreateStringValue("val3")); |
| - InstallExtControlledPref(ext2_, kPref2, Value::CreateStringValue("val4")); |
| - |
| - UninstallExtension(ext1_->id()); |
| - } |
| - virtual void Verify() { |
| - std::string actual; |
| - actual = prefs()->pref_service()->GetString(kPref1); |
| - EXPECT_EQ("val2", actual); |
| - actual = prefs()->pref_service()->GetString(kPref2); |
| - EXPECT_EQ("val4", actual); |
| - } |
| -}; |
| -TEST_F(ExtensionPrefsUninstallIrrelevantExtension, |
| - ExtensionPrefsUninstallIrrelevantExtension) {} |
| - |
| -// Tests uninstalling an extension that was winning for all preferences. |
| -class ExtensionPrefsUninstallExtensionFromTop |
| - : public ExtensionPrefsPreferencesBase { |
| - virtual void Initialize() { |
| - InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1")); |
| - InstallExtControlledPref(ext2_, kPref1, Value::CreateStringValue("val2")); |
| - InstallExtControlledPref(ext3_, kPref1, Value::CreateStringValue("val3")); |
| - |
| - InstallExtControlledPref(ext1_, kPref2, Value::CreateStringValue("val4")); |
| - InstallExtControlledPref(ext3_, kPref2, Value::CreateStringValue("val5")); |
| - |
| - UninstallExtension(ext3_->id()); |
| - } |
| - virtual void Verify() { |
| - std::string actual; |
| - actual = prefs()->pref_service()->GetString(kPref1); |
| - EXPECT_EQ("val2", actual); |
| - actual = prefs()->pref_service()->GetString(kPref2); |
| - EXPECT_EQ("val4", actual); |
| - } |
| -}; |
| -TEST_F(ExtensionPrefsUninstallExtensionFromTop, |
| - ExtensionPrefsUninstallExtensionFromTop) {} |
| - |
| -// Tests uninstalling an extension that was winning for only some preferences. |
| -class ExtensionPrefsUninstallExtensionFromMiddle |
| - : public ExtensionPrefsPreferencesBase { |
| - virtual void Initialize() { |
| - InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1")); |
| - InstallExtControlledPref(ext2_, kPref1, Value::CreateStringValue("val2")); |
| - InstallExtControlledPref(ext3_, kPref1, Value::CreateStringValue("val3")); |
| - |
| - InstallExtControlledPref(ext1_, kPref2, Value::CreateStringValue("val4")); |
| - InstallExtControlledPref(ext2_, kPref2, Value::CreateStringValue("val5")); |
| - |
| - InstallExtControlledPref(ext1_, kPref3, Value::CreateStringValue("val6")); |
| - |
| - InstallExtControlledPref(ext2_, kPref4, Value::CreateStringValue("val7")); |
| - |
| - UninstallExtension(ext2_->id()); |
| - } |
| - virtual void Verify() { |
| - std::string actual; |
| - actual = prefs()->pref_service()->GetString(kPref1); |
| - EXPECT_EQ("val3", actual); |
| - actual = prefs()->pref_service()->GetString(kPref2); |
| - EXPECT_EQ("val4", actual); |
| - actual = prefs()->pref_service()->GetString(kPref3); |
| - EXPECT_EQ("val6", actual); |
| - actual = prefs()->pref_service()->GetString(kPref4); |
| - EXPECT_EQ(kDefaultPref4, actual); |
| - } |
| -}; |
| -TEST_F(ExtensionPrefsUninstallExtensionFromMiddle, |
| - ExtensionPrefsUninstallExtensionFromMiddle) {} |
| - |
| -// Tests triggering of notifications to registered observers |
| +// Tests triggering of notifications to registered observers. |
| class ExtensionPrefsNotifyWhenNeeded |
| : public ExtensionPrefsPreferencesBase { |
| virtual void Initialize() { |
| @@ -796,28 +723,58 @@ class ExtensionPrefsNotifyWhenNeeded |
| using testing::Mock; |
| using testing::StrEq; |
| - scoped_ptr<NotificationObserverMock> observer( |
| - new NotificationObserverMock()); |
| + NotificationObserverMock observer; |
| PrefChangeRegistrar registrar; |
| registrar.Init(prefs()->pref_service()); |
| - registrar.Add(kPref1, observer.get()); |
| + registrar.Add(kPref1, &observer); |
| - EXPECT_CALL(*observer, Observe(_, _, _)); |
| + NotificationObserverMock incognito_observer; |
| + scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService()); |
| + PrefChangeRegistrar incognito_registrar; |
| + incognito_registrar.Init(incog_prefs.get()); |
| + incognito_registrar.Add(kPref1, &incognito_observer); |
| + |
| + // Write value and check notification. |
| + EXPECT_CALL(observer, Observe(_, _, _)); |
| + EXPECT_CALL(incognito_observer, Observe(_, _, _)); |
| InstallExtControlledPref(ext1_, kPref1, |
| Value::CreateStringValue("https://www.chromium.org")); |
| - Mock::VerifyAndClearExpectations(observer.get()); |
| + Mock::VerifyAndClearExpectations(&observer); |
| + Mock::VerifyAndClearExpectations(&incognito_observer); |
| - EXPECT_CALL(*observer, Observe(_, _, _)).Times(0); |
| + // Write same value. |
| + EXPECT_CALL(observer, Observe(_, _, _)).Times(0); |
| + EXPECT_CALL(incognito_observer, Observe(_, _, _)).Times(0); |
| InstallExtControlledPref(ext1_, kPref1, |
| Value::CreateStringValue("https://www.chromium.org")); |
| - Mock::VerifyAndClearExpectations(observer.get()); |
| + Mock::VerifyAndClearExpectations(&observer); |
| + Mock::VerifyAndClearExpectations(&incognito_observer); |
| - EXPECT_CALL(*observer, Observe(_, _, _)).Times(2); |
| + // Change value. |
| + EXPECT_CALL(observer, Observe(_, _, _)); |
| + EXPECT_CALL(incognito_observer, Observe(_, _, _)); |
| InstallExtControlledPref(ext1_, kPref1, |
| Value::CreateStringValue("chrome://newtab")); |
| - |
| + Mock::VerifyAndClearExpectations(&observer); |
| + Mock::VerifyAndClearExpectations(&incognito_observer); |
| + |
| + // Change only incognito value. |
| + EXPECT_CALL(observer, Observe(_, _, _)).Times(0); |
| + EXPECT_CALL(incognito_observer, Observe(_, _, _)); |
| + InstallExtControlledPrefIncognito(ext1_, kPref1, |
| + Value::CreateStringValue("chrome://newtab2")); |
| + Mock::VerifyAndClearExpectations(&observer); |
| + Mock::VerifyAndClearExpectations(&incognito_observer); |
| + |
| + // Uninstall. |
| + EXPECT_CALL(observer, Observe(_, _, _)); |
| + EXPECT_CALL(incognito_observer, Observe(_, _, _)); |
| UninstallExtension(ext1_->id()); |
| - registrar.Remove(kPref1, observer.get()); |
| + Mock::VerifyAndClearExpectations(&observer); |
| + Mock::VerifyAndClearExpectations(&incognito_observer); |
| + |
| + registrar.Remove(kPref1, &observer); |
| + incognito_registrar.Remove(kPref1, &incognito_observer); |
| } |
| virtual void Verify() { |
| std::string actual = prefs()->pref_service()->GetString(kPref1); |
| @@ -827,7 +784,7 @@ class ExtensionPrefsNotifyWhenNeeded |
| TEST_F(ExtensionPrefsNotifyWhenNeeded, |
| ExtensionPrefsNotifyWhenNeeded) {} |
| -// Tests disabling an extension |
| +// Tests disabling an extension. |
| class ExtensionPrefsDisableExt |
| : public ExtensionPrefsPreferencesBase { |
| virtual void Initialize() { |
| @@ -843,7 +800,7 @@ class ExtensionPrefsDisableExt |
| }; |
| TEST_F(ExtensionPrefsDisableExt, ExtensionPrefsDisableExt) {} |
| -// Tests disabling and reenabling an extension |
| +// Tests disabling and reenabling an extension. |
| class ExtensionPrefsReenableExt |
| : public ExtensionPrefsPreferencesBase { |
| virtual void Initialize() { |
| @@ -876,15 +833,27 @@ class ExtensionPrefsSetExtensionControlledPref |
| virtual void Initialize() { |
| MockStringValue* v1 = new MockStringValue("https://www.chromium.org"); |
| MockStringValue* v2 = new MockStringValue("https://www.chromium.org"); |
| + MockStringValue* v1i = new MockStringValue("https://www.chromium.org"); |
| + MockStringValue* v2i = new MockStringValue("https://www.chromium.org"); |
| // Ownership is taken, value shall not be deleted. |
| EXPECT_CALL(*v1, Die()).Times(0); |
| + EXPECT_CALL(*v1i, Die()).Times(0); |
| InstallExtControlledPref(ext1_, kPref1, v1); |
| + InstallExtControlledPrefIncognito(ext1_, kPref1, v1i); |
| testing::Mock::VerifyAndClearExpectations(v1); |
| + testing::Mock::VerifyAndClearExpectations(v1i); |
| // Make sure there is no memory leak and both values are deleted. |
| - EXPECT_CALL(*v2, Die()).Times(1); |
| EXPECT_CALL(*v1, Die()).Times(1); |
| + EXPECT_CALL(*v1i, Die()).Times(1); |
| + EXPECT_CALL(*v2, Die()).Times(1); |
| + EXPECT_CALL(*v2i, Die()).Times(1); |
| InstallExtControlledPref(ext1_, kPref1, v2); |
| + InstallExtControlledPrefIncognito(ext1_, kPref1, v2i); |
| prefs_.RecreateExtensionPrefs(); |
| + testing::Mock::VerifyAndClearExpectations(v1); |
| + testing::Mock::VerifyAndClearExpectations(v1i); |
| + testing::Mock::VerifyAndClearExpectations(v2); |
| + testing::Mock::VerifyAndClearExpectations(v2i); |
| } |
| virtual void Verify() { |