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

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: Nits 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/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace {
15 const char kExt1[] = "ext1";
16 const char kExt2[] = "ext2";
17 const char kExt3[] = "ext3";
18
19 const char kPref1[] = "path1.subpath";
20 const char kPref2[] = "path2";
21 const char kPref3[] = "path3";
22 const char kPref4[] = "path4";
23 } // namespace
24
25 static Value* createVal(const char* str) {
26 return Value::CreateStringValue(str);
danno 2011/01/14 13:05:09 nit: probably should be in an anon namespace, too?
battre 2011/01/20 17:59:29 Style guide allows both versions (note that the fu
27 }
28
29 static base::Time createTime(int64 t) {
danno 2011/01/14 13:05:09 same here? Also capitalization.
battre 2011/01/20 17:59:29 Done.
30 return base::Time::FromInternalValue(10);
31 }
32
33 template <typename BASECLASS>
34 class ExtensionPrefValueMapTestBase : public BASECLASS {
35 public:
36 // Returns an empty string if the key is not set.
37 std::string GetValue(const char * key, bool incognito) const {
38 const Value *value = epvm_.GetEffectivePrefValue(key, incognito);
39 std::string string_value = "";
40 if (value)
41 value->GetAsString(&string_value);
42 return string_value;
43 }
44
45 protected:
46 ExtensionPrefValueMap epvm_;
47 };
48
49 class ExtensionPrefValueMapTest
50 : public ExtensionPrefValueMapTestBase<testing::Test> {
51 };
52
53 // A gmock-ified implementation of PrefStore::Observer.
54 class ExtensionPrefValueMapObserverMock
55 : public ExtensionPrefValueMap::Observer {
56 public:
57 ExtensionPrefValueMapObserverMock() {}
58 virtual ~ExtensionPrefValueMapObserverMock() {}
59
60 MOCK_METHOD1(OnPrefValueChanged, void(const std::string&));
61 MOCK_METHOD0(OnInitializationCompleted, void());
62 MOCK_METHOD0(OnExtensionPrefValueMapDestruction, void());
63
64 private:
65 DISALLOW_COPY_AND_ASSIGN(ExtensionPrefValueMapObserverMock);
66 };
67
68 TEST_F(ExtensionPrefValueMapTest, SetAndGetPrefValue) {
69 epvm_.RegisterExtension(kExt1, createTime(10), true);
70 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
71 EXPECT_EQ("val1", GetValue(kPref1, false));
72 };
73
74 TEST_F(ExtensionPrefValueMapTest, GetNotSetPrefValue) {
75 epvm_.RegisterExtension(kExt1, createTime(10), true);
76 EXPECT_EQ("", GetValue(kPref1, false));
77 };
78
79 // Make sure the last-installed extension wins for each preference.
80 TEST_F(ExtensionPrefValueMapTest, Override) {
81 epvm_.RegisterExtension(kExt1, createTime(10), true);
82 epvm_.RegisterExtension(kExt2, createTime(20), true);
83 epvm_.RegisterExtension(kExt3, createTime(30), true);
84
85 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
86 epvm_.SetExtensionPref(kExt2, kPref1, false, createVal("val2"));
87 epvm_.SetExtensionPref(kExt3, kPref1, false, createVal("val3"));
88
89 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val4"));
90 epvm_.SetExtensionPref(kExt2, kPref2, false, createVal("val5"));
91
92 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val6"));
93 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val7"));
94 epvm_.SetExtensionPref(kExt1, kPref3, false, createVal("val8"));
95
96 EXPECT_EQ("val3", GetValue(kPref1, false));
97 EXPECT_EQ("val5", GetValue(kPref2, false));
98 EXPECT_EQ("val8", GetValue(kPref3, false));
99 }
100
101 TEST_F(ExtensionPrefValueMapTest, SetAndGetPrefValueIncognito) {
102 epvm_.RegisterExtension(kExt1, createTime(10), true);
103 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
104 EXPECT_EQ("val1", GetValue(kPref1, true));
105 }
106
107 TEST_F(ExtensionPrefValueMapTest, UninstallOnlyExtension) {
108 epvm_.RegisterExtension(kExt1, createTime(10), true);
109 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
110 epvm_.UnregisterExtension(kExt1);
111
112 EXPECT_EQ("", GetValue(kPref1, false));
113 }
114
115 // Tests uninstalling an extension that wasn't winning for any preferences.
116 TEST_F(ExtensionPrefValueMapTest, UninstallIrrelevantExtension) {
117 epvm_.RegisterExtension(kExt1, createTime(10), true);
118 epvm_.RegisterExtension(kExt2, createTime(10), true);
119
120 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
121 epvm_.SetExtensionPref(kExt2, kPref1, false, createVal("val2"));
122
123 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val3"));
124 epvm_.SetExtensionPref(kExt2, kPref2, false, createVal("val4"));
125
126 epvm_.UnregisterExtension(kExt1);
127
128 EXPECT_EQ("val2", GetValue(kPref1, false));
129 EXPECT_EQ("val4", GetValue(kPref2, false));
130 }
131
132 // Tests uninstalling an extension that was winning for all preferences.
133 TEST_F(ExtensionPrefValueMapTest, UninstallExtensionFromTop) {
134 epvm_.RegisterExtension(kExt1, createTime(10), true);
135 epvm_.RegisterExtension(kExt2, createTime(20), true);
136 epvm_.RegisterExtension(kExt3, createTime(30), true);
137
138 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
139 epvm_.SetExtensionPref(kExt2, kPref1, false, createVal("val2"));
140 epvm_.SetExtensionPref(kExt3, kPref1, false, createVal("val3"));
141
142 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val4"));
143 epvm_.SetExtensionPref(kExt3, kPref2, false, createVal("val5"));
144
145 epvm_.UnregisterExtension(kExt3);
146
147 EXPECT_EQ("val2", GetValue(kPref1, false));
148 EXPECT_EQ("val4", GetValue(kPref2, false));
149 }
150
151 // Tests uninstalling an extension that was winning for only some preferences.
152 TEST_F(ExtensionPrefValueMapTest, UninstallExtensionFromMiddle) {
153 epvm_.RegisterExtension(kExt1, createTime(10), true);
154 epvm_.RegisterExtension(kExt2, createTime(20), true);
155 epvm_.RegisterExtension(kExt3, createTime(30), true);
156
157 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
158 epvm_.SetExtensionPref(kExt2, kPref1, false, createVal("val2"));
159 epvm_.SetExtensionPref(kExt3, kPref1, false, createVal("val3"));
160
161 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val4"));
162 epvm_.SetExtensionPref(kExt2, kPref2, false, createVal("val5"));
163
164 epvm_.SetExtensionPref(kExt1, kPref3, false, createVal("val6"));
165
166 epvm_.SetExtensionPref(kExt2, kPref4, false, createVal("val7"));
167
168 epvm_.UnregisterExtension(kExt2);
169
170 EXPECT_EQ("val3", GetValue(kPref1, false));
171 EXPECT_EQ("val4", GetValue(kPref2, false));
172 EXPECT_EQ("val6", GetValue(kPref3, false));
173 EXPECT_EQ("", GetValue(kPref4, false));
174 }
175
176 // Tests triggering of notifications to registered observers.
177 TEST_F(ExtensionPrefValueMapTest, NotifyWhenNeeded) {
178 using testing::_;
179 using testing::Mock;
180 using testing::StrEq;
181
182 epvm_.RegisterExtension(kExt1, createTime(10), true);
183
184 ExtensionPrefValueMapObserverMock observer;
185 epvm_.AddObserver(&observer);
186
187 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
188 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
189 Mock::VerifyAndClearExpectations(&observer);
190
191 // Write the same value again.
192 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))).Times(0);
193 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
194 Mock::VerifyAndClearExpectations(&observer);
195
196 // Override incognito value.
197 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
198 epvm_.SetExtensionPref(kExt1, kPref1, true, createVal("val2"));
199 Mock::VerifyAndClearExpectations(&observer);
200
201 // Override non-incognito value.
202 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
203 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val3"));
204 Mock::VerifyAndClearExpectations(&observer);
205
206 // Disable.
207 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
208 epvm_.SetExtensionState(kExt1, false);
209 Mock::VerifyAndClearExpectations(&observer);
210
211 // Enable.
212 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
213 epvm_.SetExtensionState(kExt1, true);
214 Mock::VerifyAndClearExpectations(&observer);
215
216 // Uninstall
217 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1)));
218 epvm_.UnregisterExtension(kExt1);
219 Mock::VerifyAndClearExpectations(&observer);
220
221 epvm_.RemoveObserver(&observer);
222
223 // Write new value --> no notification after removing observer.
224 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))).Times(0);
225 epvm_.RegisterExtension(kExt1, createTime(10), true);
226 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val4"));
227 Mock::VerifyAndClearExpectations(&observer);
228 }
229
230 // Tests disabling an extension.
231 TEST_F(ExtensionPrefValueMapTest, DisableExt) {
232 epvm_.RegisterExtension(kExt1, createTime(10), true);
233
234 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
235 epvm_.SetExtensionState(kExt1, false);
236 EXPECT_EQ("", GetValue(kPref1, false));
237 }
238
239 // Tests disabling and reenabling an extension.
240 TEST_F(ExtensionPrefValueMapTest, ReenableExt) {
241 epvm_.RegisterExtension(kExt1, createTime(10), true);
242
243 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1"));
244 epvm_.SetExtensionState(kExt1, false);
245 epvm_.SetExtensionState(kExt1, true);
246 EXPECT_EQ("val1", GetValue(kPref1, false));
247 }
248
249 struct OverrideIncognitoTestCase {
250 OverrideIncognitoTestCase(int val_ext1_regular,
251 int val_ext1_incognito,
252 int val_ext2_regular,
253 int val_ext2_incognito,
254 int effective_value_regular,
255 int effective_value_incognito)
256 : val_ext1_regular_(val_ext1_regular),
257 val_ext1_incognito_(val_ext1_incognito),
258 val_ext2_regular_(val_ext2_regular),
259 val_ext2_incognito_(val_ext2_incognito),
260 effective_value_regular_(effective_value_regular),
261 effective_value_incognito_(effective_value_incognito) {}
262
263 int val_ext1_regular_; // pref value of extension 1
264 int val_ext1_incognito_; // pref value of extension 1 incognito
265 int val_ext2_regular_; // pref value of extension 2
266 int val_ext2_incognito_; // pref value of extension 2 incognito
267 int effective_value_regular_; // desired winner regular
268 int effective_value_incognito_; // desired winner incognito
269 };
270
271 class ExtensionPrefValueMapTestIncognitoTests
272 : public ExtensionPrefValueMapTestBase<
273 testing::TestWithParam<OverrideIncognitoTestCase> > {
274 };
275
276 TEST_P(ExtensionPrefValueMapTestIncognitoTests, OverrideIncognito) {
277 OverrideIncognitoTestCase test = GetParam();
278 const char* strings[] = {
279 "undefined",
280 "val1",
281 "val2",
282 "val3",
283 "val4"
284 };
285
286 epvm_.RegisterExtension(kExt1, createTime(10), true);
287 epvm_.RegisterExtension(kExt2, createTime(20), true);
288 if (test.val_ext1_regular_) {
289 epvm_.SetExtensionPref(kExt1, kPref1, false,
290 createVal(strings[test.val_ext1_regular_]));
291 }
292 if (test.val_ext1_incognito_) {
293 epvm_.SetExtensionPref(kExt1, kPref1, true,
294 createVal(strings[test.val_ext1_incognito_]));
295 }
296 if (test.val_ext2_regular_) {
297 epvm_.SetExtensionPref(kExt2, kPref1, false,
298 createVal(strings[test.val_ext2_regular_]));
299 }
300 if (test.val_ext2_incognito_) {
301 epvm_.SetExtensionPref(kExt2, kPref1, true,
302 createVal(strings[test.val_ext2_incognito_]));
303 }
304 std::string actual;
305 EXPECT_EQ(strings[test.effective_value_regular_], GetValue(kPref1, false));
306 EXPECT_EQ(strings[test.effective_value_incognito_], GetValue(kPref1, true));
307 epvm_.UnregisterExtension(kExt1);
308 epvm_.UnregisterExtension(kExt2);
309 }
310
311 INSTANTIATE_TEST_CASE_P(
312 ExtensionPrefValueMapTestIncognitoTestsInstance,
313 ExtensionPrefValueMapTestIncognitoTests,
314 testing::Values(
315 // e.g. (1, 0, 0, 4, 1, 4), means:
316 // ext1 regular is set to "val1", ext2 incognito is set to "val4"
317 // --> the winning regular value is "val1", the winning incognito
318 // value is "val4".
319 OverrideIncognitoTestCase(1, 0, 0, 0, 1, 1),
320 OverrideIncognitoTestCase(1, 2, 0, 0, 1, 2),
321 OverrideIncognitoTestCase(1, 0, 3, 0, 3, 3),
322 OverrideIncognitoTestCase(1, 0, 0, 4, 1, 4),
323 // The last 3 in the following line is intentional!
324 OverrideIncognitoTestCase(1, 2, 3, 0, 3, 3),
325 OverrideIncognitoTestCase(1, 2, 0, 4, 1, 4),
326 OverrideIncognitoTestCase(1, 2, 3, 4, 3, 4)));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698