Chromium Code Reviews| Index: extensions/browser/value_store/value_store_unittest.cc |
| diff --git a/extensions/browser/value_store/value_store_unittest.cc b/extensions/browser/value_store/value_store_unittest.cc |
| index 8c5f7aec06c6ff23f5291c323d1750229f4aae96..1a0d2a00d1e779876439d1b9322af57322e6cb7e 100644 |
| --- a/extensions/browser/value_store/value_store_unittest.cc |
| +++ b/extensions/browser/value_store/value_store_unittest.cc |
| @@ -4,6 +4,8 @@ |
| #include "extensions/browser/value_store/value_store_unittest.h" |
| +#include <utility> |
| + |
| #include "base/json/json_writer.h" |
| #include "base/memory/linked_ptr.h" |
| #include "base/values.h" |
| @@ -156,13 +158,13 @@ ValueStoreTest::ValueStoreTest() |
| set13_.insert(list13_.begin(), list13_.end()); |
| set123_.insert(list123_.begin(), list123_.end()); |
| - dict1_->Set(key1_, val1_->DeepCopy()); |
| - dict3_->Set(key3_, val3_->DeepCopy()); |
| - dict12_->Set(key1_, val1_->DeepCopy()); |
| - dict12_->Set(key2_, val2_->DeepCopy()); |
| - dict123_->Set(key1_, val1_->DeepCopy()); |
| - dict123_->Set(key2_, val2_->DeepCopy()); |
| - dict123_->Set(key3_, val3_->DeepCopy()); |
| + dict1_->Set(key1_, val1_->CreateDeepCopy()); |
| + dict3_->Set(key3_, val3_->CreateDeepCopy()); |
| + dict12_->Set(key1_, val1_->CreateDeepCopy()); |
| + dict12_->Set(key2_, val2_->CreateDeepCopy()); |
| + dict123_->Set(key1_, val1_->CreateDeepCopy()); |
| + dict123_->Set(key2_, val2_->CreateDeepCopy()); |
| + dict123_->Set(key3_, val3_->CreateDeepCopy()); |
| } |
| ValueStoreTest::~ValueStoreTest() {} |
| @@ -187,7 +189,8 @@ TEST_P(ValueStoreTest, GetWhenEmpty) { |
| TEST_P(ValueStoreTest, GetWithSingleValue) { |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); |
| + changes.push_back( |
| + ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy())); |
| EXPECT_PRED_FORMAT2(ChangesEq, |
| changes, storage_->Set(DEFAULTS, key1_, *val1_)); |
| } |
| @@ -203,8 +206,10 @@ TEST_P(ValueStoreTest, GetWithSingleValue) { |
| TEST_P(ValueStoreTest, GetWithMultipleValues) { |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); |
| - changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); |
| + changes.push_back( |
| + ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy())); |
| + changes.push_back( |
| + ValueStoreChange(key2_, nullptr, val2_->CreateDeepCopy())); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); |
| } |
| @@ -228,7 +233,8 @@ TEST_P(ValueStoreTest, RemoveWithSingleValue) { |
| storage_->Set(DEFAULTS, *dict1_); |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); |
| + changes.push_back( |
| + ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr)); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_)); |
| } |
| @@ -243,7 +249,8 @@ TEST_P(ValueStoreTest, RemoveWithMultipleValues) { |
| storage_->Set(DEFAULTS, *dict123_); |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key3_, val3_->DeepCopy(), NULL)); |
| + changes.push_back( |
| + ValueStoreChange(key3_, val3_->CreateDeepCopy(), nullptr)); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key3_)); |
| } |
| @@ -258,8 +265,10 @@ TEST_P(ValueStoreTest, RemoveWithMultipleValues) { |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); |
| - changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); |
| + changes.push_back( |
| + ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr)); |
| + changes.push_back( |
| + ValueStoreChange(key2_, val2_->CreateDeepCopy(), nullptr)); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_)); |
| } |
| @@ -277,9 +286,10 @@ TEST_P(ValueStoreTest, SetWhenOverwriting) { |
| storage_->Set(DEFAULTS, key1_, *val2_); |
| { |
| ValueStoreChangeList changes; |
| + changes.push_back(ValueStoreChange(key1_, val2_->CreateDeepCopy(), |
| + val1_->CreateDeepCopy())); |
| changes.push_back( |
| - ValueStoreChange(key1_, val2_->DeepCopy(), val1_->DeepCopy())); |
| - changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); |
| + ValueStoreChange(key2_, nullptr, val2_->CreateDeepCopy())); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); |
| } |
| @@ -306,8 +316,10 @@ TEST_P(ValueStoreTest, ClearWhenNotEmpty) { |
| storage_->Set(DEFAULTS, *dict12_); |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); |
| - changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); |
| + changes.push_back( |
| + ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr)); |
| + changes.push_back( |
| + ValueStoreChange(key2_, val2_->CreateDeepCopy(), nullptr)); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); |
| } |
| @@ -325,14 +337,14 @@ TEST_P(ValueStoreTest, DotsInKeyNames) { |
| std::vector<std::string> dot_list; |
| dot_list.push_back(dot_key); |
| base::DictionaryValue dot_dict; |
| - dot_dict.SetWithoutPathExpansion(dot_key, dot_value.DeepCopy()); |
| + dot_dict.SetWithoutPathExpansion(dot_key, dot_value.CreateDeepCopy()); |
| EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(dot_key)); |
| { |
| ValueStoreChangeList changes; |
| changes.push_back( |
| - ValueStoreChange(dot_key, NULL, dot_value.DeepCopy())); |
| + ValueStoreChange(dot_key, nullptr, dot_value.CreateDeepCopy())); |
| EXPECT_PRED_FORMAT2(ChangesEq, |
| changes, storage_->Set(DEFAULTS, dot_key, dot_value)); |
| } |
| @@ -344,7 +356,7 @@ TEST_P(ValueStoreTest, DotsInKeyNames) { |
| { |
| ValueStoreChangeList changes; |
| changes.push_back( |
| - ValueStoreChange(dot_key, dot_value.DeepCopy(), NULL)); |
| + ValueStoreChange(dot_key, dot_value.CreateDeepCopy(), nullptr)); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_key)); |
| } |
| EXPECT_PRED_FORMAT2(ChangesEq, |
| @@ -352,7 +364,7 @@ TEST_P(ValueStoreTest, DotsInKeyNames) { |
| { |
| ValueStoreChangeList changes; |
| changes.push_back( |
| - ValueStoreChange(dot_key, NULL, dot_value.DeepCopy())); |
| + ValueStoreChange(dot_key, nullptr, dot_value.CreateDeepCopy())); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, dot_dict)); |
| } |
| @@ -362,7 +374,7 @@ TEST_P(ValueStoreTest, DotsInKeyNames) { |
| { |
| ValueStoreChangeList changes; |
| changes.push_back( |
| - ValueStoreChange(dot_key, dot_value.DeepCopy(), NULL)); |
| + ValueStoreChange(dot_key, dot_value.CreateDeepCopy(), nullptr)); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_list)); |
| } |
| @@ -372,14 +384,15 @@ TEST_P(ValueStoreTest, DotsInKeyNames) { |
| TEST_P(ValueStoreTest, DotsInKeyNamesWithDicts) { |
| base::DictionaryValue outer_dict; |
| - base::DictionaryValue* inner_dict = new base::DictionaryValue(); |
| - outer_dict.Set("foo", inner_dict); |
| + std::unique_ptr<base::DictionaryValue> inner_dict( |
| + new base::DictionaryValue()); |
| + outer_dict.Set("foo", std::move(inner_dict)); |
| 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.
|
| { |
| ValueStoreChangeList changes; |
| changes.push_back( |
| - ValueStoreChange("foo", NULL, inner_dict->DeepCopy())); |
| + ValueStoreChange("foo", nullptr, inner_dict->CreateDeepCopy())); |
| EXPECT_PRED_FORMAT2(ChangesEq, |
| changes, storage_->Set(DEFAULTS, outer_dict)); |
| } |
| @@ -401,63 +414,72 @@ TEST_P(ValueStoreTest, ComplexChangedKeysScenarios) { |
| ValueStoreChangeList(), storage_->Set(DEFAULTS, key1_, *val1_)); |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange( |
| - key1_, val1_->DeepCopy(), val2_->DeepCopy())); |
| + changes.push_back(ValueStoreChange(key1_, val1_->CreateDeepCopy(), |
| + val2_->CreateDeepCopy())); |
| EXPECT_PRED_FORMAT2(ChangesEq, |
| changes, storage_->Set(DEFAULTS, key1_, *val2_)); |
| } |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key1_, val2_->DeepCopy(), NULL)); |
| + changes.push_back( |
| + ValueStoreChange(key1_, val2_->CreateDeepCopy(), nullptr)); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_)); |
| EXPECT_PRED_FORMAT2(ChangesEq, |
| ValueStoreChangeList(), storage_->Remove(key1_)); |
| } |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); |
| + changes.push_back( |
| + ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy())); |
| EXPECT_PRED_FORMAT2(ChangesEq, |
| changes, storage_->Set(DEFAULTS, key1_, *val1_)); |
| } |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); |
| + changes.push_back( |
| + ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr)); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); |
| EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); |
| } |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); |
| - changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); |
| + changes.push_back( |
| + ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy())); |
| + changes.push_back( |
| + ValueStoreChange(key2_, nullptr, val2_->CreateDeepCopy())); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); |
| EXPECT_PRED_FORMAT2(ChangesEq, |
| ValueStoreChangeList(), storage_->Set(DEFAULTS, *dict12_)); |
| } |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key3_, NULL, val3_->DeepCopy())); |
| + changes.push_back( |
| + ValueStoreChange(key3_, nullptr, val3_->CreateDeepCopy())); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict123_)); |
| } |
| { |
| base::DictionaryValue to_set; |
| - to_set.Set(key1_, val2_->DeepCopy()); |
| - to_set.Set(key2_, val2_->DeepCopy()); |
| - to_set.Set("asdf", val1_->DeepCopy()); |
| - to_set.Set("qwerty", val3_->DeepCopy()); |
| + to_set.Set(key1_, val2_->CreateDeepCopy()); |
| + to_set.Set(key2_, val2_->CreateDeepCopy()); |
| + to_set.Set("asdf", val1_->CreateDeepCopy()); |
| + to_set.Set("qwerty", val3_->CreateDeepCopy()); |
| ValueStoreChangeList changes; |
| + changes.push_back(ValueStoreChange(key1_, val1_->CreateDeepCopy(), |
| + val2_->CreateDeepCopy())); |
| changes.push_back( |
| - ValueStoreChange(key1_, val1_->DeepCopy(), val2_->DeepCopy())); |
| - changes.push_back(ValueStoreChange("asdf", NULL, val1_->DeepCopy())); |
| + ValueStoreChange("asdf", nullptr, val1_->CreateDeepCopy())); |
| changes.push_back( |
| - ValueStoreChange("qwerty", NULL, val3_->DeepCopy())); |
| + ValueStoreChange("qwerty", nullptr, val3_->CreateDeepCopy())); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, to_set)); |
| } |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key1_, val2_->DeepCopy(), NULL)); |
| - changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); |
| + changes.push_back( |
| + ValueStoreChange(key1_, val2_->CreateDeepCopy(), nullptr)); |
| + changes.push_back( |
| + ValueStoreChange(key2_, val2_->CreateDeepCopy(), nullptr)); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_)); |
| } |
| { |
| @@ -466,14 +488,16 @@ TEST_P(ValueStoreTest, ComplexChangedKeysScenarios) { |
| to_remove.push_back("asdf"); |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange("asdf", val1_->DeepCopy(), NULL)); |
| + changes.push_back( |
| + ValueStoreChange("asdf", val1_->CreateDeepCopy(), nullptr)); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(to_remove)); |
| } |
| { |
| ValueStoreChangeList changes; |
| - changes.push_back(ValueStoreChange(key3_, val3_->DeepCopy(), NULL)); |
| changes.push_back( |
| - ValueStoreChange("qwerty", val3_->DeepCopy(), NULL)); |
| + ValueStoreChange(key3_, val3_->CreateDeepCopy(), nullptr)); |
| + changes.push_back( |
| + ValueStoreChange("qwerty", val3_->CreateDeepCopy(), nullptr)); |
| EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); |
| EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); |
| } |