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

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

Issue 5915004: Introduce incognito preference settings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Continued work from last year 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 "base/basictypes.h"
6 #include "base/ref_counted.h"
7 #include "base/scoped_ptr.h"
8 #include "base/values.h"
9 #include "chrome/browser/extensions/extension_pref_value_map.h"
10 #include "chrome/common/pref_store_observer_mock.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace {
14 const char kExt1[] = "ext1";
15 const char kExt2[] = "ext2";
16 const char kExt3[] = "ext3";
17
18 const char kPref1[] = "path1.subpath";
19 const char kPref2[] = "path2";
20 const char kPref3[] = "path3";
21 const char kPref4[] = "path4";
22 } // namespace
23
24 static Value* createVal(const char* str) {
25 return Value::CreateStringValue(str);
26 }
27
28 template <typename BASECLASS>
29 class ExtensionPrefStoreTestBase : public BASECLASS {
Mattias Nissler (ping if slow) 2011/01/05 12:08:07 I think the classes here should be named Extension
battre 2011/01/05 20:23:08 Done.
30 public:
31 // Returns an empty string if the key is not set.
32 std::string GetValue(const char * key, bool incognito) const {
33 const Value *value = epvm_.GetEffectivePrefValue(key, incognito);
34 std::string string_value = "";
35 if (value)
36 value->GetAsString(&string_value);
37 return string_value;
38 }
39
40 static base::Time createTime(long t) {
Mattias Nissler (ping if slow) 2011/01/05 12:08:07 can you sync createVal and createTime to the effec
battre 2011/01/05 20:23:08 Done.
41 return base::Time::FromInternalValue(10);
42 }
43
44 protected:
45 ExtensionPrefValueMap epvm_;
46 };
47
48 class ExtensionPrefStoreTest
49 : public ExtensionPrefStoreTestBase<testing::Test> {
50 };
51
52 template<typename BASECLASS>
53 class ExtensionPrefStoreTestParameterized
Mattias Nissler (ping if slow) 2011/01/05 12:08:07 Seems this class definition is not really helpful,
battre 2011/01/05 20:23:08 Done.
54 : public ExtensionPrefStoreTestBase<testing::TestWithParam<BASECLASS> > {
55 };
56
57 TEST_F(ExtensionPrefStoreTest, SetAndGetPrefValue) {
58 epvm_.RegisterExtension(kExt1, createTime(10), true);
59 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
60 EXPECT_EQ("val1", GetValue(kPref1, false));
61 };
62
63 TEST_F(ExtensionPrefStoreTest, GetNotSetPrefValue) {
64 epvm_.RegisterExtension(kExt1, createTime(10), true);
65 EXPECT_EQ("", GetValue(kPref1, false));
66 };
67
68 // Make sure the last-installed extension wins for each preference.
69 TEST_F(ExtensionPrefStoreTest, Overwrite) {
Mattias Nissler (ping if slow) 2011/01/05 12:08:07 nit: name this Override
battre 2011/01/05 20:23:08 Done.
70 epvm_.RegisterExtension(kExt1, createTime(10), true);
71 epvm_.RegisterExtension(kExt2, createTime(20), true);
72 epvm_.RegisterExtension(kExt3, createTime(30), true);
73
74 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
75 epvm_.SetExtensionPref(kExt2, kPref1, false, createVal("val2"));
76 epvm_.SetExtensionPref(kExt3, kPref1, false, createVal("val3"));
77
78 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val4"));
79 epvm_.SetExtensionPref(kExt2, kPref2, false, createVal("val5"));
80
81 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val6"));
82 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val7"));
83 epvm_.SetExtensionPref(kExt1, kPref3, false, createVal("val8"));
84
85 EXPECT_EQ("val3", GetValue(kPref1, false));
86 EXPECT_EQ("val5", GetValue(kPref2, false));
87 EXPECT_EQ("val8", GetValue(kPref3, false));
88 }
89
90 TEST_F(ExtensionPrefStoreTest, SetAndGetPrefValueIncognito) {
91 epvm_.RegisterExtension(kExt1, createTime(10), true);
92 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
93 EXPECT_EQ("val1", GetValue(kPref1, true));
94 }
95
96 struct OverwriteIncognitoTestCase {
97 OverwriteIncognitoTestCase(int val_ext1_regular,
98 int val_ext1_incognito,
99 int val_ext2_regular,
100 int val_ext2_incognito,
101 int effective_value_regular,
102 int effective_value_incognito)
103 : val_ext1_regular_(val_ext1_regular),
104 val_ext1_incognito_(val_ext1_incognito),
105 val_ext2_regular_(val_ext2_regular),
106 val_ext2_incognito_(val_ext2_incognito),
107 effective_value_regular_(effective_value_regular),
108 effective_value_incognito_(effective_value_incognito) {}
109
110 int val_ext1_regular_; // pref value of extension 1
111 int val_ext1_incognito_; // pref value of extension 1 incognito
112 int val_ext2_regular_; // pref value of extension 2
113 int val_ext2_incognito_; // pref value of extension 2 incognito
114 int effective_value_regular_; // desired winner regular
115 int effective_value_incognito_; // desired winner incognito
116 };
117
118 class ExtensionPrefStoreTestIncognitoTests
Mattias Nissler (ping if slow) 2011/01/05 12:08:07 Can you move this test fixture down below all the
battre 2011/01/05 20:23:08 Done.
119 : public ExtensionPrefStoreTestParameterized<OverwriteIncognitoTestCase> {
120 };
121
122 TEST_P(ExtensionPrefStoreTestIncognitoTests, OverwriteIncognito) {
123 OverwriteIncognitoTestCase test = GetParam();
124 const char* strings[] = {
125 "undefined",
126 "val1",
127 "val2",
128 "val3",
129 "val4"
130 };
131
132 epvm_.RegisterExtension(kExt1, createTime(10), true);
133 epvm_.RegisterExtension(kExt2, createTime(20), true);
134 if (test.val_ext1_regular_) {
135 epvm_.SetExtensionPref(kExt1, kPref1, false,
136 createVal(strings[test.val_ext1_regular_]));
137 }
138 if (test.val_ext1_incognito_) {
139 epvm_.SetExtensionPref(kExt1, kPref1, true,
140 createVal(strings[test.val_ext1_incognito_]));
141 }
142 if (test.val_ext2_regular_) {
143 epvm_.SetExtensionPref(kExt2, kPref1, false,
144 createVal(strings[test.val_ext2_regular_]));
145 }
146 if (test.val_ext2_incognito_) {
147 epvm_.SetExtensionPref(kExt2, kPref1, true,
148 createVal(strings[test.val_ext2_incognito_]));
149 }
150 std::string actual;
151 EXPECT_EQ(strings[test.effective_value_regular_], GetValue(kPref1, false));
152 EXPECT_EQ(strings[test.effective_value_incognito_], GetValue(kPref1, true));
153 epvm_.UnregisterExtension(kExt1);
154 epvm_.UnregisterExtension(kExt2);
155 }
156
157 INSTANTIATE_TEST_CASE_P(
158 ExtensionPrefStoreTestIncognitoTestsInstance,
159 ExtensionPrefStoreTestIncognitoTests,
160 testing::Values(
161 // e.g. (1, 0, 0, 4, 1, 4), means:
162 // ext1 regular is set to "val1", ext2 incognito is set to "val4"
163 // --> the winning regular value is "val1", the winning incognito
164 // value is "val4".
165 OverwriteIncognitoTestCase(1, 0, 0, 0, 1, 1),
166 OverwriteIncognitoTestCase(1, 2, 0, 0, 1, 2),
167 OverwriteIncognitoTestCase(1, 0, 3, 0, 3, 3),
168 OverwriteIncognitoTestCase(1, 0, 0, 4, 1, 4),
169 // The last 3 in the following line is intentional!
170 OverwriteIncognitoTestCase(1, 2, 3, 0, 3, 3),
171 OverwriteIncognitoTestCase(1, 2, 0, 4, 1, 4),
172 OverwriteIncognitoTestCase(1, 2, 3, 4, 3, 4)
173 ));
174
175 // Make sure the last-installed extension wins even if other extensions set
176 // the same or different preferences later.
177 TEST_F(ExtensionPrefStoreTest, OverrideInterleaved) {
Mattias Nissler (ping if slow) 2011/01/05 12:08:07 Does this really give us additional coverage over
battre 2011/01/05 20:23:08 This is mostly legacy from the old unit tests. It
178 epvm_.RegisterExtension(kExt1, createTime(10), true);
179 epvm_.RegisterExtension(kExt2, createTime(20), true);
180 epvm_.RegisterExtension(kExt3, createTime(30), true);
181
182 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
183 epvm_.SetExtensionPref(kExt2, kPref2, false, createVal("val2"));
184 epvm_.SetExtensionPref(kExt3, kPref3, false, createVal("val3"));
185
186 epvm_.SetExtensionPref(kExt3, kPref3, false, createVal("val4"));
187 epvm_.SetExtensionPref(kExt2, kPref3, false, createVal("val5"));
188 epvm_.SetExtensionPref(kExt1, kPref3, false, createVal("val6"));
189
190 epvm_.SetExtensionPref(kExt3, kPref1, false, createVal("val7"));
191
192 EXPECT_EQ("val7", GetValue(kPref1, false));
193 EXPECT_EQ("val2", GetValue(kPref2, false));
194 EXPECT_EQ("val4", GetValue(kPref3, false));
195 EXPECT_EQ("val7", GetValue(kPref1, true));
196 EXPECT_EQ("val2", GetValue(kPref2, true));
197 EXPECT_EQ("val4", GetValue(kPref3, true));
198 }
199
200 TEST_F(ExtensionPrefStoreTest, UninstallOnlyExtension) {
201 epvm_.RegisterExtension(kExt1, createTime(10), true);
202 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
203 epvm_.UnregisterExtension(kExt1);
204
205 EXPECT_EQ("", GetValue(kPref1, false));
206 }
207
208 // Tests uninstalling an extension that wasn't winning for any preferences.
209 TEST_F(ExtensionPrefStoreTest, UninstallIrrelevantExtension) {
210 epvm_.RegisterExtension(kExt1, createTime(10), true);
211 epvm_.RegisterExtension(kExt2, createTime(10), true);
212
213 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
214 epvm_.SetExtensionPref(kExt2, kPref1, false, createVal("val2"));
215
216 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val3"));
217 epvm_.SetExtensionPref(kExt2, kPref2, false, createVal("val4"));
218
219 epvm_.UnregisterExtension(kExt1);
220
221 EXPECT_EQ("val2", GetValue(kPref1, false));
222 EXPECT_EQ("val4", GetValue(kPref2, false));
223 }
224
225 // Tests uninstalling an extension that was winning for all preferences.
226 TEST_F(ExtensionPrefStoreTest, UninstallExtensionFromTop) {
227 epvm_.RegisterExtension(kExt1, createTime(10), true);
228 epvm_.RegisterExtension(kExt2, createTime(20), true);
229 epvm_.RegisterExtension(kExt3, createTime(30), true);
230
231 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
232 epvm_.SetExtensionPref(kExt2, kPref1, false, createVal("val2"));
233 epvm_.SetExtensionPref(kExt3, kPref1, false, createVal("val3"));
234
235 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val4"));
236 epvm_.SetExtensionPref(kExt3, kPref2, false, createVal("val5"));
237
238 epvm_.UnregisterExtension(kExt3);
239
240 EXPECT_EQ("val2", GetValue(kPref1, false));
241 EXPECT_EQ("val4", GetValue(kPref2, false));
242 }
243
244 // Tests uninstalling an extension that was winning for only some preferences.
245 TEST_F(ExtensionPrefStoreTest, UninstallExtensionFromMiddle) {
246 epvm_.RegisterExtension(kExt1, createTime(10), true);
247 epvm_.RegisterExtension(kExt2, createTime(20), true);
248 epvm_.RegisterExtension(kExt3, createTime(30), true);
249
250 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
251 epvm_.SetExtensionPref(kExt2, kPref1, false, createVal("val2"));
252 epvm_.SetExtensionPref(kExt3, kPref1, false, createVal("val3"));
253
254 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val4"));
255 epvm_.SetExtensionPref(kExt2, kPref2, false, createVal("val5"));
256
257 epvm_.SetExtensionPref(kExt1, kPref3, false, createVal("val6"));
258
259 epvm_.SetExtensionPref(kExt2, kPref4, false, createVal("val7"));
260
261 epvm_.UnregisterExtension(kExt2);
262
263 EXPECT_EQ("val3", GetValue(kPref1, false));
264 EXPECT_EQ("val4", GetValue(kPref2, false));
265 EXPECT_EQ("val6", GetValue(kPref3, false));
266 EXPECT_EQ("", GetValue(kPref4, false));
267 }
268
269 // Tests triggering of notifications to registered observers.
270 TEST_F(ExtensionPrefStoreTest, NotifyWhenNeeded) {
271 using testing::_;
272 using testing::Mock;
273 using testing::StrEq;
274
275 epvm_.RegisterExtension(kExt1, createTime(10), true);
276
277 PrefStoreObserverMock observer;
278 epvm_.AddObserver(&observer);
279
280 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
281 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
282 Mock::VerifyAndClearExpectations(&observer);
283
284 // Write the same value again
Mattias Nissler (ping if slow) 2011/01/05 12:08:07 Comment missing period (also below).
battre 2011/01/05 20:23:08 Done.
285 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))).Times(0);
286 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
287 Mock::VerifyAndClearExpectations(&observer);
288
289 // Overwrite incognito value
Mattias Nissler (ping if slow) 2011/01/05 12:08:07 nit: I think you should decide on either overwrite
battre 2011/01/05 20:23:08 Done.
290 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
291 epvm_.SetExtensionPref(kExt1, kPref1, true, createVal("val2"));
292 Mock::VerifyAndClearExpectations(&observer);
293
294 // Overwrite non-incognito value
295 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
296 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val3"));
297 Mock::VerifyAndClearExpectations(&observer);
298
299 // Disable
300 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
301 epvm_.UpdateExtensionsState(kExt1, false);
302 Mock::VerifyAndClearExpectations(&observer);
303
304 // Enable
305 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
306 epvm_.UpdateExtensionsState(kExt1, true);
307 Mock::VerifyAndClearExpectations(&observer);
308
309 // Uninstall
310 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
311 epvm_.UnregisterExtension(kExt1);
312 Mock::VerifyAndClearExpectations(&observer);
313
314 epvm_.RemoveObserver(&observer);
315
316 // Write new value --> no notification ofter removing observer
Mattias Nissler (ping if slow) 2011/01/05 12:08:07 s/ofter/after/
battre 2011/01/05 20:23:08 Done.
317 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))).Times(0);
318 epvm_.RegisterExtension(kExt1, createTime(10), true);
319 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val4"));
320 Mock::VerifyAndClearExpectations(&observer);
321 }
322
323 // Tests disabling an extension
324 TEST_F(ExtensionPrefStoreTest, DisableExt) {
325 epvm_.RegisterExtension(kExt1, createTime(10), true);
326
327 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
328 epvm_.UpdateExtensionsState(kExt1, false);
329 EXPECT_EQ("", GetValue(kPref1, false));
330 }
331
332 // Tests disabling and reenabling an extension
333 TEST_F(ExtensionPrefStoreTest, ReenableExt) {
334 epvm_.RegisterExtension(kExt1, createTime(10), true);
335
336 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
337 epvm_.UpdateExtensionsState(kExt1, false);
338 epvm_.UpdateExtensionsState(kExt1, true);
339 EXPECT_EQ("val1", GetValue(kPref1, false));
340 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698