possible leak here. use `scoped_ptr<base::Value>` here