| 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..f67d408055e2fa07538838dbdfd9fd4289483610 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) {
|
| 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);
|
| + }
|
|
|
| - prefs()->SetExtensionControlledPref(ext->id(), key, val);
|
| + void InstallExtControlledPrefIncognito(Extension *ext,
|
| + const std::string& key,
|
| + Value* val) {
|
| + EnsureExtensionInstalled(ext);
|
| + prefs()->SetExtensionControlledPref(ext->id(), key, true, 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) {}
|
| +TEST_F(ExtensionPrefsUninstallExtension,
|
| + ExtensionPrefsUninstallExtension) {}
|
|
|
| -// 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"));
|
| -
|
| - 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() {
|
| @@ -802,22 +729,54 @@ class ExtensionPrefsNotifyWhenNeeded
|
| registrar.Init(prefs()->pref_service());
|
| registrar.Add(kPref1, observer.get());
|
|
|
| + scoped_ptr<NotificationObserverMock> incognito_observer(
|
| + new NotificationObserverMock());
|
| + scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService());
|
| + PrefChangeRegistrar incognito_registrar;
|
| + incognito_registrar.Init(incog_prefs.get());
|
| + incognito_registrar.Add(kPref1, incognito_observer.get());
|
| +
|
| + // 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(incognito_observer.get());
|
|
|
| + // 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(incognito_observer.get());
|
|
|
| - 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.get());
|
| + Mock::VerifyAndClearExpectations(incognito_observer.get());
|
| +
|
| + // 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.get());
|
| + Mock::VerifyAndClearExpectations(incognito_observer.get());
|
|
|
| + // Uninstall.
|
| + EXPECT_CALL(*observer, Observe(_, _, _));
|
| + EXPECT_CALL(*incognito_observer, Observe(_, _, _));
|
| UninstallExtension(ext1_->id());
|
| + Mock::VerifyAndClearExpectations(observer.get());
|
| + Mock::VerifyAndClearExpectations(incognito_observer.get());
|
| +
|
| registrar.Remove(kPref1, observer.get());
|
| + incognito_registrar.Remove(kPref1, incognito_observer.get());
|
| }
|
| virtual void Verify() {
|
| std::string actual = prefs()->pref_service()->GetString(kPref1);
|
| @@ -827,7 +786,7 @@ class ExtensionPrefsNotifyWhenNeeded
|
| TEST_F(ExtensionPrefsNotifyWhenNeeded,
|
| ExtensionPrefsNotifyWhenNeeded) {}
|
|
|
| -// Tests disabling an extension
|
| +// Tests disabling an extension.
|
| class ExtensionPrefsDisableExt
|
| : public ExtensionPrefsPreferencesBase {
|
| virtual void Initialize() {
|
| @@ -843,7 +802,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 +835,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() {
|
|
|