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

Side by Side Diff: chrome/browser/extensions/extension_pref_store_unittest.cc

Issue 2823037: Add an ExtensionPrefStore, layered between the user prefs nad the managed pre... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 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 unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <gtest/gtest.h>
6
7 #include <string>
8 #include <vector>
9
10 #include "base/values.h"
11 #include "chrome/browser/extensions/extension_pref_store.h"
12 #include "chrome/browser/pref_service.h"
13 #include "chrome/browser/pref_value_store.h"
14
15 namespace {
16
17 class TestExtensionPrefStore : public ExtensionPrefStore {
18 public:
19 TestExtensionPrefStore() : ExtensionPrefStore(NULL) {}
20
21 typedef std::vector<std::string> ExtensionIDs;
22 void GetExtensionIDList(ExtensionIDs* result) {
23 GetExtensionIDs(result);
24 }
25 };
26
27 class MockPrefService : public PrefService {
28 public:
29 explicit MockPrefService(PrefValueStore* value_store)
30 : PrefService(value_store) {}
31
32 // Tracks whether the observers would have been notified.
33 virtual void FireObserversIfChanged(const wchar_t* pref_name,
34 const Value* old_value) {
35 fired_observers_ = PrefIsChanged(pref_name, old_value);
36 }
37
38 bool fired_observers_;
39 };
40
41 // Use static constants to avoid confusing std::map with hard-coded strings.
42 static const wchar_t* kPref1 = L"path1.subpath";
43 static const wchar_t* kPref2 = L"path2";
44 static const wchar_t* kPref3 = L"path3";
45 static const wchar_t* kPref4 = L"path4";
46
47 } // namespace
48
49 TEST(ExtensionPrefStoreTest, InstallOneExtension) {
50 TestExtensionPrefStore eps;
51 eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1"));
52
53 TestExtensionPrefStore::ExtensionIDs ids;
54 eps.GetExtensionIDList(&ids);
55 EXPECT_EQ(1u, ids.size());
56 EXPECT_EQ("id1", ids[0]);
57
58 DictionaryValue* prefs = eps.prefs();
59 ASSERT_EQ(1u, prefs->size());
60 std::string actual;
61 ASSERT_TRUE(prefs->GetString(kPref1, &actual));
62 EXPECT_EQ("val1", actual);
63 }
64
65 // Make sure the last-installed extension wins.
66 TEST(ExtensionPrefStoreTest, InstallMultipleExtensions) {
67 TestExtensionPrefStore eps;
68 eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1"));
69 eps.InstallExtensionPref("id2", kPref1, Value::CreateStringValue("val2"));
70 eps.InstallExtensionPref("id3", kPref1, Value::CreateStringValue("val3"));
71
72 TestExtensionPrefStore::ExtensionIDs ids;
73 eps.GetExtensionIDList(&ids);
74 EXPECT_EQ(3u, ids.size());
75 EXPECT_EQ("id3", ids[0]);
76 EXPECT_EQ("id2", ids[1]);
77 EXPECT_EQ("id1", ids[2]);
78
79 DictionaryValue* prefs = eps.prefs();
80 ASSERT_EQ(1u, prefs->size());
81 std::string actual;
82 ASSERT_TRUE(prefs->GetString(kPref1, &actual));
83 EXPECT_EQ("val3", actual);
84 }
85
86 // Make sure the last-installed extension wins for each preference.
87 TEST(ExtensionPrefStoreTest, InstallOverwrittenExtensions) {
88 TestExtensionPrefStore eps;
89 eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1"));
90 eps.InstallExtensionPref("id2", kPref1, Value::CreateStringValue("val2"));
91 eps.InstallExtensionPref("id3", kPref1, Value::CreateStringValue("val3"));
92
93 eps.InstallExtensionPref("id1", kPref2, Value::CreateStringValue("val4"));
94 eps.InstallExtensionPref("id2", kPref2, Value::CreateStringValue("val5"));
95
96 eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val6"));
97 eps.InstallExtensionPref("id1", kPref2, Value::CreateStringValue("val7"));
98 eps.InstallExtensionPref("id1", kPref3, Value::CreateStringValue("val8"));
99
100 TestExtensionPrefStore::ExtensionIDs ids;
101 eps.GetExtensionIDList(&ids);
102 EXPECT_EQ(3u, ids.size());
103 EXPECT_EQ("id3", ids[0]);
104 EXPECT_EQ("id2", ids[1]);
105 EXPECT_EQ("id1", ids[2]);
106
107 DictionaryValue* prefs = eps.prefs();
108 ASSERT_EQ(3u, prefs->size());
109 std::string actual;
110 EXPECT_TRUE(prefs->GetString(kPref1, &actual));
111 EXPECT_EQ("val3", actual);
112 EXPECT_TRUE(prefs->GetString(kPref2, &actual));
113 EXPECT_EQ("val5", actual);
114 EXPECT_TRUE(prefs->GetString(kPref3, &actual));
115 EXPECT_EQ("val8", actual);
116 }
117
118 // Make sure the last-installed extension wins even if other extensions set
119 // the same or different preferences later.
120 TEST(ExtensionPrefStoreTest, InstallInterleavedExtensions) {
121 TestExtensionPrefStore eps;
122 eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1"));
123 eps.InstallExtensionPref("id2", kPref2, Value::CreateStringValue("val2"));
124 eps.InstallExtensionPref("id3", kPref3, Value::CreateStringValue("val3"));
125
126 eps.InstallExtensionPref("id3", kPref3, Value::CreateStringValue("val4"));
127 eps.InstallExtensionPref("id2", kPref3, Value::CreateStringValue("val5"));
128 eps.InstallExtensionPref("id1", kPref3, Value::CreateStringValue("val6"));
129
130 eps.InstallExtensionPref("id3", kPref1, Value::CreateStringValue("val7"));
131
132 TestExtensionPrefStore::ExtensionIDs ids;
133 eps.GetExtensionIDList(&ids);
134 EXPECT_EQ(3u, ids.size());
135 EXPECT_EQ("id3", ids[0]);
136 EXPECT_EQ("id2", ids[1]);
137 EXPECT_EQ("id1", ids[2]);
138
139 DictionaryValue* prefs = eps.prefs();
140 ASSERT_EQ(3u, prefs->size());
141 std::string actual;
142 EXPECT_TRUE(prefs->GetString(kPref1, &actual));
143 EXPECT_EQ("val7", actual);
144 EXPECT_TRUE(prefs->GetString(kPref2, &actual));
145 EXPECT_EQ("val2", actual);
146 EXPECT_TRUE(prefs->GetString(kPref3, &actual));
147 EXPECT_EQ("val4", actual);
148 }
149
150 TEST(ExtensionPrefStoreTest, UninstallOnlyExtension) {
151 TestExtensionPrefStore eps;
152 eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1"));
153 eps.InstallExtensionPref("id1", kPref2, Value::CreateStringValue("val2"));
154
155 // No need to check the state here; the InstallOneExtension already has.
156 eps.UninstallExtension("id1");
157
158 TestExtensionPrefStore::ExtensionIDs ids;
159 eps.GetExtensionIDList(&ids);
160 EXPECT_EQ(0u, ids.size());
161
162 DictionaryValue* prefs = eps.prefs();
163 std::string actual;
164 // "path1.name" has been removed, but an empty "path1" dictionary is still
165 // present.
166 ASSERT_EQ(1u, prefs->size());
167 EXPECT_FALSE(prefs->GetString(kPref1, &actual));
168 EXPECT_FALSE(prefs->GetString(kPref2, &actual));
169 }
170
171 // Tests uninstalling an extension that wasn't winning for any preferences.
172 TEST(ExtensionPrefStoreTest, UninstallIrrelevantExtension) {
173 TestExtensionPrefStore eps;
174 eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1"));
175 eps.InstallExtensionPref("id2", kPref1, Value::CreateStringValue("val2"));
176
177 eps.InstallExtensionPref("id1", kPref2, Value::CreateStringValue("val3"));
178 eps.InstallExtensionPref("id2", kPref2, Value::CreateStringValue("val4"));
179
180 eps.UninstallExtension("id1");
181
182 TestExtensionPrefStore::ExtensionIDs ids;
183 eps.GetExtensionIDList(&ids);
184 EXPECT_EQ(1u, ids.size());
185 EXPECT_EQ("id2", ids[0]);
186
187 DictionaryValue* prefs = eps.prefs();
188 ASSERT_EQ(2u, prefs->size());
189 std::string actual;
190 EXPECT_TRUE(prefs->GetString(kPref1, &actual));
191 EXPECT_EQ("val2", actual);
192 EXPECT_TRUE(prefs->GetString(kPref2, &actual));
193 EXPECT_EQ("val4", actual);
194 }
195
196 // Tests uninstalling an extension that was winning for all preferences.
197 TEST(ExtensionPrefStoreTest, UninstallExtensionFromTop) {
198 TestExtensionPrefStore eps;
199 eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1"));
200 eps.InstallExtensionPref("id2", kPref1, Value::CreateStringValue("val2"));
201 eps.InstallExtensionPref("id3", kPref1, Value::CreateStringValue("val3"));
202
203 eps.InstallExtensionPref("id1", kPref2, Value::CreateStringValue("val4"));
204 eps.InstallExtensionPref("id3", kPref2, Value::CreateStringValue("val5"));
205
206 eps.UninstallExtension("id3");
207
208 TestExtensionPrefStore::ExtensionIDs ids;
209 eps.GetExtensionIDList(&ids);
210 EXPECT_EQ(2u, ids.size());
211 EXPECT_EQ("id2", ids[0]);
212 EXPECT_EQ("id1", ids[1]);
213
214 DictionaryValue* prefs = eps.prefs();
215 ASSERT_EQ(2u, prefs->size());
216 std::string actual;
217 EXPECT_TRUE(prefs->GetString(kPref1, &actual));
218 EXPECT_EQ("val2", actual);
219 EXPECT_TRUE(prefs->GetString(kPref2, &actual));
220 EXPECT_EQ("val4", actual);
221 }
222
223 // Tests uninstalling an extension that was winning for only some preferences.
224 TEST(ExtensionPrefStoreTest, UninstallExtensionFromMiddle) {
225 TestExtensionPrefStore eps;
226 eps.InstallExtensionPref("id1", kPref1, Value::CreateStringValue("val1"));
227 eps.InstallExtensionPref("id2", kPref1, Value::CreateStringValue("val2"));
228 eps.InstallExtensionPref("id3", kPref1, Value::CreateStringValue("val3"));
229
230 eps.InstallExtensionPref("id1", kPref2, Value::CreateStringValue("val4"));
231 eps.InstallExtensionPref("id2", kPref2, Value::CreateStringValue("val5"));
232
233 eps.InstallExtensionPref("id1", kPref3, Value::CreateStringValue("val6"));
234
235 eps.InstallExtensionPref("id2", kPref4, Value::CreateStringValue("val7"));
236
237 eps.UninstallExtension("id2");
238
239 TestExtensionPrefStore::ExtensionIDs ids;
240 eps.GetExtensionIDList(&ids);
241 EXPECT_EQ(2u, ids.size());
242 EXPECT_EQ("id3", ids[0]);
243 EXPECT_EQ("id1", ids[1]);
244
245 DictionaryValue* prefs = eps.prefs();
246 ASSERT_EQ(3u, prefs->size());
247 std::string actual;
248 EXPECT_TRUE(prefs->GetString(kPref1, &actual));
249 EXPECT_EQ("val3", actual);
250 EXPECT_TRUE(prefs->GetString(kPref2, &actual));
251 EXPECT_EQ("val4", actual);
252 EXPECT_TRUE(prefs->GetString(kPref3, &actual));
253 EXPECT_EQ("val6", actual);
254 EXPECT_FALSE(prefs->GetString(kPref4, &actual));
255 }
256
257 TEST(ExtensionPrefStoreTest, NotifyWhenNeeded) {
258 TestExtensionPrefStore eps;
259
260 // The PrefValueStore takes ownership of the PrefStores; in this case, that's
261 // only an ExtensionPrefStore.
262 PrefValueStore* value_store = new PrefValueStore(NULL, &eps, NULL, NULL);
263 MockPrefService* pref_service = new MockPrefService(value_store);
264 eps.SetPrefService(pref_service);
265 pref_service->RegisterStringPref(kPref1, std::string());
266
267 eps.InstallExtensionPref("abc", kPref1,
268 Value::CreateStringValue("https://www.chromium.org"));
269 EXPECT_TRUE(pref_service->fired_observers_);
270 eps.InstallExtensionPref("abc", kPref1,
271 Value::CreateStringValue("https://www.chromium.org"));
272 EXPECT_FALSE(pref_service->fired_observers_);
273 eps.InstallExtensionPref("abc", kPref1,
274 Value::CreateStringValue("chrome://newtab"));
275 EXPECT_TRUE(pref_service->fired_observers_);
276
277 eps.UninstallExtension("abc");
278 EXPECT_TRUE(pref_service->fired_observers_);
279 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_pref_store.cc ('k') | chrome/browser/extensions/extensions_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698