Add some useful features to base::Values:
- Typed Append methods to ListValue (AppendString etc) including AppendStrings.
- Typed SetWithoutPathExpansion methods (SetStringWithoutPathExpansion etc).

The latter is important because it's a common mistake to use Set rather than
SetWithoutPathExpansion; the existence of these extra methods should help.

Review URL: https://chromiumcodereview.appspot.com/10914246

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@156716 0039d316-1c4b-4281-b951-d872f2087c98


CrOS-Libchrome-Original-Commit: 095812b2a635835a02d7084ea993b62f94528187
diff --git a/base/values.cc b/base/values.cc
index 1063eff..8453bb4 100644
--- a/base/values.cc
+++ b/base/values.cc
@@ -443,6 +443,31 @@
   }
 }
 
+void DictionaryValue::SetBooleanWithoutPathExpansion(
+    const std::string& path, bool in_value) {
+  SetWithoutPathExpansion(path, CreateBooleanValue(in_value));
+}
+
+void DictionaryValue::SetIntegerWithoutPathExpansion(
+    const std::string& path, int in_value) {
+  SetWithoutPathExpansion(path, CreateIntegerValue(in_value));
+}
+
+void DictionaryValue::SetDoubleWithoutPathExpansion(
+    const std::string& path, double in_value) {
+  SetWithoutPathExpansion(path, CreateDoubleValue(in_value));
+}
+
+void DictionaryValue::SetStringWithoutPathExpansion(
+    const std::string& path, const std::string& in_value) {
+  SetWithoutPathExpansion(path, CreateStringValue(in_value));
+}
+
+void DictionaryValue::SetStringWithoutPathExpansion(
+    const std::string& path, const string16& in_value) {
+  SetWithoutPathExpansion(path, CreateStringValue(in_value));
+}
+
 bool DictionaryValue::Get(
     const std::string& path, const Value** out_value) const {
   DCHECK(IsStringUTF8(path));
@@ -987,6 +1012,40 @@
   list_.push_back(in_value);
 }
 
+void ListValue::AppendBoolean(bool in_value) {
+  Append(CreateBooleanValue(in_value));
+}
+
+void ListValue::AppendInteger(int in_value) {
+  Append(CreateIntegerValue(in_value));
+}
+
+void ListValue::AppendDouble(double in_value) {
+  Append(CreateDoubleValue(in_value));
+}
+
+void ListValue::AppendString(const std::string& in_value) {
+  Append(CreateStringValue(in_value));
+}
+
+void ListValue::AppendString(const string16& in_value) {
+  Append(CreateStringValue(in_value));
+}
+
+void ListValue::AppendStrings(const std::vector<std::string>& in_values) {
+  for (std::vector<std::string>::const_iterator it = in_values.begin();
+       it != in_values.end(); ++it) {
+    AppendString(*it);
+  }
+}
+
+void ListValue::AppendStrings(const std::vector<string16>& in_values) {
+  for (std::vector<string16>::const_iterator it = in_values.begin();
+       it != in_values.end(); ++it) {
+    AppendString(*it);
+  }
+}
+
 bool ListValue::AppendIfNotPresent(Value* in_value) {
   DCHECK(in_value);
   for (ValueVector::const_iterator i(list_.begin()); i != list_.end(); ++i) {