Commit 08442d50 authored by bashi@chromium.org's avatar bashi@chromium.org

IDL: Set dictionary default values in impl constructor

The current implementation sets default values in
V8T::toNative(). However, there are some code paths in which
we don't call V8T::toNative(). For example, if an IDL dictionary
is an optional argument and it isn't given, the binding layer
creates impl class by calling T::create() and passes it to
blink without calling V8T::toNative(). Since all dictionary impl
class instances should have default values, we should sets
default values in impl constructor.

BUG=321462

Review URL: https://codereview.chromium.org/479563003

git-svn-id: svn://svn.chromium.org/blink/trunk@180384 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent cef1e777
...@@ -121,8 +121,13 @@ def member_impl_context(member, interfaces_info, header_includes): ...@@ -121,8 +121,13 @@ def member_impl_context(member, interfaces_info, header_includes):
return v8_types.cpp_template_type('Nullable', member_cpp_type) return v8_types.cpp_template_type('Nullable', member_cpp_type)
return member_cpp_type return member_cpp_type
cpp_default_value = None
if member.default_value and not member.default_value.is_null:
cpp_default_value = str(member.default_value)
header_includes.update(idl_type.impl_includes_for_type(interfaces_info)) header_includes.update(idl_type.impl_includes_for_type(interfaces_info))
return { return {
'cpp_default_value': cpp_default_value,
'getter_expression': getter_expression(), 'getter_expression': getter_expression(),
'has_method_expression': has_method_expression(), 'has_method_expression': has_method_expression(),
'has_method_name': has_method_name_for_dictionary_member(member), 'has_method_name': has_method_name_for_dictionary_member(member),
......
...@@ -16,6 +16,9 @@ namespace blink { ...@@ -16,6 +16,9 @@ namespace blink {
{# Constructor #} {# Constructor #}
{{cpp_class}}::{{cpp_class}}() {{cpp_class}}::{{cpp_class}}()
{ {
{% for member in members if member.cpp_default_value %}
{{member.setter_name}}({{member.cpp_default_value}});
{% endfor %}
} }
void {{cpp_class}}::trace(Visitor* visitor) void {{cpp_class}}::trace(Visitor* visitor)
......
...@@ -23,7 +23,7 @@ public: ...@@ -23,7 +23,7 @@ public:
{% for member in members %} {% for member in members %}
bool {{member.has_method_name}}() const { return {{member.has_method_expression}}; } bool {{member.has_method_name}}() const { return {{member.has_method_expression}}; }
{{member.rvalue_cpp_type}} {{member.name}}() const { return {{member.getter_expression}}; } {{member.rvalue_cpp_type}} {{member.name}}() const { return {{member.getter_expression}}; }
void {{member.setter_name}}({{member.rvalue_cpp_type}} value) { m_{{member.name}} = value;} void {{member.setter_name}}({{member.rvalue_cpp_type}} value) { m_{{member.name}} = value; }
{% endfor %} {% endfor %}
void trace(Visitor*); void trace(Visitor*);
......
...@@ -23,10 +23,6 @@ namespace blink { ...@@ -23,10 +23,6 @@ namespace blink {
{{member.cpp_type}} {{member.name}}; {{member.cpp_type}} {{member.name}};
if (DictionaryHelper::get(dictionary, "{{member.name}}", {{member.name}})) if (DictionaryHelper::get(dictionary, "{{member.name}}", {{member.name}}))
impl->{{member.setter_name}}({{member.name}}); impl->{{member.setter_name}}({{member.name}});
{% if member.cpp_default_value %}
else
impl->{{member.setter_name}}({{member.cpp_default_value}});
{% endif %}
{% endfor %} {% endfor %}
return impl; return impl;
} }
......
...@@ -12,6 +12,8 @@ namespace blink { ...@@ -12,6 +12,8 @@ namespace blink {
TestDictionary::TestDictionary() TestDictionary::TestDictionary()
{ {
setLongMember(1);
setStringOrNullMember(String("default string value"));
} }
void TestDictionary::trace(Visitor* visitor) void TestDictionary::trace(Visitor* visitor)
......
...@@ -26,43 +26,43 @@ public: ...@@ -26,43 +26,43 @@ public:
bool hasBooleanMember() const { return !m_booleanMember.isNull(); } bool hasBooleanMember() const { return !m_booleanMember.isNull(); }
bool booleanMember() const { return m_booleanMember.get(); } bool booleanMember() const { return m_booleanMember.get(); }
void setBooleanMember(bool value) { m_booleanMember = value;} void setBooleanMember(bool value) { m_booleanMember = value; }
bool hasLongMember() const { return !m_longMember.isNull(); } bool hasLongMember() const { return !m_longMember.isNull(); }
int longMember() const { return m_longMember.get(); } int longMember() const { return m_longMember.get(); }
void setLongMember(int value) { m_longMember = value;} void setLongMember(int value) { m_longMember = value; }
bool hasStringMember() const { return !m_stringMember.isNull(); } bool hasStringMember() const { return !m_stringMember.isNull(); }
String stringMember() const { return m_stringMember; } String stringMember() const { return m_stringMember; }
void setStringMember(String value) { m_stringMember = value;} void setStringMember(String value) { m_stringMember = value; }
bool hasTestInterfaceMember() const { return m_testInterfaceMember; } bool hasTestInterfaceMember() const { return m_testInterfaceMember; }
PassRefPtr<TestInterfaceImplementation> testInterfaceMember() const { return m_testInterfaceMember; } PassRefPtr<TestInterfaceImplementation> testInterfaceMember() const { return m_testInterfaceMember; }
void setTestInterfaceMember(PassRefPtr<TestInterfaceImplementation> value) { m_testInterfaceMember = value;} void setTestInterfaceMember(PassRefPtr<TestInterfaceImplementation> value) { m_testInterfaceMember = value; }
bool hasDoubleOrNullMember() const { return !m_doubleOrNullMember.isNull(); } bool hasDoubleOrNullMember() const { return !m_doubleOrNullMember.isNull(); }
double doubleOrNullMember() const { return m_doubleOrNullMember.get(); } double doubleOrNullMember() const { return m_doubleOrNullMember.get(); }
void setDoubleOrNullMember(double value) { m_doubleOrNullMember = value;} void setDoubleOrNullMember(double value) { m_doubleOrNullMember = value; }
bool hasStringOrNullMember() const { return !m_stringOrNullMember.isNull(); } bool hasStringOrNullMember() const { return !m_stringOrNullMember.isNull(); }
String stringOrNullMember() const { return m_stringOrNullMember; } String stringOrNullMember() const { return m_stringOrNullMember; }
void setStringOrNullMember(String value) { m_stringOrNullMember = value;} void setStringOrNullMember(String value) { m_stringOrNullMember = value; }
bool hasTestInterfaceOrNullMember() const { return m_testInterfaceOrNullMember; } bool hasTestInterfaceOrNullMember() const { return m_testInterfaceOrNullMember; }
PassRefPtr<TestInterfaceImplementation> testInterfaceOrNullMember() const { return m_testInterfaceOrNullMember; } PassRefPtr<TestInterfaceImplementation> testInterfaceOrNullMember() const { return m_testInterfaceOrNullMember; }
void setTestInterfaceOrNullMember(PassRefPtr<TestInterfaceImplementation> value) { m_testInterfaceOrNullMember = value;} void setTestInterfaceOrNullMember(PassRefPtr<TestInterfaceImplementation> value) { m_testInterfaceOrNullMember = value; }
bool hasTestInterfaceGarbageCollectedMember() const { return m_testInterfaceGarbageCollectedMember; } bool hasTestInterfaceGarbageCollectedMember() const { return m_testInterfaceGarbageCollectedMember; }
RawPtr<TestInterfaceGarbageCollected> testInterfaceGarbageCollectedMember() const { return m_testInterfaceGarbageCollectedMember; } RawPtr<TestInterfaceGarbageCollected> testInterfaceGarbageCollectedMember() const { return m_testInterfaceGarbageCollectedMember; }
void setTestInterfaceGarbageCollectedMember(RawPtr<TestInterfaceGarbageCollected> value) { m_testInterfaceGarbageCollectedMember = value;} void setTestInterfaceGarbageCollectedMember(RawPtr<TestInterfaceGarbageCollected> value) { m_testInterfaceGarbageCollectedMember = value; }
bool hasTestInterfaceGarbageCollectedOrNullMember() const { return m_testInterfaceGarbageCollectedOrNullMember; } bool hasTestInterfaceGarbageCollectedOrNullMember() const { return m_testInterfaceGarbageCollectedOrNullMember; }
RawPtr<TestInterfaceGarbageCollected> testInterfaceGarbageCollectedOrNullMember() const { return m_testInterfaceGarbageCollectedOrNullMember; } RawPtr<TestInterfaceGarbageCollected> testInterfaceGarbageCollectedOrNullMember() const { return m_testInterfaceGarbageCollectedOrNullMember; }
void setTestInterfaceGarbageCollectedOrNullMember(RawPtr<TestInterfaceGarbageCollected> value) { m_testInterfaceGarbageCollectedOrNullMember = value;} void setTestInterfaceGarbageCollectedOrNullMember(RawPtr<TestInterfaceGarbageCollected> value) { m_testInterfaceGarbageCollectedOrNullMember = value; }
bool hasTestInterfaceWillBeGarbageCollectedMember() const { return m_testInterfaceWillBeGarbageCollectedMember; } bool hasTestInterfaceWillBeGarbageCollectedMember() const { return m_testInterfaceWillBeGarbageCollectedMember; }
PassRefPtrWillBeRawPtr<TestInterfaceWillBeGarbageCollected> testInterfaceWillBeGarbageCollectedMember() const { return m_testInterfaceWillBeGarbageCollectedMember; } PassRefPtrWillBeRawPtr<TestInterfaceWillBeGarbageCollected> testInterfaceWillBeGarbageCollectedMember() const { return m_testInterfaceWillBeGarbageCollectedMember; }
void setTestInterfaceWillBeGarbageCollectedMember(PassRefPtrWillBeRawPtr<TestInterfaceWillBeGarbageCollected> value) { m_testInterfaceWillBeGarbageCollectedMember = value;} void setTestInterfaceWillBeGarbageCollectedMember(PassRefPtrWillBeRawPtr<TestInterfaceWillBeGarbageCollected> value) { m_testInterfaceWillBeGarbageCollectedMember = value; }
bool hasTestInterfaceWillBeGarbageCollectedOrNullMember() const { return m_testInterfaceWillBeGarbageCollectedOrNullMember; } bool hasTestInterfaceWillBeGarbageCollectedOrNullMember() const { return m_testInterfaceWillBeGarbageCollectedOrNullMember; }
PassRefPtrWillBeRawPtr<TestInterfaceWillBeGarbageCollected> testInterfaceWillBeGarbageCollectedOrNullMember() const { return m_testInterfaceWillBeGarbageCollectedOrNullMember; } PassRefPtrWillBeRawPtr<TestInterfaceWillBeGarbageCollected> testInterfaceWillBeGarbageCollectedOrNullMember() const { return m_testInterfaceWillBeGarbageCollectedOrNullMember; }
void setTestInterfaceWillBeGarbageCollectedOrNullMember(PassRefPtrWillBeRawPtr<TestInterfaceWillBeGarbageCollected> value) { m_testInterfaceWillBeGarbageCollectedOrNullMember = value;} void setTestInterfaceWillBeGarbageCollectedOrNullMember(PassRefPtrWillBeRawPtr<TestInterfaceWillBeGarbageCollected> value) { m_testInterfaceWillBeGarbageCollectedOrNullMember = value; }
bool hasStringArrayMember() const { return !m_stringArrayMember.isNull(); } bool hasStringArrayMember() const { return !m_stringArrayMember.isNull(); }
const Vector<String>& stringArrayMember() const { return m_stringArrayMember.get(); } const Vector<String>& stringArrayMember() const { return m_stringArrayMember.get(); }
void setStringArrayMember(const Vector<String>& value) { m_stringArrayMember = value;} void setStringArrayMember(const Vector<String>& value) { m_stringArrayMember = value; }
bool hasStringSequenceMember() const { return !m_stringSequenceMember.isNull(); } bool hasStringSequenceMember() const { return !m_stringSequenceMember.isNull(); }
const Vector<String>& stringSequenceMember() const { return m_stringSequenceMember.get(); } const Vector<String>& stringSequenceMember() const { return m_stringSequenceMember.get(); }
void setStringSequenceMember(const Vector<String>& value) { m_stringSequenceMember = value;} void setStringSequenceMember(const Vector<String>& value) { m_stringSequenceMember = value; }
void trace(Visitor*); void trace(Visitor*);
......
...@@ -29,8 +29,6 @@ TestDictionary* V8TestDictionary::toNative(v8::Isolate* isolate, v8::Handle<v8:: ...@@ -29,8 +29,6 @@ TestDictionary* V8TestDictionary::toNative(v8::Isolate* isolate, v8::Handle<v8::
int longMember; int longMember;
if (DictionaryHelper::get(dictionary, "longMember", longMember)) if (DictionaryHelper::get(dictionary, "longMember", longMember))
impl->setLongMember(longMember); impl->setLongMember(longMember);
else
impl->setLongMember(1);
Vector<String> stringArrayMember; Vector<String> stringArrayMember;
if (DictionaryHelper::get(dictionary, "stringArrayMember", stringArrayMember)) if (DictionaryHelper::get(dictionary, "stringArrayMember", stringArrayMember))
impl->setStringArrayMember(stringArrayMember); impl->setStringArrayMember(stringArrayMember);
...@@ -40,8 +38,6 @@ TestDictionary* V8TestDictionary::toNative(v8::Isolate* isolate, v8::Handle<v8:: ...@@ -40,8 +38,6 @@ TestDictionary* V8TestDictionary::toNative(v8::Isolate* isolate, v8::Handle<v8::
String stringOrNullMember; String stringOrNullMember;
if (DictionaryHelper::get(dictionary, "stringOrNullMember", stringOrNullMember)) if (DictionaryHelper::get(dictionary, "stringOrNullMember", stringOrNullMember))
impl->setStringOrNullMember(stringOrNullMember); impl->setStringOrNullMember(stringOrNullMember);
else
impl->setStringOrNullMember(String("default string value"));
Vector<String> stringSequenceMember; Vector<String> stringSequenceMember;
if (DictionaryHelper::get(dictionary, "stringSequenceMember", stringSequenceMember)) if (DictionaryHelper::get(dictionary, "stringSequenceMember", stringSequenceMember))
impl->setStringSequenceMember(stringSequenceMember); impl->setStringSequenceMember(stringSequenceMember);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment