| Index: values.cc | 
| diff --git a/values.cc b/values.cc | 
| index 5374d6c620e5c85acbdc2cf19fde63665f2d02f7..aa8de36d0aba9f06154c9b5dac1cd128378c832e 100644 | 
| --- a/values.cc | 
| +++ b/values.cc | 
| @@ -351,6 +351,16 @@ bool BinaryValue::Equals(const Value* other) const { | 
|  | 
| ///////////////////// DictionaryValue //////////////////// | 
|  | 
| +// static | 
| +scoped_ptr<DictionaryValue> DictionaryValue::From(scoped_ptr<Value> value) { | 
| +  DictionaryValue* out; | 
| +  if (value && value->GetAsDictionary(&out)) { | 
| +    ignore_result(value.release()); | 
| +    return make_scoped_ptr(out); | 
| +  } | 
| +  return nullptr; | 
| +} | 
| + | 
| DictionaryValue::DictionaryValue() | 
| : Value(TYPE_DICTIONARY) { | 
| } | 
| @@ -869,6 +879,16 @@ bool DictionaryValue::Equals(const Value* other) const { | 
|  | 
| ///////////////////// ListValue //////////////////// | 
|  | 
| +// static | 
| +scoped_ptr<ListValue> ListValue::From(scoped_ptr<Value> value) { | 
| +  ListValue* out; | 
| +  if (value && value->GetAsList(&out)) { | 
| +    ignore_result(value.release()); | 
| +    return make_scoped_ptr(out); | 
| +  } | 
| +  return nullptr; | 
| +} | 
| + | 
| ListValue::ListValue() : Value(TYPE_LIST) { | 
| } | 
|  | 
|  |