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