| 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..44986548fb30b1d1c81d02a81e02d8f95ead698d 100644
|
| --- a/chrome/browser/extensions/extension_prefs_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_prefs_unittest.cc
|
| @@ -591,20 +591,27 @@ 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.
|
| + EnsureExtensionInstalled(ext);
|
| + const bool incognito = false;
|
| + prefs()->SetExtensionControlledPref(ext->id(), key, incognito, val);
|
| + }
|
| +
|
| + void InstallExtControlledPrefIncognito(Extension *ext,
|
| + const std::string& key,
|
| + Value* val) {
|
| + EnsureExtensionInstalled(ext);
|
| + const bool incognito = true;
|
| + prefs()->SetExtensionControlledPref(ext->id(), key, incognito, val);
|
| + }
|
| +
|
| + void UninstallExtension(const std::string& extension_id) {
|
| 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;
|
| + if (extensions[i]->id() == extension_id) {
|
| + installed[i] = false;
|
| break;
|
| }
|
| }
|
| -
|
| - prefs()->SetExtensionControlledPref(ext->id(), key, val);
|
| - }
|
| -
|
| - void UninstallExtension(const std::string& extension_id) {
|
| prefs()->OnExtensionUninstalled(extension_id, Extension::INTERNAL, false);
|
| }
|
|
|
| @@ -617,6 +624,18 @@ 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;
|
| + }
|
| + }
|
| + }
|
| +
|
| scoped_refptr<Extension> ext1_scoped_;
|
| scoped_refptr<Extension> ext2_scoped_;
|
| scoped_refptr<Extension> ext3_scoped_;
|
| @@ -634,6 +653,36 @@ class ExtensionPrefsInstallOneExtension
|
| };
|
| TEST_F(ExtensionPrefsInstallOneExtension, ExtensionPrefsInstallOneExtension) {}
|
|
|
| +// Check that we forget incognito values after a reload.
|
| +class ExtensionPrefsInstallIncognito
|
| + : public ExtensionPrefsPreferencesBase {
|
| + public:
|
| + ExtensionPrefsInstallIncognito() : iteration(0) {}
|
| +
|
| + virtual void Initialize() {
|
| + InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1"));
|
| + InstallExtControlledPrefIncognito(ext1_, kPref1,
|
| + Value::CreateStringValue("val2"));
|
| + std::string actual = prefs_.incognito_pref_service()->GetString(kPref1);
|
| + EXPECT_EQ("val2", actual);
|
| + }
|
| + virtual void Verify() {
|
| + // 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
|
| + actual = prefs_.incognito_pref_service()->GetString(kPref1);
|
| + if (iteration == 0) {
|
| + EXPECT_EQ("val2", actual);
|
| + } else {
|
| + EXPECT_EQ("val1", actual);
|
| + }
|
| + ++iteration;
|
| + }
|
| + int iteration;
|
| +};
|
| +TEST_F(ExtensionPrefsInstallIncognito, ExtensionPrefsInstallOneExtension) {}
|
| +
|
| // Make sure the last-installed extension wins for each preference.
|
| class ExtensionPrefsInstallOverwrittenExtensions
|
| : public ExtensionPrefsPreferencesBase {
|
| @@ -662,6 +711,70 @@ class ExtensionPrefsInstallOverwrittenExtensions
|
| TEST_F(ExtensionPrefsInstallOverwrittenExtensions,
|
| ExtensionPrefsInstallOverwrittenExtensions) {}
|
|
|
| +// Make sure the last-installed extension wins for each preference.
|
| +class ExtensionPrefsInstallOverwrittenExtensionsIncognito
|
| + : public ExtensionPrefsPreferencesBase {
|
| + virtual void Initialize() {
|
| + const char* strings[] = {
|
| + kDefaultPref1,
|
| + "val1",
|
| + "val2",
|
| + "val3",
|
| + "val4"
|
| + };
|
| + int values[][6] = {
|
| + // columns:
|
| + // 0: pref value of extension 1
|
| + // 1: pref value of extension 1 incognito
|
| + // 2: pref value of extension 2
|
| + // 3: pref value of extension 2 incognito
|
| + // 4: desired winner regular
|
| + // 5: desired winner incognito
|
| + // e.g. { 1, 0, 0, 4, 1, 4}, means:
|
| + // ext1 regular is set to "val1", ext2 incognito is set to "val4"
|
| + // --> the winning regular value is "val1", the winning incognito
|
| + // value is "val4".
|
| + { 1, 0, 0, 0, 1, 1},
|
| + { 1, 2, 0, 0, 1, 2},
|
| + { 1, 0, 3, 0, 3, 3},
|
| + { 1, 0, 0, 4, 1, 4},
|
| + { 1, 2, 3, 0, 3, 3}, // The last 3 here is intentional!
|
| + { 1, 2, 0, 4, 1, 4},
|
| + { 1, 2, 3, 4, 3, 4}
|
| + };
|
| + InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1"));
|
| + for (size_t row = 0; row < arraysize(values); ++row) {
|
| + LOG(INFO) << "Testing row " << row;
|
| + UninstallExtension(ext1_->id());
|
| + UninstallExtension(ext2_->id());
|
| + if (values[row][0]) {
|
| + InstallExtControlledPref(
|
| + ext1_, kPref1, Value::CreateStringValue(strings[values[row][0]]));
|
| + }
|
| + if (values[row][1]) {
|
| + InstallExtControlledPrefIncognito(
|
| + ext1_, kPref1, Value::CreateStringValue(strings[values[row][1]]));
|
| + }
|
| + if (values[row][2]) {
|
| + InstallExtControlledPref(
|
| + ext2_, kPref1, Value::CreateStringValue(strings[values[row][2]]));
|
| + }
|
| + if (values[row][3]) {
|
| + InstallExtControlledPrefIncognito(
|
| + ext2_, kPref1, Value::CreateStringValue(strings[values[row][3]]));
|
| + }
|
| + std::string actual;
|
| + actual = prefs()->pref_service()->GetString(kPref1);
|
| + EXPECT_EQ(strings[values[row][4]], actual);
|
| + actual = prefs_.incognito_pref_service()->GetString(kPref1);
|
| + EXPECT_EQ(strings[values[row][5]], actual);
|
| + }
|
| + }
|
| + virtual void Verify() {}
|
| +};
|
| +TEST_F(ExtensionPrefsInstallOverwrittenExtensionsIncognito,
|
| + ExtensionPrefsInstallOverwrittenExtensionsIncognito) {}
|
| +
|
| // Make sure the last-installed extension wins even if other extensions set
|
| // the same or different preferences later.
|
| class ExtensionPrefsInstallInterleavedExtensions
|
| @@ -681,10 +794,16 @@ class ExtensionPrefsInstallInterleavedExtensions
|
| std::string actual;
|
| actual = prefs()->pref_service()->GetString(kPref1);
|
| EXPECT_EQ("val7", actual);
|
| + actual = prefs_.incognito_pref_service()->GetString(kPref1);
|
| + EXPECT_EQ("val7", actual);
|
| actual = prefs()->pref_service()->GetString(kPref2);
|
| EXPECT_EQ("val2", actual);
|
| + actual = prefs_.incognito_pref_service()->GetString(kPref2);
|
| + EXPECT_EQ("val2", actual);
|
| actual = prefs()->pref_service()->GetString(kPref3);
|
| EXPECT_EQ("val4", actual);
|
| + actual = prefs_.incognito_pref_service()->GetString(kPref3);
|
| + EXPECT_EQ("val4", actual);
|
| }
|
| };
|
| TEST_F(ExtensionPrefsInstallInterleavedExtensions,
|
| @@ -735,13 +854,26 @@ TEST_F(ExtensionPrefsUninstallIrrelevantExtension,
|
| // Tests uninstalling an extension that was winning for all preferences.
|
| class ExtensionPrefsUninstallExtensionFromTop
|
| : public ExtensionPrefsPreferencesBase {
|
| + public:
|
| + ExtensionPrefsUninstallExtensionFromTop() : iteration(0) {}
|
| +
|
| virtual void Initialize() {
|
| InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1"));
|
| + InstallExtControlledPrefIncognito(ext1_, kPref1,
|
| + Value::CreateStringValue("val1i"));
|
| InstallExtControlledPref(ext2_, kPref1, Value::CreateStringValue("val2"));
|
| + InstallExtControlledPrefIncognito(ext2_, kPref1,
|
| + Value::CreateStringValue("val2i"));
|
| InstallExtControlledPref(ext3_, kPref1, Value::CreateStringValue("val3"));
|
| + InstallExtControlledPrefIncognito(ext3_, kPref1,
|
| + Value::CreateStringValue("val3i"));
|
|
|
| InstallExtControlledPref(ext1_, kPref2, Value::CreateStringValue("val4"));
|
| + InstallExtControlledPrefIncognito(ext1_, kPref2,
|
| + Value::CreateStringValue("val4i"));
|
| InstallExtControlledPref(ext3_, kPref2, Value::CreateStringValue("val5"));
|
| + InstallExtControlledPrefIncognito(ext3_, kPref2,
|
| + Value::CreateStringValue("val5i"));
|
|
|
| UninstallExtension(ext3_->id());
|
| }
|
| @@ -751,7 +883,14 @@ class ExtensionPrefsUninstallExtensionFromTop
|
| EXPECT_EQ("val2", actual);
|
| actual = prefs()->pref_service()->GetString(kPref2);
|
| EXPECT_EQ("val4", actual);
|
| + // After the reload (iteration == 1) all incognito settings are forgotten.
|
| + actual = prefs_.incognito_pref_service()->GetString(kPref1);
|
| + EXPECT_EQ((iteration == 0 ? "val2i" : "val2"), actual);
|
| + actual = prefs_.incognito_pref_service()->GetString(kPref2);
|
| + EXPECT_EQ((iteration == 0 ? "val4i" : "val4"), actual);
|
| + ++iteration;
|
| }
|
| + int iteration;
|
| };
|
| TEST_F(ExtensionPrefsUninstallExtensionFromTop,
|
| ExtensionPrefsUninstallExtensionFromTop) {}
|
| @@ -876,15 +1015,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() {
|
|
|