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

Side by Side Diff: extensions/browser/value_store/value_store_unittest.cc

Issue 1940133002: Use std::unique_ptr to transfer base::Value ownership in extensions::ValueStoreChange (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 7 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
« no previous file with comments | « extensions/browser/value_store/value_store_change_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "extensions/browser/value_store/value_store_unittest.h" 5 #include "extensions/browser/value_store/value_store_unittest.h"
6 6
7 #include <utility>
8
7 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
8 #include "base/memory/linked_ptr.h" 10 #include "base/memory/linked_ptr.h"
9 #include "base/values.h" 11 #include "base/values.h"
10 12
11 using content::BrowserThread; 13 using content::BrowserThread;
12 14
13 namespace { 15 namespace {
14 16
15 // To save typing ValueStore::DEFAULTS everywhere. 17 // To save typing ValueStore::DEFAULTS everywhere.
16 const ValueStore::WriteOptions DEFAULTS = ValueStore::DEFAULTS; 18 const ValueStore::WriteOptions DEFAULTS = ValueStore::DEFAULTS;
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 list123_.push_back(key2_); 151 list123_.push_back(key2_);
150 list123_.push_back(key3_); 152 list123_.push_back(key3_);
151 153
152 set1_.insert(list1_.begin(), list1_.end()); 154 set1_.insert(list1_.begin(), list1_.end());
153 set2_.insert(list2_.begin(), list2_.end()); 155 set2_.insert(list2_.begin(), list2_.end());
154 set3_.insert(list3_.begin(), list3_.end()); 156 set3_.insert(list3_.begin(), list3_.end());
155 set12_.insert(list12_.begin(), list12_.end()); 157 set12_.insert(list12_.begin(), list12_.end());
156 set13_.insert(list13_.begin(), list13_.end()); 158 set13_.insert(list13_.begin(), list13_.end());
157 set123_.insert(list123_.begin(), list123_.end()); 159 set123_.insert(list123_.begin(), list123_.end());
158 160
159 dict1_->Set(key1_, val1_->DeepCopy()); 161 dict1_->Set(key1_, val1_->CreateDeepCopy());
160 dict3_->Set(key3_, val3_->DeepCopy()); 162 dict3_->Set(key3_, val3_->CreateDeepCopy());
161 dict12_->Set(key1_, val1_->DeepCopy()); 163 dict12_->Set(key1_, val1_->CreateDeepCopy());
162 dict12_->Set(key2_, val2_->DeepCopy()); 164 dict12_->Set(key2_, val2_->CreateDeepCopy());
163 dict123_->Set(key1_, val1_->DeepCopy()); 165 dict123_->Set(key1_, val1_->CreateDeepCopy());
164 dict123_->Set(key2_, val2_->DeepCopy()); 166 dict123_->Set(key2_, val2_->CreateDeepCopy());
165 dict123_->Set(key3_, val3_->DeepCopy()); 167 dict123_->Set(key3_, val3_->CreateDeepCopy());
166 } 168 }
167 169
168 ValueStoreTest::~ValueStoreTest() {} 170 ValueStoreTest::~ValueStoreTest() {}
169 171
170 void ValueStoreTest::SetUp() { 172 void ValueStoreTest::SetUp() {
171 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 173 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
172 storage_.reset((GetParam())(temp_dir_.path().AppendASCII("dbName"))); 174 storage_.reset((GetParam())(temp_dir_.path().AppendASCII("dbName")));
173 ASSERT_TRUE(storage_.get()); 175 ASSERT_TRUE(storage_.get());
174 } 176 }
175 177
176 void ValueStoreTest::TearDown() { 178 void ValueStoreTest::TearDown() {
177 storage_.reset(); 179 storage_.reset();
178 } 180 }
179 181
180 TEST_P(ValueStoreTest, GetWhenEmpty) { 182 TEST_P(ValueStoreTest, GetWhenEmpty) {
181 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); 183 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_));
182 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 184 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_));
183 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); 185 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_));
184 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 186 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get());
185 } 187 }
186 188
187 TEST_P(ValueStoreTest, GetWithSingleValue) { 189 TEST_P(ValueStoreTest, GetWithSingleValue) {
188 { 190 {
189 ValueStoreChangeList changes; 191 ValueStoreChangeList changes;
190 changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); 192 changes.push_back(
193 ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy()));
191 EXPECT_PRED_FORMAT2(ChangesEq, 194 EXPECT_PRED_FORMAT2(ChangesEq,
192 changes, storage_->Set(DEFAULTS, key1_, *val1_)); 195 changes, storage_->Set(DEFAULTS, key1_, *val1_));
193 } 196 }
194 197
195 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); 198 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_));
196 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key2_)); 199 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key2_));
197 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); 200 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_));
198 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 201 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_));
199 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list123_)); 202 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list123_));
200 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get()); 203 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get());
201 } 204 }
202 205
203 TEST_P(ValueStoreTest, GetWithMultipleValues) { 206 TEST_P(ValueStoreTest, GetWithMultipleValues) {
204 { 207 {
205 ValueStoreChangeList changes; 208 ValueStoreChangeList changes;
206 changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); 209 changes.push_back(
207 changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); 210 ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy()));
211 changes.push_back(
212 ValueStoreChange(key2_, nullptr, val2_->CreateDeepCopy()));
208 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); 213 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_));
209 } 214 }
210 215
211 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); 216 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_));
212 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); 217 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_));
213 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 218 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_));
214 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_)); 219 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_));
215 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get()); 220 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get());
216 } 221 }
217 222
218 TEST_P(ValueStoreTest, RemoveWhenEmpty) { 223 TEST_P(ValueStoreTest, RemoveWhenEmpty) {
219 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), 224 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(),
220 storage_->Remove(key1_)); 225 storage_->Remove(key1_));
221 226
222 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); 227 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_));
223 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_)); 228 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_));
224 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 229 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get());
225 } 230 }
226 231
227 TEST_P(ValueStoreTest, RemoveWithSingleValue) { 232 TEST_P(ValueStoreTest, RemoveWithSingleValue) {
228 storage_->Set(DEFAULTS, *dict1_); 233 storage_->Set(DEFAULTS, *dict1_);
229 { 234 {
230 ValueStoreChangeList changes; 235 ValueStoreChangeList changes;
231 changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); 236 changes.push_back(
237 ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr));
232 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_)); 238 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_));
233 } 239 }
234 240
235 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); 241 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_));
236 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key2_)); 242 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key2_));
237 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_)); 243 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_));
238 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list12_)); 244 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list12_));
239 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 245 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get());
240 } 246 }
241 247
242 TEST_P(ValueStoreTest, RemoveWithMultipleValues) { 248 TEST_P(ValueStoreTest, RemoveWithMultipleValues) {
243 storage_->Set(DEFAULTS, *dict123_); 249 storage_->Set(DEFAULTS, *dict123_);
244 { 250 {
245 ValueStoreChangeList changes; 251 ValueStoreChangeList changes;
246 changes.push_back(ValueStoreChange(key3_, val3_->DeepCopy(), NULL)); 252 changes.push_back(
253 ValueStoreChange(key3_, val3_->CreateDeepCopy(), nullptr));
247 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key3_)); 254 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key3_));
248 } 255 }
249 256
250 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); 257 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_));
251 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); 258 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_));
252 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 259 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_));
253 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list1_)); 260 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list1_));
254 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list12_)); 261 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list12_));
255 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list13_)); 262 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list13_));
256 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_)); 263 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_));
257 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get()); 264 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get());
258 265
259 { 266 {
260 ValueStoreChangeList changes; 267 ValueStoreChangeList changes;
261 changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); 268 changes.push_back(
262 changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); 269 ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr));
270 changes.push_back(
271 ValueStoreChange(key2_, val2_->CreateDeepCopy(), nullptr));
263 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_)); 272 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_));
264 } 273 }
265 274
266 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); 275 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_));
267 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); 276 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_));
268 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 277 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_));
269 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_)); 278 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_));
270 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list12_)); 279 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list12_));
271 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list13_)); 280 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list13_));
272 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); 281 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_));
273 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 282 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get());
274 } 283 }
275 284
276 TEST_P(ValueStoreTest, SetWhenOverwriting) { 285 TEST_P(ValueStoreTest, SetWhenOverwriting) {
277 storage_->Set(DEFAULTS, key1_, *val2_); 286 storage_->Set(DEFAULTS, key1_, *val2_);
278 { 287 {
279 ValueStoreChangeList changes; 288 ValueStoreChangeList changes;
289 changes.push_back(ValueStoreChange(key1_, val2_->CreateDeepCopy(),
290 val1_->CreateDeepCopy()));
280 changes.push_back( 291 changes.push_back(
281 ValueStoreChange(key1_, val2_->DeepCopy(), val1_->DeepCopy())); 292 ValueStoreChange(key2_, nullptr, val2_->CreateDeepCopy()));
282 changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy()));
283 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); 293 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_));
284 } 294 }
285 295
286 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); 296 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_));
287 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); 297 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_));
288 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 298 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_));
289 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list1_)); 299 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list1_));
290 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list12_)); 300 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list12_));
291 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list13_)); 301 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list13_));
292 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_)); 302 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_));
293 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get()); 303 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get());
294 } 304 }
295 305
296 TEST_P(ValueStoreTest, ClearWhenEmpty) { 306 TEST_P(ValueStoreTest, ClearWhenEmpty) {
297 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); 307 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear());
298 308
299 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); 309 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_));
300 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 310 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_));
301 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); 311 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_));
302 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 312 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get());
303 } 313 }
304 314
305 TEST_P(ValueStoreTest, ClearWhenNotEmpty) { 315 TEST_P(ValueStoreTest, ClearWhenNotEmpty) {
306 storage_->Set(DEFAULTS, *dict12_); 316 storage_->Set(DEFAULTS, *dict12_);
307 { 317 {
308 ValueStoreChangeList changes; 318 ValueStoreChangeList changes;
309 changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); 319 changes.push_back(
310 changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); 320 ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr));
321 changes.push_back(
322 ValueStoreChange(key2_, val2_->CreateDeepCopy(), nullptr));
311 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); 323 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear());
312 } 324 }
313 325
314 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); 326 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_));
315 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 327 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_));
316 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); 328 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_));
317 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 329 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get());
318 } 330 }
319 331
320 // Dots should be allowed in key names; they shouldn't be interpreted as 332 // Dots should be allowed in key names; they shouldn't be interpreted as
321 // indexing into a dictionary. 333 // indexing into a dictionary.
322 TEST_P(ValueStoreTest, DotsInKeyNames) { 334 TEST_P(ValueStoreTest, DotsInKeyNames) {
323 std::string dot_key("foo.bar"); 335 std::string dot_key("foo.bar");
324 base::StringValue dot_value("baz.qux"); 336 base::StringValue dot_value("baz.qux");
325 std::vector<std::string> dot_list; 337 std::vector<std::string> dot_list;
326 dot_list.push_back(dot_key); 338 dot_list.push_back(dot_key);
327 base::DictionaryValue dot_dict; 339 base::DictionaryValue dot_dict;
328 dot_dict.SetWithoutPathExpansion(dot_key, dot_value.DeepCopy()); 340 dot_dict.SetWithoutPathExpansion(dot_key, dot_value.CreateDeepCopy());
329 341
330 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(dot_key)); 342 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(dot_key));
331 343
332 { 344 {
333 ValueStoreChangeList changes; 345 ValueStoreChangeList changes;
334 changes.push_back( 346 changes.push_back(
335 ValueStoreChange(dot_key, NULL, dot_value.DeepCopy())); 347 ValueStoreChange(dot_key, nullptr, dot_value.CreateDeepCopy()));
336 EXPECT_PRED_FORMAT2(ChangesEq, 348 EXPECT_PRED_FORMAT2(ChangesEq,
337 changes, storage_->Set(DEFAULTS, dot_key, dot_value)); 349 changes, storage_->Set(DEFAULTS, dot_key, dot_value));
338 } 350 }
339 EXPECT_PRED_FORMAT2(ChangesEq, 351 EXPECT_PRED_FORMAT2(ChangesEq,
340 ValueStoreChangeList(), storage_->Set(DEFAULTS, dot_key, dot_value)); 352 ValueStoreChangeList(), storage_->Set(DEFAULTS, dot_key, dot_value));
341 353
342 EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get(dot_key)); 354 EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get(dot_key));
343 355
344 { 356 {
345 ValueStoreChangeList changes; 357 ValueStoreChangeList changes;
346 changes.push_back( 358 changes.push_back(
347 ValueStoreChange(dot_key, dot_value.DeepCopy(), NULL)); 359 ValueStoreChange(dot_key, dot_value.CreateDeepCopy(), nullptr));
348 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_key)); 360 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_key));
349 } 361 }
350 EXPECT_PRED_FORMAT2(ChangesEq, 362 EXPECT_PRED_FORMAT2(ChangesEq,
351 ValueStoreChangeList(), storage_->Remove(dot_key)); 363 ValueStoreChangeList(), storage_->Remove(dot_key));
352 { 364 {
353 ValueStoreChangeList changes; 365 ValueStoreChangeList changes;
354 changes.push_back( 366 changes.push_back(
355 ValueStoreChange(dot_key, NULL, dot_value.DeepCopy())); 367 ValueStoreChange(dot_key, nullptr, dot_value.CreateDeepCopy()));
356 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, dot_dict)); 368 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, dot_dict));
357 } 369 }
358 370
359 EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get(dot_list)); 371 EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get(dot_list));
360 EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get()); 372 EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get());
361 373
362 { 374 {
363 ValueStoreChangeList changes; 375 ValueStoreChangeList changes;
364 changes.push_back( 376 changes.push_back(
365 ValueStoreChange(dot_key, dot_value.DeepCopy(), NULL)); 377 ValueStoreChange(dot_key, dot_value.CreateDeepCopy(), nullptr));
366 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_list)); 378 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_list));
367 } 379 }
368 380
369 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(dot_key)); 381 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(dot_key));
370 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 382 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get());
371 } 383 }
372 384
373 TEST_P(ValueStoreTest, DotsInKeyNamesWithDicts) { 385 TEST_P(ValueStoreTest, DotsInKeyNamesWithDicts) {
374 base::DictionaryValue outer_dict; 386 base::DictionaryValue outer_dict;
375 base::DictionaryValue* inner_dict = new base::DictionaryValue(); 387 std::unique_ptr<base::DictionaryValue> inner_dict(
376 outer_dict.Set("foo", inner_dict); 388 new base::DictionaryValue());
389 outer_dict.Set("foo", std::move(inner_dict));
377 inner_dict->SetString("bar", "baz"); 390 inner_dict->SetString("bar", "baz");
Devlin 2016/05/03 16:55:05 UAF (was already a conceptual problem, but now thi
dcheng 2016/05/03 17:16:26 Done. This was "safe" before but is now unsafe.
378 391
379 { 392 {
380 ValueStoreChangeList changes; 393 ValueStoreChangeList changes;
381 changes.push_back( 394 changes.push_back(
382 ValueStoreChange("foo", NULL, inner_dict->DeepCopy())); 395 ValueStoreChange("foo", nullptr, inner_dict->CreateDeepCopy()));
383 EXPECT_PRED_FORMAT2(ChangesEq, 396 EXPECT_PRED_FORMAT2(ChangesEq,
384 changes, storage_->Set(DEFAULTS, outer_dict)); 397 changes, storage_->Set(DEFAULTS, outer_dict));
385 } 398 }
386 399
387 EXPECT_PRED_FORMAT2(SettingsEq, outer_dict, storage_->Get("foo")); 400 EXPECT_PRED_FORMAT2(SettingsEq, outer_dict, storage_->Get("foo"));
388 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get("foo.bar")); 401 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get("foo.bar"));
389 } 402 }
390 403
391 TEST_P(ValueStoreTest, ComplexChangedKeysScenarios) { 404 TEST_P(ValueStoreTest, ComplexChangedKeysScenarios) {
392 // Test: 405 // Test:
393 // - Setting over missing/changed/same keys, combinations. 406 // - Setting over missing/changed/same keys, combinations.
394 // - Removing over missing and present keys, combinations. 407 // - Removing over missing and present keys, combinations.
395 // - Clearing. 408 // - Clearing.
396 std::vector<std::string> complex_list; 409 std::vector<std::string> complex_list;
397 base::DictionaryValue complex_changed_dict; 410 base::DictionaryValue complex_changed_dict;
398 411
399 storage_->Set(DEFAULTS, key1_, *val1_); 412 storage_->Set(DEFAULTS, key1_, *val1_);
400 EXPECT_PRED_FORMAT2(ChangesEq, 413 EXPECT_PRED_FORMAT2(ChangesEq,
401 ValueStoreChangeList(), storage_->Set(DEFAULTS, key1_, *val1_)); 414 ValueStoreChangeList(), storage_->Set(DEFAULTS, key1_, *val1_));
402 { 415 {
403 ValueStoreChangeList changes; 416 ValueStoreChangeList changes;
404 changes.push_back(ValueStoreChange( 417 changes.push_back(ValueStoreChange(key1_, val1_->CreateDeepCopy(),
405 key1_, val1_->DeepCopy(), val2_->DeepCopy())); 418 val2_->CreateDeepCopy()));
406 EXPECT_PRED_FORMAT2(ChangesEq, 419 EXPECT_PRED_FORMAT2(ChangesEq,
407 changes, storage_->Set(DEFAULTS, key1_, *val2_)); 420 changes, storage_->Set(DEFAULTS, key1_, *val2_));
408 } 421 }
409 { 422 {
410 ValueStoreChangeList changes; 423 ValueStoreChangeList changes;
411 changes.push_back(ValueStoreChange(key1_, val2_->DeepCopy(), NULL)); 424 changes.push_back(
425 ValueStoreChange(key1_, val2_->CreateDeepCopy(), nullptr));
412 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_)); 426 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_));
413 EXPECT_PRED_FORMAT2(ChangesEq, 427 EXPECT_PRED_FORMAT2(ChangesEq,
414 ValueStoreChangeList(), storage_->Remove(key1_)); 428 ValueStoreChangeList(), storage_->Remove(key1_));
415 } 429 }
416 { 430 {
417 ValueStoreChangeList changes; 431 ValueStoreChangeList changes;
418 changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); 432 changes.push_back(
433 ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy()));
419 EXPECT_PRED_FORMAT2(ChangesEq, 434 EXPECT_PRED_FORMAT2(ChangesEq,
420 changes, storage_->Set(DEFAULTS, key1_, *val1_)); 435 changes, storage_->Set(DEFAULTS, key1_, *val1_));
421 } 436 }
422 { 437 {
423 ValueStoreChangeList changes; 438 ValueStoreChangeList changes;
424 changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); 439 changes.push_back(
440 ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr));
425 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); 441 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear());
426 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); 442 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear());
427 } 443 }
428 444
429 { 445 {
430 ValueStoreChangeList changes; 446 ValueStoreChangeList changes;
431 changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); 447 changes.push_back(
432 changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); 448 ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy()));
449 changes.push_back(
450 ValueStoreChange(key2_, nullptr, val2_->CreateDeepCopy()));
433 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); 451 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_));
434 EXPECT_PRED_FORMAT2(ChangesEq, 452 EXPECT_PRED_FORMAT2(ChangesEq,
435 ValueStoreChangeList(), storage_->Set(DEFAULTS, *dict12_)); 453 ValueStoreChangeList(), storage_->Set(DEFAULTS, *dict12_));
436 } 454 }
437 { 455 {
438 ValueStoreChangeList changes; 456 ValueStoreChangeList changes;
439 changes.push_back(ValueStoreChange(key3_, NULL, val3_->DeepCopy())); 457 changes.push_back(
458 ValueStoreChange(key3_, nullptr, val3_->CreateDeepCopy()));
440 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict123_)); 459 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict123_));
441 } 460 }
442 { 461 {
443 base::DictionaryValue to_set; 462 base::DictionaryValue to_set;
444 to_set.Set(key1_, val2_->DeepCopy()); 463 to_set.Set(key1_, val2_->CreateDeepCopy());
445 to_set.Set(key2_, val2_->DeepCopy()); 464 to_set.Set(key2_, val2_->CreateDeepCopy());
446 to_set.Set("asdf", val1_->DeepCopy()); 465 to_set.Set("asdf", val1_->CreateDeepCopy());
447 to_set.Set("qwerty", val3_->DeepCopy()); 466 to_set.Set("qwerty", val3_->CreateDeepCopy());
448 467
449 ValueStoreChangeList changes; 468 ValueStoreChangeList changes;
469 changes.push_back(ValueStoreChange(key1_, val1_->CreateDeepCopy(),
470 val2_->CreateDeepCopy()));
450 changes.push_back( 471 changes.push_back(
451 ValueStoreChange(key1_, val1_->DeepCopy(), val2_->DeepCopy())); 472 ValueStoreChange("asdf", nullptr, val1_->CreateDeepCopy()));
452 changes.push_back(ValueStoreChange("asdf", NULL, val1_->DeepCopy()));
453 changes.push_back( 473 changes.push_back(
454 ValueStoreChange("qwerty", NULL, val3_->DeepCopy())); 474 ValueStoreChange("qwerty", nullptr, val3_->CreateDeepCopy()));
455 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, to_set)); 475 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, to_set));
456 } 476 }
457 { 477 {
458 ValueStoreChangeList changes; 478 ValueStoreChangeList changes;
459 changes.push_back(ValueStoreChange(key1_, val2_->DeepCopy(), NULL)); 479 changes.push_back(
460 changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); 480 ValueStoreChange(key1_, val2_->CreateDeepCopy(), nullptr));
481 changes.push_back(
482 ValueStoreChange(key2_, val2_->CreateDeepCopy(), nullptr));
461 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_)); 483 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_));
462 } 484 }
463 { 485 {
464 std::vector<std::string> to_remove; 486 std::vector<std::string> to_remove;
465 to_remove.push_back(key1_); 487 to_remove.push_back(key1_);
466 to_remove.push_back("asdf"); 488 to_remove.push_back("asdf");
467 489
468 ValueStoreChangeList changes; 490 ValueStoreChangeList changes;
469 changes.push_back(ValueStoreChange("asdf", val1_->DeepCopy(), NULL)); 491 changes.push_back(
492 ValueStoreChange("asdf", val1_->CreateDeepCopy(), nullptr));
470 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(to_remove)); 493 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(to_remove));
471 } 494 }
472 { 495 {
473 ValueStoreChangeList changes; 496 ValueStoreChangeList changes;
474 changes.push_back(ValueStoreChange(key3_, val3_->DeepCopy(), NULL));
475 changes.push_back( 497 changes.push_back(
476 ValueStoreChange("qwerty", val3_->DeepCopy(), NULL)); 498 ValueStoreChange(key3_, val3_->CreateDeepCopy(), nullptr));
499 changes.push_back(
500 ValueStoreChange("qwerty", val3_->CreateDeepCopy(), nullptr));
477 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); 501 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear());
478 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); 502 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear());
479 } 503 }
480 } 504 }
OLDNEW
« no previous file with comments | « extensions/browser/value_store/value_store_change_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698