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

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

Issue 5213002: Fix for Bug 50726 "Save extension list and "winning" prefs from extensions" (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Same patch but without stuff that is already included in 5204006 Created 10 years 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
« no previous file with comments | « chrome/browser/extensions/extension_pref_store.cc ('k') | chrome/browser/extensions/extension_prefs.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/extension_pref_store_unittest.cc
diff --git a/chrome/browser/extensions/extension_pref_store_unittest.cc b/chrome/browser/extensions/extension_pref_store_unittest.cc
deleted file mode 100644
index 4c64546bbf31462993a2587e7d692fced64ce857..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/extension_pref_store_unittest.cc
+++ /dev/null
@@ -1,370 +0,0 @@
-// Copyright (c) 2010 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.
-
-#include <string>
-#include <vector>
-
-#include "base/scoped_ptr.h"
-#include "base/scoped_temp_dir.h"
-#include "base/values.h"
-#include "chrome/browser/extensions/extension_pref_store.h"
-#include "chrome/browser/prefs/in_memory_pref_store.h"
-#include "chrome/browser/prefs/pref_service.h"
-#include "chrome/browser/prefs/pref_value_store.h"
-#include "chrome/common/extensions/extension.h"
-#include "chrome/test/testing_pref_service.h"
-#include "chrome/test/testing_pref_value_store.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace keys = extension_manifest_keys;
-
-namespace {
-
-class TestExtensionPrefStore : public ExtensionPrefStore {
- public:
- TestExtensionPrefStore()
- : ExtensionPrefStore(NULL, PrefNotifier::EXTENSION_STORE),
- ext1(NULL),
- ext2(NULL),
- ext3(NULL),
- pref_service_(NULL) {
- // Can't use ASSERT_TRUE here because a constructor can't return a value.
- if (!temp_dir_.CreateUniqueTempDir()) {
- ADD_FAILURE() << "Failed to create temp dir";
- return;
- }
- DictionaryValue simple_dict;
- std::string error;
-
- simple_dict.SetString(keys::kVersion, "1.0.0.0");
- simple_dict.SetString(keys::kName, "unused");
-
- ext1_scoped_ = Extension::Create(
- temp_dir_.path().AppendASCII("ext1"), Extension::INVALID,
- simple_dict, false, &error);
- ext2_scoped_ = Extension::Create(
- temp_dir_.path().AppendASCII("ext2"), Extension::INVALID,
- simple_dict, false, &error);
- ext3_scoped_ = Extension::Create(
- temp_dir_.path().AppendASCII("ext3"), Extension::INVALID,
- simple_dict, false, &error);
-
- ext1 = ext1_scoped_.get();
- ext2 = ext2_scoped_.get();
- ext3 = ext3_scoped_.get();
- }
-
- typedef std::vector<std::string> ExtensionIDs;
- void GetExtensionIDList(ExtensionIDs* result) {
- GetExtensionIDs(result);
- }
-
- void SetPrefService(PrefService* pref_service) {
- pref_service_ = pref_service;
- }
-
- // Overridden from ExtensionPrefStore.
- virtual PrefService* GetPrefService() {
- return pref_service_;
- }
-
- // Weak references, for convenience.
- Extension* ext1;
- Extension* ext2;
- Extension* ext3;
-
- private:
- ScopedTempDir temp_dir_;
-
- scoped_refptr<Extension> ext1_scoped_;
- scoped_refptr<Extension> ext2_scoped_;
- scoped_refptr<Extension> ext3_scoped_;
-
- // Weak reference.
- PrefService* pref_service_;
-};
-
-// Mock PrefNotifier that allows the notifications to be tracked.
-class MockPrefNotifier : public PrefNotifier {
- public:
- MockPrefNotifier(PrefService* service, PrefValueStore* value_store)
- : PrefNotifier(service, value_store) {}
-
- virtual ~MockPrefNotifier() {}
-
- MOCK_METHOD1(FireObservers, void(const char* path));
-};
-
-// Mock PrefService that allows the PrefNotifier to be injected.
-class MockPrefService : public PrefService {
- public:
- explicit MockPrefService(PrefValueStore* pref_value_store)
- : PrefService(pref_value_store) {
- }
-
- void SetPrefNotifier(MockPrefNotifier* notifier) {
- pref_notifier_.reset(notifier);
- }
-};
-
-// Use constants to avoid confusing std::map with hard-coded strings.
-const char kPref1[] = "path1.subpath";
-const char kPref2[] = "path2";
-const char kPref3[] = "path3";
-const char kPref4[] = "path4";
-
-} // namespace
-
-TEST(ExtensionPrefStoreTest, InstallOneExtension) {
- TestExtensionPrefStore eps;
- ASSERT_TRUE(eps.ext1 != NULL);
- eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1"));
-
- TestExtensionPrefStore::ExtensionIDs ids;
- eps.GetExtensionIDList(&ids);
- EXPECT_EQ(1u, ids.size());
- EXPECT_EQ(eps.ext1->id(), ids[0]);
-
- DictionaryValue* prefs = eps.prefs();
- ASSERT_EQ(1u, prefs->size());
- std::string actual;
- ASSERT_TRUE(prefs->GetString(kPref1, &actual));
- EXPECT_EQ("val1", actual);
-}
-
-// Make sure the last-installed extension wins.
-TEST(ExtensionPrefStoreTest, InstallMultipleExtensions) {
- TestExtensionPrefStore eps;
- ASSERT_TRUE(eps.ext1 != NULL);
- eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1"));
- eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2"));
- eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3"));
-
- TestExtensionPrefStore::ExtensionIDs ids;
- eps.GetExtensionIDList(&ids);
- EXPECT_EQ(3u, ids.size());
- EXPECT_EQ(eps.ext3->id(), ids[0]);
- EXPECT_EQ(eps.ext2->id(), ids[1]);
- EXPECT_EQ(eps.ext1->id(), ids[2]);
-
- DictionaryValue* prefs = eps.prefs();
- ASSERT_EQ(1u, prefs->size());
- std::string actual;
- ASSERT_TRUE(prefs->GetString(kPref1, &actual));
- EXPECT_EQ("val3", actual);
-}
-
-// Make sure the last-installed extension wins for each preference.
-TEST(ExtensionPrefStoreTest, InstallOverwrittenExtensions) {
- TestExtensionPrefStore eps;
- ASSERT_TRUE(eps.ext1 != NULL);
- eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1"));
- eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2"));
- eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3"));
-
- eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val4"));
- eps.InstallExtensionPref(eps.ext2, kPref2, Value::CreateStringValue("val5"));
-
- eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val6"));
- eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val7"));
- eps.InstallExtensionPref(eps.ext1, kPref3, Value::CreateStringValue("val8"));
-
- TestExtensionPrefStore::ExtensionIDs ids;
- eps.GetExtensionIDList(&ids);
- EXPECT_EQ(3u, ids.size());
- EXPECT_EQ(eps.ext3->id(), ids[0]);
- EXPECT_EQ(eps.ext2->id(), ids[1]);
- EXPECT_EQ(eps.ext1->id(), ids[2]);
-
- DictionaryValue* prefs = eps.prefs();
- ASSERT_EQ(3u, prefs->size());
- std::string actual;
- EXPECT_TRUE(prefs->GetString(kPref1, &actual));
- EXPECT_EQ("val3", actual);
- EXPECT_TRUE(prefs->GetString(kPref2, &actual));
- EXPECT_EQ("val5", actual);
- EXPECT_TRUE(prefs->GetString(kPref3, &actual));
- EXPECT_EQ("val8", actual);
-}
-
-// Make sure the last-installed extension wins even if other extensions set
-// the same or different preferences later.
-TEST(ExtensionPrefStoreTest, InstallInterleavedExtensions) {
- TestExtensionPrefStore eps;
- ASSERT_TRUE(eps.ext1 != NULL);
- eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1"));
- eps.InstallExtensionPref(eps.ext2, kPref2, Value::CreateStringValue("val2"));
- eps.InstallExtensionPref(eps.ext3, kPref3, Value::CreateStringValue("val3"));
-
- eps.InstallExtensionPref(eps.ext3, kPref3, Value::CreateStringValue("val4"));
- eps.InstallExtensionPref(eps.ext2, kPref3, Value::CreateStringValue("val5"));
- eps.InstallExtensionPref(eps.ext1, kPref3, Value::CreateStringValue("val6"));
-
- eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val7"));
-
- TestExtensionPrefStore::ExtensionIDs ids;
- eps.GetExtensionIDList(&ids);
- EXPECT_EQ(3u, ids.size());
- EXPECT_EQ(eps.ext3->id(), ids[0]);
- EXPECT_EQ(eps.ext2->id(), ids[1]);
- EXPECT_EQ(eps.ext1->id(), ids[2]);
-
- DictionaryValue* prefs = eps.prefs();
- ASSERT_EQ(3u, prefs->size());
- std::string actual;
- EXPECT_TRUE(prefs->GetString(kPref1, &actual));
- EXPECT_EQ("val7", actual);
- EXPECT_TRUE(prefs->GetString(kPref2, &actual));
- EXPECT_EQ("val2", actual);
- EXPECT_TRUE(prefs->GetString(kPref3, &actual));
- EXPECT_EQ("val4", actual);
-}
-
-TEST(ExtensionPrefStoreTest, UninstallOnlyExtension) {
- TestExtensionPrefStore eps;
- ASSERT_TRUE(eps.ext1 != NULL);
- eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1"));
- eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val2"));
-
- // No need to check the state here; the Install* tests cover that.
- eps.UninstallExtension(eps.ext1);
-
- TestExtensionPrefStore::ExtensionIDs ids;
- eps.GetExtensionIDList(&ids);
- EXPECT_EQ(0u, ids.size());
-
- DictionaryValue* prefs = eps.prefs();
- std::string actual;
- // "path1.name" has been removed, but an empty "path1" dictionary is still
- // present.
- ASSERT_EQ(1u, prefs->size());
- EXPECT_FALSE(prefs->GetString(kPref1, &actual));
- EXPECT_FALSE(prefs->GetString(kPref2, &actual));
-}
-
-// Tests uninstalling an extension that wasn't winning for any preferences.
-TEST(ExtensionPrefStoreTest, UninstallIrrelevantExtension) {
- TestExtensionPrefStore eps;
- ASSERT_TRUE(eps.ext1 != NULL);
- eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1"));
- eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2"));
-
- eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val3"));
- eps.InstallExtensionPref(eps.ext2, kPref2, Value::CreateStringValue("val4"));
-
- eps.UninstallExtension(eps.ext1);
-
- TestExtensionPrefStore::ExtensionIDs ids;
- eps.GetExtensionIDList(&ids);
- EXPECT_EQ(1u, ids.size());
- EXPECT_EQ(eps.ext2->id(), ids[0]);
-
- DictionaryValue* prefs = eps.prefs();
- ASSERT_EQ(2u, prefs->size());
- std::string actual;
- EXPECT_TRUE(prefs->GetString(kPref1, &actual));
- EXPECT_EQ("val2", actual);
- EXPECT_TRUE(prefs->GetString(kPref2, &actual));
- EXPECT_EQ("val4", actual);
-}
-
-// Tests uninstalling an extension that was winning for all preferences.
-TEST(ExtensionPrefStoreTest, UninstallExtensionFromTop) {
- TestExtensionPrefStore eps;
- ASSERT_TRUE(eps.ext1 != NULL);
- eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1"));
- eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2"));
- eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3"));
-
- eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val4"));
- eps.InstallExtensionPref(eps.ext3, kPref2, Value::CreateStringValue("val5"));
-
- eps.UninstallExtension(eps.ext3);
-
- TestExtensionPrefStore::ExtensionIDs ids;
- eps.GetExtensionIDList(&ids);
- EXPECT_EQ(2u, ids.size());
- EXPECT_EQ(eps.ext2->id(), ids[0]);
- EXPECT_EQ(eps.ext1->id(), ids[1]);
-
- DictionaryValue* prefs = eps.prefs();
- ASSERT_EQ(2u, prefs->size());
- std::string actual;
- EXPECT_TRUE(prefs->GetString(kPref1, &actual));
- EXPECT_EQ("val2", actual);
- EXPECT_TRUE(prefs->GetString(kPref2, &actual));
- EXPECT_EQ("val4", actual);
-}
-
-// Tests uninstalling an extension that was winning for only some preferences.
-TEST(ExtensionPrefStoreTest, UninstallExtensionFromMiddle) {
- TestExtensionPrefStore eps;
- ASSERT_TRUE(eps.ext1 != NULL);
- eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1"));
- eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2"));
- eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3"));
-
- eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val4"));
- eps.InstallExtensionPref(eps.ext2, kPref2, Value::CreateStringValue("val5"));
-
- eps.InstallExtensionPref(eps.ext1, kPref3, Value::CreateStringValue("val6"));
-
- eps.InstallExtensionPref(eps.ext2, kPref4, Value::CreateStringValue("val7"));
-
- eps.UninstallExtension(eps.ext2);
-
- TestExtensionPrefStore::ExtensionIDs ids;
- eps.GetExtensionIDList(&ids);
- EXPECT_EQ(2u, ids.size());
- EXPECT_EQ(eps.ext3->id(), ids[0]);
- EXPECT_EQ(eps.ext1->id(), ids[1]);
-
- DictionaryValue* prefs = eps.prefs();
- ASSERT_EQ(3u, prefs->size());
- std::string actual;
- EXPECT_TRUE(prefs->GetString(kPref1, &actual));
- EXPECT_EQ("val3", actual);
- EXPECT_TRUE(prefs->GetString(kPref2, &actual));
- EXPECT_EQ("val4", actual);
- EXPECT_TRUE(prefs->GetString(kPref3, &actual));
- EXPECT_EQ("val6", actual);
- EXPECT_FALSE(prefs->GetString(kPref4, &actual));
-}
-
-TEST(ExtensionPrefStoreTest, NotifyWhenNeeded) {
- using testing::Mock;
-
- TestExtensionPrefStore* eps = new TestExtensionPrefStore;
- InMemoryPrefStore* dps = new InMemoryPrefStore;
- ASSERT_TRUE(eps->ext1 != NULL);
-
- // The PrefValueStore takes ownership of the PrefStores; in this case, that's
- // only an ExtensionPrefStore. Likewise, the PrefService takes ownership of
- // the PrefValueStore and PrefNotifier.
- PrefValueStore* value_store =
- new TestingPrefValueStore(NULL, NULL, eps, NULL, NULL, NULL, dps);
- scoped_ptr<MockPrefService> pref_service(new MockPrefService(value_store));
- MockPrefNotifier* pref_notifier = new MockPrefNotifier(pref_service.get(),
- value_store);
- pref_service->SetPrefNotifier(pref_notifier);
-
- eps->SetPrefService(pref_service.get());
- pref_service->RegisterStringPref(kPref1, std::string());
-
- EXPECT_CALL(*pref_notifier, FireObservers(kPref1));
- eps->InstallExtensionPref(eps->ext1, kPref1,
- Value::CreateStringValue("https://www.chromium.org"));
- Mock::VerifyAndClearExpectations(pref_notifier);
-
- EXPECT_CALL(*pref_notifier, FireObservers(kPref1)).Times(0);
- eps->InstallExtensionPref(eps->ext1, kPref1,
- Value::CreateStringValue("https://www.chromium.org"));
- Mock::VerifyAndClearExpectations(pref_notifier);
-
- EXPECT_CALL(*pref_notifier, FireObservers(kPref1)).Times(2);
- eps->InstallExtensionPref(eps->ext1, kPref1,
- Value::CreateStringValue("chrome://newtab"));
- eps->UninstallExtension(eps->ext1);
-}
« no previous file with comments | « chrome/browser/extensions/extension_pref_store.cc ('k') | chrome/browser/extensions/extension_prefs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698