| Index: tools/json_schema_compiler/cpp_type_generator.py
|
| diff --git a/tools/json_schema_compiler/cpp_type_generator.py b/tools/json_schema_compiler/cpp_type_generator.py
|
| index 82113ce94a56e5bc780e69f8b8bf761396fafe66..23460c63699c6a6a8845a2978794d5103585c475 100644
|
| --- a/tools/json_schema_compiler/cpp_type_generator.py
|
| +++ b/tools/json_schema_compiler/cpp_type_generator.py
|
| @@ -122,11 +122,9 @@ class CppTypeGenerator(object):
|
| if not self.FollowRef(type_).property_type == PropertyType.ENUM:
|
| is_base_value = (cpp_type == 'base::Value' or
|
| cpp_type == 'base::DictionaryValue')
|
| - # Only wrap the object in a linked_ptr if it's a base::Value.
|
| - # TODO(devlin): Change this to scoped_ptr.
|
| - if is_in_container and is_base_value:
|
| - cpp_type = 'linked_ptr<%s>' % cpp_util.PadForGenerics(cpp_type)
|
| - elif is_ptr:
|
| + # Wrap ptrs and base::Values in containers (which aren't movable) in
|
| + # scoped_ptrs.
|
| + if is_ptr or (is_in_container and is_base_value):
|
| cpp_type = 'scoped_ptr<%s>' % cpp_util.PadForGenerics(cpp_type)
|
|
|
| return cpp_type
|
| @@ -234,12 +232,9 @@ class CppTypeGenerator(object):
|
| if type_.property_type == PropertyType.REF:
|
| deps.add(_TypeDependency(self._FindType(type_.ref_type), hard=hard))
|
| elif type_.property_type == PropertyType.ARRAY:
|
| - # Non-copyable types are not hard because they are wrapped in linked_ptrs
|
| - # when generated. Otherwise they're typedefs, so they're hard (though we
|
| - # could generate those typedefs in every dependent namespace, but that
|
| - # seems weird).
|
| - deps = self._TypeDependencies(type_.item_type,
|
| - hard=self.IsCopyable(type_.item_type))
|
| + # Types in containers are hard dependencies because they are stored
|
| + # directly and use move semantics.
|
| + deps = self._TypeDependencies(type_.item_type, hard=hard)
|
| elif type_.property_type == PropertyType.CHOICES:
|
| for type_ in type_.choices:
|
| deps |= self._TypeDependencies(type_, hard=self.IsCopyable(type_))
|
|
|