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 18949af98db0911c78d192161b7bfb463515f5d5..e11a38522ebf2b1fa7924af1a3cfe3fe12e7da20 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. |
@@ -21,6 +21,8 @@ |
using base::Time; |
using base::TimeDelta; |
+namespace { |
+ |
const char kPref1[] = "path1.subpath"; |
const char kPref2[] = "path2"; |
const char kPref3[] = "path3"; |
@@ -32,6 +34,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)); |
@@ -590,21 +594,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. |
@@ -616,6 +622,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_; |
@@ -633,63 +662,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")); |
@@ -705,89 +711,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() { |
@@ -795,28 +722,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); |
@@ -826,7 +783,7 @@ class ExtensionPrefsNotifyWhenNeeded |
TEST_F(ExtensionPrefsNotifyWhenNeeded, |
ExtensionPrefsNotifyWhenNeeded) {} |
-// Tests disabling an extension |
+// Tests disabling an extension. |
class ExtensionPrefsDisableExt |
: public ExtensionPrefsPreferencesBase { |
virtual void Initialize() { |
@@ -842,7 +799,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() { |
@@ -875,15 +832,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() { |