OLD | NEW |
---|---|
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "base/scoped_ptr.h" | 8 #include "base/scoped_ptr.h" |
9 #include "base/scoped_temp_dir.h" | 9 #include "base/scoped_temp_dir.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
11 #include "chrome/browser/extensions/extension_pref_store.h" | 11 #include "chrome/browser/extensions/extension_pref_store.h" |
12 #include "chrome/browser/prefs/default_pref_store.h" | 12 #include "chrome/browser/prefs/default_pref_store.h" |
13 #include "chrome/browser/prefs/pref_service.h" | 13 #include "chrome/browser/prefs/pref_service.h" |
14 #include "chrome/browser/prefs/pref_value_store.h" | 14 #include "chrome/browser/prefs/pref_value_store.h" |
15 #include "chrome/common/extensions/extension.h" | 15 #include "chrome/common/extensions/extension.h" |
16 #include "chrome/test/testing_pref_service.h" | 16 #include "chrome/test/testing_pref_service.h" |
17 #include "testing/gmock/include/gmock/gmock.h" | 17 #include "testing/gmock/include/gmock/gmock.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
19 | 19 |
20 namespace keys = extension_manifest_keys; | 20 namespace keys = extension_manifest_keys; |
21 | 21 |
22 namespace { | 22 namespace { |
23 | 23 |
24 class TestExtensionPrefStore; | |
25 class MockPrefService; | |
26 | |
27 // Use constants to avoid confusing std::map with hard-coded strings. | |
28 const char kPref1[] = "path1.subpath"; | |
29 const char kPref2[] = "path2"; | |
30 const char kPref3[] = "path3"; | |
31 const char kPref4[] = "path4"; | |
32 | |
33 class ExtensionPrefStoreTest : public testing::Test { | |
34 public: | |
35 ExtensionPrefStoreTest() | |
36 : ui_thread_(BrowserThread::UI, &message_loop_), eps_(NULL), dps_(NULL), | |
Bernhard Bauer
2010/11/12 18:16:57
Nit: every parameter on its own line.
battre (please use the other)
2010/11/12 19:07:09
Done.
| |
37 value_store_(NULL), pref_service_(NULL) {} | |
38 | |
39 protected: | |
40 // Sets up the test fixture. | |
Bernhard Bauer
2010/11/12 18:16:57
Nit: comment unnecessary.
battre (please use the other)
2010/11/12 19:07:09
Done.
| |
41 virtual void SetUp(); | |
42 | |
43 // Tears down the test fixture. | |
44 virtual void TearDown(); | |
45 | |
46 MessageLoop message_loop_; | |
47 BrowserThread ui_thread_; | |
48 TestExtensionPrefStore* eps_; // Owned by value_store_. | |
49 DefaultPrefStore* dps_; // Owned by value_store_. | |
50 DefaultPrefStore* ups_; // Owned by value_store_. | |
51 PrefValueStore* value_store_; // Owned by pref_service_. | |
52 scoped_ptr<MockPrefService> pref_service_; | |
53 }; | |
54 | |
55 // Mock PrefNotifier that allows the notifications to be tracked. | |
56 class MockPrefNotifier : public PrefNotifier { | |
57 public: | |
58 MockPrefNotifier(PrefService* service, PrefValueStore* value_store) | |
59 : PrefNotifier(service, value_store) {} | |
60 | |
61 virtual ~MockPrefNotifier() {} | |
62 | |
63 MOCK_METHOD1(FireObservers, void(const char* path)); | |
64 }; | |
65 | |
66 // Mock PrefService that allows the PrefNotifier to be injected. | |
67 class MockPrefService : public PrefService { | |
68 public: | |
69 explicit MockPrefService(PrefValueStore* pref_value_store) | |
70 : PrefService(pref_value_store) { | |
71 } | |
72 | |
73 void SetPrefNotifier(MockPrefNotifier* notifier) { | |
74 pref_notifier_.reset(notifier); | |
75 } | |
76 }; | |
77 | |
24 class TestExtensionPrefStore : public ExtensionPrefStore { | 78 class TestExtensionPrefStore : public ExtensionPrefStore { |
25 public: | 79 public: |
26 TestExtensionPrefStore() | 80 TestExtensionPrefStore() |
27 : ExtensionPrefStore(NULL, PrefNotifier::EXTENSION_STORE), | 81 : ExtensionPrefStore(NULL, PrefNotifier::EXTENSION_STORE), |
28 ext1(NULL), | 82 ext1(NULL), |
29 ext2(NULL), | 83 ext2(NULL), |
30 ext3(NULL), | 84 ext3(NULL), |
31 pref_service_(NULL) { | 85 pref_service_(NULL) { |
32 // Can't use ASSERT_TRUE here because a constructor can't return a value. | 86 // Can't use ASSERT_TRUE here because a constructor can't return a value. |
33 if (!temp_dir_.CreateUniqueTempDir()) { | 87 if (!temp_dir_.CreateUniqueTempDir()) { |
(...skipping 24 matching lines...) Expand all Loading... | |
58 typedef std::vector<std::string> ExtensionIDs; | 112 typedef std::vector<std::string> ExtensionIDs; |
59 void GetExtensionIDList(ExtensionIDs* result) { | 113 void GetExtensionIDList(ExtensionIDs* result) { |
60 GetExtensionIDs(result); | 114 GetExtensionIDs(result); |
61 } | 115 } |
62 | 116 |
63 void SetPrefService(PrefService* pref_service) { | 117 void SetPrefService(PrefService* pref_service) { |
64 pref_service_ = pref_service; | 118 pref_service_ = pref_service; |
65 } | 119 } |
66 | 120 |
67 // Overridden from ExtensionPrefStore. | 121 // Overridden from ExtensionPrefStore. |
68 virtual PrefService* GetPrefService() { | 122 virtual PrefService* GetPrefService() const { |
69 return pref_service_; | 123 return pref_service_; |
70 } | 124 } |
71 | 125 |
126 MOCK_METHOD0(SchedulePersist, void()); | |
127 | |
72 // Weak references, for convenience. | 128 // Weak references, for convenience. |
73 Extension* ext1; | 129 Extension* ext1; |
74 Extension* ext2; | 130 Extension* ext2; |
75 Extension* ext3; | 131 Extension* ext3; |
76 | 132 |
77 private: | 133 private: |
78 ScopedTempDir temp_dir_; | 134 ScopedTempDir temp_dir_; |
79 | 135 |
80 scoped_refptr<Extension> ext1_scoped_; | 136 scoped_refptr<Extension> ext1_scoped_; |
81 scoped_refptr<Extension> ext2_scoped_; | 137 scoped_refptr<Extension> ext2_scoped_; |
82 scoped_refptr<Extension> ext3_scoped_; | 138 scoped_refptr<Extension> ext3_scoped_; |
83 | 139 |
84 // Weak reference. | 140 // Weak reference. |
85 PrefService* pref_service_; | 141 PrefService* pref_service_; |
86 }; | 142 }; |
87 | 143 |
88 // Mock PrefNotifier that allows the notifications to be tracked. | |
89 class MockPrefNotifier : public PrefNotifier { | |
90 public: | |
91 MockPrefNotifier(PrefService* service, PrefValueStore* value_store) | |
92 : PrefNotifier(service, value_store) {} | |
93 | 144 |
94 virtual ~MockPrefNotifier() {} | 145 void ExtensionPrefStoreTest::SetUp() { |
146 testing::Test::SetUp(); | |
147 // NiceMock because only TestPersistence counts calls of mock methods. | |
148 eps_ = new testing::NiceMock<TestExtensionPrefStore>; | |
149 dps_ = new DefaultPrefStore; | |
150 ups_ = new DefaultPrefStore; | |
151 value_store_ = new TestingPrefService::TestingPrefValueStore( | |
152 NULL, eps_, NULL, ups_, NULL, dps_); | |
Bernhard Bauer
2010/11/12 18:16:57
I wouldn't be too opposed to keeping all parameter
battre (please use the other)
2010/11/12 19:07:09
Done.
| |
153 pref_service_.reset(new MockPrefService(value_store_)); | |
154 eps_->SetPrefService(pref_service_.get()); | |
95 | 155 |
96 MOCK_METHOD1(FireObservers, void(const char* path)); | 156 pref_service_->RegisterStringPref(kPref1, "default pref 1"); |
97 }; | 157 pref_service_->RegisterStringPref(kPref2, "default pref 2"); |
158 pref_service_->RegisterStringPref(kPref3, "default pref 3"); | |
159 pref_service_->RegisterStringPref(kPref4, "default pref 4"); | |
160 } | |
98 | 161 |
99 // Mock PrefService that allows the PrefNotifier to be injected. | 162 void ExtensionPrefStoreTest::TearDown() { |
100 class MockPrefService : public PrefService { | 163 testing::Test::SetUp(); |
101 public: | 164 pref_service_.reset(NULL); // Frees eps_, dps_, value_store_. |
102 explicit MockPrefService(PrefValueStore* pref_value_store) | 165 } |
103 : PrefService(pref_value_store) { | |
104 } | |
105 | |
106 void SetPrefNotifier(MockPrefNotifier* notifier) { | |
107 pref_notifier_.reset(notifier); | |
108 } | |
109 }; | |
110 | |
111 // Use constants to avoid confusing std::map with hard-coded strings. | |
112 const char kPref1[] = "path1.subpath"; | |
113 const char kPref2[] = "path2"; | |
114 const char kPref3[] = "path3"; | |
115 const char kPref4[] = "path4"; | |
116 | 166 |
117 } // namespace | 167 } // namespace |
118 | 168 |
119 TEST(ExtensionPrefStoreTest, InstallOneExtension) { | 169 TEST_F(ExtensionPrefStoreTest, ExtensionPrefs) { |
120 TestExtensionPrefStore eps; | 170 scoped_ptr<DictionaryValue> dict( |
171 ExtensionPrefStore::ExtensionPrefs::Create("ext1")); | |
172 scoped_ptr<ExtensionPrefStore::ExtensionPrefs> ep( | |
173 new ExtensionPrefStore::ExtensionPrefs(dict.release())); | |
174 EXPECT_EQ("ext1", ep->extension_id()); | |
175 EXPECT_EQ(0u, ep->pref_values()->size()); | |
176 | |
177 // test set/get | |
178 ep->set("key", Value::CreateStringValue("value")); | |
179 std::string value; | |
180 ASSERT_TRUE(ep->get("key") != NULL); | |
181 ASSERT_TRUE(ep->get("key")->GetAsString(&value)); | |
182 EXPECT_EQ("value", value); | |
183 ASSERT_EQ(1u, ep->pref_values()->size()); | |
184 EXPECT_EQ(NULL, ep->get("non_existing_key")); | |
185 | |
186 // test delete | |
187 ep->set("key", NULL); | |
188 ASSERT_EQ(NULL, ep->get("key")); | |
189 ASSERT_EQ(0u, ep->pref_values()->size()); | |
190 } | |
191 | |
192 TEST_F(ExtensionPrefStoreTest, ExtensionStack) { | |
193 scoped_ptr<ListValue> extension_stack_list(new ListValue()); | |
194 | |
195 ExtensionPrefStore::ExtensionStack es; | |
196 EXPECT_FALSE(es.is_initialized()); | |
197 es.init(extension_stack_list.get()); | |
198 ASSERT_TRUE(es.is_initialized()); | |
199 EXPECT_EQ(0u, es.size()); | |
200 | |
201 ExtensionPrefStore::ExtensionPrefs tmp = es.CreateEntry("ext1"); | |
202 ASSERT_EQ(1u, es.size()); | |
203 EXPECT_EQ("ext1", tmp.extension_id()); | |
204 | |
205 // See whether we can retrieve it as well without triggering a CHECK | |
206 // exception. | |
207 ExtensionPrefStore::ExtensionPrefs ep1 = es.get(0); | |
208 | |
209 // Check whether it has been set up properly. | |
210 EXPECT_EQ("ext1", ep1.extension_id()); | |
211 | |
212 ExtensionPrefStore::ExtensionPrefs ep2 = es.CreateEntry("ext2"); | |
213 EXPECT_EQ("ext2", ep2.extension_id()); | |
214 | |
215 // Check that order is correct. | |
216 EXPECT_EQ("ext2", es.get(0).extension_id()); | |
217 EXPECT_EQ("ext1", es.get(1).extension_id()); | |
218 | |
219 // Check delete. | |
220 es.remove(0); | |
221 EXPECT_EQ(1u, es.size()); | |
222 EXPECT_EQ("ext1", es.get(0).extension_id()); | |
223 } | |
224 | |
225 TEST_F(ExtensionPrefStoreTest, InstallOneExtension) { | |
226 TestExtensionPrefStore& eps = *eps_; | |
121 ASSERT_TRUE(eps.ext1 != NULL); | 227 ASSERT_TRUE(eps.ext1 != NULL); |
122 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); | 228 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); |
123 | 229 |
124 TestExtensionPrefStore::ExtensionIDs ids; | 230 TestExtensionPrefStore::ExtensionIDs ids; |
125 eps.GetExtensionIDList(&ids); | 231 eps.GetExtensionIDList(&ids); |
126 EXPECT_EQ(1u, ids.size()); | 232 ASSERT_EQ(1u, ids.size()); |
127 EXPECT_EQ(eps.ext1->id(), ids[0]); | 233 EXPECT_EQ(eps.ext1->id(), ids[0]); |
128 | 234 |
129 DictionaryValue* prefs = eps.prefs(); | 235 DictionaryValue* prefs = eps.prefs(); |
130 ASSERT_EQ(1u, prefs->size()); | 236 ASSERT_EQ(1u, prefs->size()); |
131 std::string actual; | 237 std::string actual; |
132 ASSERT_TRUE(prefs->GetString(kPref1, &actual)); | 238 ASSERT_TRUE(prefs->GetString(kPref1, &actual)); |
133 EXPECT_EQ("val1", actual); | 239 EXPECT_EQ("val1", actual); |
134 } | 240 } |
135 | 241 |
136 // Make sure the last-installed extension wins. | 242 // Make sure the last-installed extension wins. |
137 TEST(ExtensionPrefStoreTest, InstallMultipleExtensions) { | 243 TEST_F(ExtensionPrefStoreTest, InstallMultipleExtensions) { |
138 TestExtensionPrefStore eps; | 244 TestExtensionPrefStore& eps = *eps_; |
139 ASSERT_TRUE(eps.ext1 != NULL); | 245 ASSERT_TRUE(eps.ext1 != NULL); |
140 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); | 246 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); |
141 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); | 247 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); |
142 eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3")); | 248 eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3")); |
143 | 249 |
144 TestExtensionPrefStore::ExtensionIDs ids; | 250 TestExtensionPrefStore::ExtensionIDs ids; |
145 eps.GetExtensionIDList(&ids); | 251 eps.GetExtensionIDList(&ids); |
146 EXPECT_EQ(3u, ids.size()); | 252 ASSERT_EQ(3u, ids.size()); |
147 EXPECT_EQ(eps.ext3->id(), ids[0]); | 253 EXPECT_EQ(eps.ext3->id(), ids[0]); |
148 EXPECT_EQ(eps.ext2->id(), ids[1]); | 254 EXPECT_EQ(eps.ext2->id(), ids[1]); |
149 EXPECT_EQ(eps.ext1->id(), ids[2]); | 255 EXPECT_EQ(eps.ext1->id(), ids[2]); |
150 | 256 |
151 DictionaryValue* prefs = eps.prefs(); | 257 DictionaryValue* prefs = eps.prefs(); |
152 ASSERT_EQ(1u, prefs->size()); | 258 ASSERT_EQ(1u, prefs->size()); |
153 std::string actual; | 259 std::string actual; |
154 ASSERT_TRUE(prefs->GetString(kPref1, &actual)); | 260 ASSERT_TRUE(prefs->GetString(kPref1, &actual)); |
155 EXPECT_EQ("val3", actual); | 261 EXPECT_EQ("val3", actual); |
156 } | 262 } |
157 | 263 |
158 // Make sure the last-installed extension wins for each preference. | 264 // Make sure the last-installed extension wins for each preference. |
159 TEST(ExtensionPrefStoreTest, InstallOverwrittenExtensions) { | 265 TEST_F(ExtensionPrefStoreTest, InstallOverwrittenExtensions) { |
160 TestExtensionPrefStore eps; | 266 TestExtensionPrefStore& eps = *eps_; |
161 ASSERT_TRUE(eps.ext1 != NULL); | 267 ASSERT_TRUE(eps.ext1 != NULL); |
162 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); | 268 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); |
163 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); | 269 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); |
164 eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3")); | 270 eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3")); |
165 | 271 |
166 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val4")); | 272 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val4")); |
167 eps.InstallExtensionPref(eps.ext2, kPref2, Value::CreateStringValue("val5")); | 273 eps.InstallExtensionPref(eps.ext2, kPref2, Value::CreateStringValue("val5")); |
168 | 274 |
169 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val6")); | 275 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val6")); |
170 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val7")); | 276 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val7")); |
171 eps.InstallExtensionPref(eps.ext1, kPref3, Value::CreateStringValue("val8")); | 277 eps.InstallExtensionPref(eps.ext1, kPref3, Value::CreateStringValue("val8")); |
172 | 278 |
173 TestExtensionPrefStore::ExtensionIDs ids; | 279 TestExtensionPrefStore::ExtensionIDs ids; |
174 eps.GetExtensionIDList(&ids); | 280 eps.GetExtensionIDList(&ids); |
175 EXPECT_EQ(3u, ids.size()); | 281 ASSERT_EQ(3u, ids.size()); |
176 EXPECT_EQ(eps.ext3->id(), ids[0]); | 282 EXPECT_EQ(eps.ext3->id(), ids[0]); |
177 EXPECT_EQ(eps.ext2->id(), ids[1]); | 283 EXPECT_EQ(eps.ext2->id(), ids[1]); |
178 EXPECT_EQ(eps.ext1->id(), ids[2]); | 284 EXPECT_EQ(eps.ext1->id(), ids[2]); |
179 | 285 |
180 DictionaryValue* prefs = eps.prefs(); | 286 DictionaryValue* prefs = eps.prefs(); |
181 ASSERT_EQ(3u, prefs->size()); | 287 ASSERT_EQ(3u, prefs->size()); |
182 std::string actual; | 288 std::string actual; |
183 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); | 289 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); |
184 EXPECT_EQ("val3", actual); | 290 EXPECT_EQ("val3", actual); |
185 EXPECT_TRUE(prefs->GetString(kPref2, &actual)); | 291 EXPECT_TRUE(prefs->GetString(kPref2, &actual)); |
186 EXPECT_EQ("val5", actual); | 292 EXPECT_EQ("val5", actual); |
187 EXPECT_TRUE(prefs->GetString(kPref3, &actual)); | 293 EXPECT_TRUE(prefs->GetString(kPref3, &actual)); |
188 EXPECT_EQ("val8", actual); | 294 EXPECT_EQ("val8", actual); |
189 } | 295 } |
190 | 296 |
191 // Make sure the last-installed extension wins even if other extensions set | 297 // Make sure the last-installed extension wins even if other extensions set |
192 // the same or different preferences later. | 298 // the same or different preferences later. |
193 TEST(ExtensionPrefStoreTest, InstallInterleavedExtensions) { | 299 TEST_F(ExtensionPrefStoreTest, InstallInterleavedExtensions) { |
194 TestExtensionPrefStore eps; | 300 TestExtensionPrefStore& eps = *eps_; |
195 ASSERT_TRUE(eps.ext1 != NULL); | 301 ASSERT_TRUE(eps.ext1 != NULL); |
196 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); | 302 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); |
197 eps.InstallExtensionPref(eps.ext2, kPref2, Value::CreateStringValue("val2")); | 303 eps.InstallExtensionPref(eps.ext2, kPref2, Value::CreateStringValue("val2")); |
198 eps.InstallExtensionPref(eps.ext3, kPref3, Value::CreateStringValue("val3")); | 304 eps.InstallExtensionPref(eps.ext3, kPref3, Value::CreateStringValue("val3")); |
199 | 305 |
200 eps.InstallExtensionPref(eps.ext3, kPref3, Value::CreateStringValue("val4")); | 306 eps.InstallExtensionPref(eps.ext3, kPref3, Value::CreateStringValue("val4")); |
201 eps.InstallExtensionPref(eps.ext2, kPref3, Value::CreateStringValue("val5")); | 307 eps.InstallExtensionPref(eps.ext2, kPref3, Value::CreateStringValue("val5")); |
202 eps.InstallExtensionPref(eps.ext1, kPref3, Value::CreateStringValue("val6")); | 308 eps.InstallExtensionPref(eps.ext1, kPref3, Value::CreateStringValue("val6")); |
203 | 309 |
204 eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val7")); | 310 eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val7")); |
205 | 311 |
206 TestExtensionPrefStore::ExtensionIDs ids; | 312 TestExtensionPrefStore::ExtensionIDs ids; |
207 eps.GetExtensionIDList(&ids); | 313 eps.GetExtensionIDList(&ids); |
208 EXPECT_EQ(3u, ids.size()); | 314 ASSERT_EQ(3u, ids.size()); |
209 EXPECT_EQ(eps.ext3->id(), ids[0]); | 315 EXPECT_EQ(eps.ext3->id(), ids[0]); |
210 EXPECT_EQ(eps.ext2->id(), ids[1]); | 316 EXPECT_EQ(eps.ext2->id(), ids[1]); |
211 EXPECT_EQ(eps.ext1->id(), ids[2]); | 317 EXPECT_EQ(eps.ext1->id(), ids[2]); |
212 | 318 |
213 DictionaryValue* prefs = eps.prefs(); | 319 DictionaryValue* prefs = eps.prefs(); |
214 ASSERT_EQ(3u, prefs->size()); | 320 ASSERT_EQ(3u, prefs->size()); |
215 std::string actual; | 321 std::string actual; |
216 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); | 322 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); |
217 EXPECT_EQ("val7", actual); | 323 EXPECT_EQ("val7", actual); |
218 EXPECT_TRUE(prefs->GetString(kPref2, &actual)); | 324 EXPECT_TRUE(prefs->GetString(kPref2, &actual)); |
219 EXPECT_EQ("val2", actual); | 325 EXPECT_EQ("val2", actual); |
220 EXPECT_TRUE(prefs->GetString(kPref3, &actual)); | 326 EXPECT_TRUE(prefs->GetString(kPref3, &actual)); |
221 EXPECT_EQ("val4", actual); | 327 EXPECT_EQ("val4", actual); |
222 } | 328 } |
223 | 329 |
224 TEST(ExtensionPrefStoreTest, UninstallOnlyExtension) { | 330 TEST_F(ExtensionPrefStoreTest, UninstallOnlyExtension) { |
225 TestExtensionPrefStore eps; | 331 TestExtensionPrefStore& eps = *eps_; |
226 ASSERT_TRUE(eps.ext1 != NULL); | 332 ASSERT_TRUE(eps.ext1 != NULL); |
227 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); | 333 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); |
228 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val2")); | 334 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val2")); |
229 | 335 |
230 // No need to check the state here; the Install* tests cover that. | 336 // No need to check the state here; the Install* tests cover that. |
231 eps.UninstallExtension(eps.ext1); | 337 eps.UninstallExtension(eps.ext1); |
232 | 338 |
233 TestExtensionPrefStore::ExtensionIDs ids; | 339 TestExtensionPrefStore::ExtensionIDs ids; |
234 eps.GetExtensionIDList(&ids); | 340 eps.GetExtensionIDList(&ids); |
235 EXPECT_EQ(0u, ids.size()); | 341 EXPECT_EQ(0u, ids.size()); |
236 | 342 |
237 DictionaryValue* prefs = eps.prefs(); | 343 DictionaryValue* prefs = eps.prefs(); |
238 std::string actual; | 344 std::string actual; |
239 // "path1.name" has been removed, but an empty "path1" dictionary is still | 345 // "path1.name" has been removed, but an empty "path1" dictionary is still |
240 // present. | 346 // present. |
241 ASSERT_EQ(1u, prefs->size()); | 347 ASSERT_EQ(1u, prefs->size()); |
242 EXPECT_FALSE(prefs->GetString(kPref1, &actual)); | 348 EXPECT_FALSE(prefs->GetString(kPref1, &actual)); |
243 EXPECT_FALSE(prefs->GetString(kPref2, &actual)); | 349 EXPECT_FALSE(prefs->GetString(kPref2, &actual)); |
244 } | 350 } |
245 | 351 |
246 // Tests uninstalling an extension that wasn't winning for any preferences. | 352 // Tests uninstalling an extension that wasn't winning for any preferences. |
247 TEST(ExtensionPrefStoreTest, UninstallIrrelevantExtension) { | 353 TEST_F(ExtensionPrefStoreTest, UninstallIrrelevantExtension) { |
248 TestExtensionPrefStore eps; | 354 TestExtensionPrefStore& eps = *eps_; |
249 ASSERT_TRUE(eps.ext1 != NULL); | 355 ASSERT_TRUE(eps.ext1 != NULL); |
250 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); | 356 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); |
251 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); | 357 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); |
252 | 358 |
253 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val3")); | 359 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val3")); |
254 eps.InstallExtensionPref(eps.ext2, kPref2, Value::CreateStringValue("val4")); | 360 eps.InstallExtensionPref(eps.ext2, kPref2, Value::CreateStringValue("val4")); |
255 | 361 |
256 eps.UninstallExtension(eps.ext1); | 362 eps.UninstallExtension(eps.ext1); |
257 | 363 |
258 TestExtensionPrefStore::ExtensionIDs ids; | 364 TestExtensionPrefStore::ExtensionIDs ids; |
259 eps.GetExtensionIDList(&ids); | 365 eps.GetExtensionIDList(&ids); |
260 EXPECT_EQ(1u, ids.size()); | 366 ASSERT_EQ(1u, ids.size()); |
261 EXPECT_EQ(eps.ext2->id(), ids[0]); | 367 EXPECT_EQ(eps.ext2->id(), ids[0]); |
262 | 368 |
263 DictionaryValue* prefs = eps.prefs(); | 369 DictionaryValue* prefs = eps.prefs(); |
264 ASSERT_EQ(2u, prefs->size()); | 370 ASSERT_EQ(2u, prefs->size()); |
265 std::string actual; | 371 std::string actual; |
266 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); | 372 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); |
267 EXPECT_EQ("val2", actual); | 373 EXPECT_EQ("val2", actual); |
268 EXPECT_TRUE(prefs->GetString(kPref2, &actual)); | 374 EXPECT_TRUE(prefs->GetString(kPref2, &actual)); |
269 EXPECT_EQ("val4", actual); | 375 EXPECT_EQ("val4", actual); |
270 } | 376 } |
271 | 377 |
272 // Tests uninstalling an extension that was winning for all preferences. | 378 // Tests uninstalling an extension that was winning for all preferences. |
273 TEST(ExtensionPrefStoreTest, UninstallExtensionFromTop) { | 379 TEST_F(ExtensionPrefStoreTest, UninstallExtensionFromTop) { |
274 TestExtensionPrefStore eps; | 380 TestExtensionPrefStore& eps = *eps_; |
275 ASSERT_TRUE(eps.ext1 != NULL); | 381 ASSERT_TRUE(eps.ext1 != NULL); |
276 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); | 382 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); |
277 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); | 383 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); |
278 eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3")); | 384 eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3")); |
279 | 385 |
280 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val4")); | 386 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val4")); |
281 eps.InstallExtensionPref(eps.ext3, kPref2, Value::CreateStringValue("val5")); | 387 eps.InstallExtensionPref(eps.ext3, kPref2, Value::CreateStringValue("val5")); |
282 | 388 |
283 eps.UninstallExtension(eps.ext3); | 389 eps.UninstallExtension(eps.ext3); |
284 | 390 |
285 TestExtensionPrefStore::ExtensionIDs ids; | 391 TestExtensionPrefStore::ExtensionIDs ids; |
286 eps.GetExtensionIDList(&ids); | 392 eps.GetExtensionIDList(&ids); |
287 EXPECT_EQ(2u, ids.size()); | 393 ASSERT_EQ(2u, ids.size()); |
288 EXPECT_EQ(eps.ext2->id(), ids[0]); | 394 EXPECT_EQ(eps.ext2->id(), ids[0]); |
289 EXPECT_EQ(eps.ext1->id(), ids[1]); | 395 EXPECT_EQ(eps.ext1->id(), ids[1]); |
290 | 396 |
291 DictionaryValue* prefs = eps.prefs(); | 397 DictionaryValue* prefs = eps.prefs(); |
292 ASSERT_EQ(2u, prefs->size()); | 398 ASSERT_EQ(2u, prefs->size()); |
293 std::string actual; | 399 std::string actual; |
294 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); | 400 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); |
295 EXPECT_EQ("val2", actual); | 401 EXPECT_EQ("val2", actual); |
296 EXPECT_TRUE(prefs->GetString(kPref2, &actual)); | 402 EXPECT_TRUE(prefs->GetString(kPref2, &actual)); |
297 EXPECT_EQ("val4", actual); | 403 EXPECT_EQ("val4", actual); |
298 } | 404 } |
299 | 405 |
300 // Tests uninstalling an extension that was winning for only some preferences. | 406 // Tests uninstalling an extension that was winning for only some preferences. |
301 TEST(ExtensionPrefStoreTest, UninstallExtensionFromMiddle) { | 407 TEST_F(ExtensionPrefStoreTest, UninstallExtensionFromMiddle) { |
302 TestExtensionPrefStore eps; | 408 TestExtensionPrefStore& eps = *eps_; |
303 ASSERT_TRUE(eps.ext1 != NULL); | 409 ASSERT_TRUE(eps.ext1 != NULL); |
304 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); | 410 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); |
305 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); | 411 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); |
306 eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3")); | 412 eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3")); |
307 | 413 |
308 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val4")); | 414 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val4")); |
309 eps.InstallExtensionPref(eps.ext2, kPref2, Value::CreateStringValue("val5")); | 415 eps.InstallExtensionPref(eps.ext2, kPref2, Value::CreateStringValue("val5")); |
310 | 416 |
311 eps.InstallExtensionPref(eps.ext1, kPref3, Value::CreateStringValue("val6")); | 417 eps.InstallExtensionPref(eps.ext1, kPref3, Value::CreateStringValue("val6")); |
312 | 418 |
313 eps.InstallExtensionPref(eps.ext2, kPref4, Value::CreateStringValue("val7")); | 419 eps.InstallExtensionPref(eps.ext2, kPref4, Value::CreateStringValue("val7")); |
314 | 420 |
315 eps.UninstallExtension(eps.ext2); | 421 eps.UninstallExtension(eps.ext2); |
316 | 422 |
317 TestExtensionPrefStore::ExtensionIDs ids; | 423 TestExtensionPrefStore::ExtensionIDs ids; |
318 eps.GetExtensionIDList(&ids); | 424 eps.GetExtensionIDList(&ids); |
319 EXPECT_EQ(2u, ids.size()); | 425 ASSERT_EQ(2u, ids.size()); |
320 EXPECT_EQ(eps.ext3->id(), ids[0]); | 426 EXPECT_EQ(eps.ext3->id(), ids[0]); |
321 EXPECT_EQ(eps.ext1->id(), ids[1]); | 427 EXPECT_EQ(eps.ext1->id(), ids[1]); |
322 | 428 |
323 DictionaryValue* prefs = eps.prefs(); | 429 DictionaryValue* prefs = eps.prefs(); |
324 ASSERT_EQ(3u, prefs->size()); | 430 ASSERT_EQ(3u, prefs->size()); |
325 std::string actual; | 431 std::string actual; |
326 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); | 432 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); |
327 EXPECT_EQ("val3", actual); | 433 EXPECT_EQ("val3", actual); |
328 EXPECT_TRUE(prefs->GetString(kPref2, &actual)); | 434 EXPECT_TRUE(prefs->GetString(kPref2, &actual)); |
329 EXPECT_EQ("val4", actual); | 435 EXPECT_EQ("val4", actual); |
330 EXPECT_TRUE(prefs->GetString(kPref3, &actual)); | 436 EXPECT_TRUE(prefs->GetString(kPref3, &actual)); |
331 EXPECT_EQ("val6", actual); | 437 EXPECT_EQ("val6", actual); |
332 EXPECT_FALSE(prefs->GetString(kPref4, &actual)); | 438 EXPECT_FALSE(prefs->GetString(kPref4, &actual)); |
333 } | 439 } |
334 | 440 |
335 TEST(ExtensionPrefStoreTest, NotifyWhenNeeded) { | 441 TEST_F(ExtensionPrefStoreTest, NotifyWhenNeeded) { |
336 using testing::Mock; | 442 using testing::Mock; |
443 using testing::StrEq; | |
337 | 444 |
338 TestExtensionPrefStore* eps = new TestExtensionPrefStore; | 445 TestExtensionPrefStore* eps = eps_; |
339 DefaultPrefStore* dps = new DefaultPrefStore; | |
340 ASSERT_TRUE(eps->ext1 != NULL); | 446 ASSERT_TRUE(eps->ext1 != NULL); |
341 | 447 |
342 // The PrefValueStore takes ownership of the PrefStores; in this case, that's | 448 // The PrefService takes ownership of the PrefNotifier. |
343 // only an ExtensionPrefStore. Likewise, the PrefService takes ownership of | 449 MockPrefNotifier* pref_notifier = new MockPrefNotifier(pref_service_.get(), |
344 // the PrefValueStore and PrefNotifier. | 450 value_store_); |
345 PrefValueStore* value_store = new TestingPrefService::TestingPrefValueStore( | 451 pref_service_->SetPrefNotifier(pref_notifier); |
346 NULL, eps, NULL, NULL, NULL, dps); | |
347 scoped_ptr<MockPrefService> pref_service(new MockPrefService(value_store)); | |
348 MockPrefNotifier* pref_notifier = new MockPrefNotifier(pref_service.get(), | |
349 value_store); | |
350 pref_service->SetPrefNotifier(pref_notifier); | |
351 | |
352 eps->SetPrefService(pref_service.get()); | |
353 pref_service->RegisterStringPref(kPref1, std::string()); | |
354 | 452 |
355 EXPECT_CALL(*pref_notifier, FireObservers(kPref1)); | 453 EXPECT_CALL(*pref_notifier, FireObservers(kPref1)); |
356 eps->InstallExtensionPref(eps->ext1, kPref1, | 454 eps->InstallExtensionPref(eps->ext1, kPref1, |
357 Value::CreateStringValue("https://www.chromium.org")); | 455 Value::CreateStringValue("https://www.chromium.org")); |
358 Mock::VerifyAndClearExpectations(pref_notifier); | 456 Mock::VerifyAndClearExpectations(pref_notifier); |
359 | 457 |
360 EXPECT_CALL(*pref_notifier, FireObservers(kPref1)).Times(0); | 458 EXPECT_CALL(*pref_notifier, FireObservers(kPref1)).Times(0); |
361 eps->InstallExtensionPref(eps->ext1, kPref1, | 459 eps->InstallExtensionPref(eps->ext1, kPref1, |
362 Value::CreateStringValue("https://www.chromium.org")); | 460 Value::CreateStringValue("https://www.chromium.org")); |
363 Mock::VerifyAndClearExpectations(pref_notifier); | 461 Mock::VerifyAndClearExpectations(pref_notifier); |
364 | 462 |
365 EXPECT_CALL(*pref_notifier, FireObservers(kPref1)).Times(2); | 463 EXPECT_CALL(*pref_notifier, FireObservers(StrEq(kPref1))).Times(2); |
366 eps->InstallExtensionPref(eps->ext1, kPref1, | 464 eps->InstallExtensionPref(eps->ext1, kPref1, |
367 Value::CreateStringValue("chrome://newtab")); | 465 Value::CreateStringValue("chrome://newtab")); |
368 eps->UninstallExtension(eps->ext1); | 466 eps->UninstallExtension(eps->ext1); |
369 } | 467 } |
468 | |
469 // Make sure the precedence is respected when extensions are loaded | |
470 // and the precedence of extensions has been defined in the pref stores already. | |
471 TEST_F(ExtensionPrefStoreTest, InstallRegisteredExtensions) { | |
472 TestExtensionPrefStore& eps = *eps_; | |
473 ASSERT_TRUE(eps.ext1 != NULL); | |
Bernhard Bauer
2010/11/12 18:16:57
Nit: Just ASSERT_TRUE(eps.ext1);
battre (please use the other)
2010/11/12 19:07:09
did a grep over the source and ASSERT_TRUE(foo !=
| |
474 | |
475 ListValue *extensionPrefs = new ListValue(); | |
Bernhard Bauer
2010/11/12 18:16:57
Nit: ListValue* extensionPrefs
battre (please use the other)
2010/11/12 19:07:09
Done.
| |
476 ups_->prefs()->Set(ExtensionPrefStore::kExtensionPreferencesKey, | |
477 extensionPrefs); | |
478 | |
479 ExtensionPrefStore::ExtensionStack es; | |
480 es.init(extensionPrefs); | |
481 | |
482 ExtensionPrefStore::ExtensionPrefs ext3 = es.CreateEntry(eps.ext3->id()); | |
483 ExtensionPrefStore::ExtensionPrefs ext1 = es.CreateEntry(eps.ext1->id()); | |
484 ExtensionPrefStore::ExtensionPrefs ext2 = es.CreateEntry(eps.ext2->id()); | |
485 // Precedence: 3 < 1 < 2 --> 3 wins. | |
486 | |
487 TestExtensionPrefStore::ExtensionIDs ids; | |
488 eps.GetExtensionIDList(&ids); | |
489 ASSERT_EQ(3u, ids.size()); | |
490 EXPECT_EQ(eps.ext2->id(), ids[0]); | |
491 EXPECT_EQ(eps.ext1->id(), ids[1]); | |
492 EXPECT_EQ(eps.ext3->id(), ids[2]); | |
493 | |
494 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); | |
495 { | |
496 DictionaryValue* prefs = eps.prefs(); | |
497 ASSERT_EQ(1u, prefs->size()); | |
498 std::string actual; | |
499 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); | |
500 EXPECT_EQ("val1", actual); | |
501 } | |
502 | |
503 // ext2 has higher higher precedence --> override. | |
504 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); | |
505 { | |
506 DictionaryValue* prefs = eps.prefs(); | |
507 ASSERT_EQ(1u, prefs->size()); | |
508 std::string actual; | |
509 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); | |
510 EXPECT_EQ("val2", actual); | |
511 } | |
512 | |
513 // ext3 has lower precedence --> does not override. | |
514 eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3")); | |
515 { | |
516 DictionaryValue* prefs = eps.prefs(); | |
517 ASSERT_EQ(1u, prefs->size()); | |
518 std::string actual; | |
519 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); | |
520 EXPECT_EQ("val2", actual); | |
521 } | |
522 | |
523 ids.clear(); | |
524 eps.GetExtensionIDList(&ids); | |
525 ASSERT_EQ(3u, ids.size()); | |
526 EXPECT_EQ(eps.ext2->id(), ids[0]); | |
527 EXPECT_EQ(eps.ext1->id(), ids[1]); | |
528 EXPECT_EQ(eps.ext3->id(), ids[2]); | |
529 } | |
530 | |
531 // Make sure the precedence is respected when extensions are loaded and | |
532 // uninstalled later. | |
533 TEST_F(ExtensionPrefStoreTest, UninstallRegisteredExtensions) { | |
534 TestExtensionPrefStore& eps = *eps_; | |
535 ASSERT_TRUE(eps.ext1 != NULL); | |
536 | |
537 ListValue *extensionPrefs = new ListValue(); | |
538 ups_->prefs()->Set(ExtensionPrefStore::kExtensionPreferencesKey, | |
539 extensionPrefs); | |
540 | |
541 ExtensionPrefStore::ExtensionStack es; | |
542 es.init(extensionPrefs); | |
543 | |
544 ExtensionPrefStore::ExtensionPrefs ext3 = es.CreateEntry(eps.ext3->id()); | |
545 ExtensionPrefStore::ExtensionPrefs ext1 = es.CreateEntry(eps.ext1->id()); | |
546 ExtensionPrefStore::ExtensionPrefs ext2 = es.CreateEntry(eps.ext2->id()); | |
547 // precedence: 3 < 1 < 2 --> 3 wins | |
548 | |
549 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); | |
550 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); | |
551 eps.InstallExtensionPref(eps.ext3, kPref1, Value::CreateStringValue("val3")); | |
552 | |
553 // Correct state of this setup is ensured by InstallRegisteredExtensions test | |
554 | |
555 eps.UninstallExtension(eps.ext2); | |
556 { | |
557 DictionaryValue* prefs = eps.prefs(); | |
558 ASSERT_EQ(1u, prefs->size()); | |
559 std::string actual; | |
560 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); | |
561 EXPECT_EQ("val1", actual); | |
562 } | |
563 | |
564 TestExtensionPrefStore::ExtensionIDs ids; | |
565 eps.GetExtensionIDList(&ids); | |
566 ASSERT_EQ(2u, ids.size()); | |
567 EXPECT_EQ(eps.ext1->id(), ids[0]); | |
568 EXPECT_EQ(eps.ext3->id(), ids[1]); | |
569 } | |
570 | |
571 // Make sure that preregistered preference values are available before extension | |
572 // is registered. | |
573 TEST_F(ExtensionPrefStoreTest, ReadFromRegisteredExtensions) { | |
574 TestExtensionPrefStore& eps = *eps_; | |
575 ASSERT_TRUE(eps.ext1 != NULL); | |
576 | |
577 ListValue *extensionPrefs = new ListValue(); | |
578 ups_->prefs()->Set(ExtensionPrefStore::kExtensionPreferencesKey, | |
579 extensionPrefs); | |
580 | |
581 ExtensionPrefStore::ExtensionStack es; | |
582 es.init(extensionPrefs); | |
583 | |
584 ExtensionPrefStore::ExtensionPrefs ext1 = es.CreateEntry(eps.ext1->id()); | |
585 ext1.set(kPref1, Value::CreateStringValue("val1")); | |
586 | |
587 TestExtensionPrefStore::ExtensionIDs ids; | |
588 eps.GetExtensionIDList(&ids); | |
589 ASSERT_EQ(1u, ids.size()); | |
590 EXPECT_EQ(eps.ext1->id(), ids[0]); | |
591 | |
592 // Check value is available before extension is started. | |
593 { | |
594 DictionaryValue* prefs = eps.prefs(); | |
595 ASSERT_EQ(1u, prefs->size()); | |
596 std::string actual; | |
597 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); | |
598 EXPECT_EQ("val1", actual); | |
599 } | |
600 | |
601 // Check value can be overriden when extension is started. | |
602 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val2")); | |
603 { | |
604 DictionaryValue* prefs = eps.prefs(); | |
605 ASSERT_EQ(1u, prefs->size()); | |
606 std::string actual; | |
607 EXPECT_TRUE(prefs->GetString(kPref1, &actual)); | |
608 EXPECT_EQ("val2", actual); | |
609 } | |
610 | |
611 ids.clear(); | |
612 eps.GetExtensionIDList(&ids); | |
613 ASSERT_EQ(1u, ids.size()); | |
614 EXPECT_EQ(eps.ext1->id(), ids[0]); | |
615 } | |
616 | |
617 TEST_F(ExtensionPrefStoreTest, TestPersistence) { | |
618 // Check whether changes are persisted. | |
619 using testing::Mock; | |
620 | |
621 TestExtensionPrefStore& eps = *eps_; | |
622 | |
623 // install pref | |
624 EXPECT_CALL(eps, SchedulePersist()); | |
625 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val1")); | |
626 Mock::VerifyAndClearExpectations(&eps); | |
627 | |
628 // overwrite by different extension | |
629 EXPECT_CALL(eps, SchedulePersist()); | |
630 eps.InstallExtensionPref(eps.ext2, kPref1, Value::CreateStringValue("val2")); | |
631 Mock::VerifyAndClearExpectations(&eps); | |
632 | |
633 // overwrite | |
634 EXPECT_CALL(eps, SchedulePersist()); | |
635 eps.InstallExtensionPref(eps.ext1, kPref1, Value::CreateStringValue("val3")); | |
636 Mock::VerifyAndClearExpectations(&eps); | |
637 | |
638 // add second pref | |
639 EXPECT_CALL(eps, SchedulePersist()); | |
640 eps.InstallExtensionPref(eps.ext1, kPref2, Value::CreateStringValue("val4")); | |
641 Mock::VerifyAndClearExpectations(&eps); | |
642 | |
643 // uninstall | |
644 EXPECT_CALL(eps, SchedulePersist()); | |
645 eps.UninstallExtension(eps.ext1); | |
646 Mock::VerifyAndClearExpectations(&eps); | |
647 } | |
648 | |
OLD | NEW |