Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(883)

Unified Diff: chrome/browser/extensions/extension_prefs_unittest.cc

Issue 5915004: Introduce incognito preference settings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed whitespaces in mac files Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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() {

Powered by Google App Engine
This is Rietveld 408576698