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):
return v8_types.cpp_template_type('Nullable', 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))
return {
'cpp_default_value': cpp_default_value,
'getter_expression': getter_expression(),
'has_method_expression': has_method_expression(),
'has_method_name': has_method_name_for_dictionary_member(member),
......
......@@ -16,6 +16,9 @@ namespace blink {
{# Constructor #}
{{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)
......
......@@ -23,7 +23,7 @@ public:
{% for member in members %}
bool {{member.has_method_name}}() const { return {{member.has_method_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 %}
void trace(Visitor*);
......
......@@ -23,10 +23,6 @@ namespace blink {
{{member.cpp_type}} {{member.name}};
if (DictionaryHelper::get(dictionary, "{{member.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 %}
return impl;
}
......
......@@ -12,6 +12,8 @@ namespace blink {
TestDictionary::TestDictionary()
{
setLongMember(1);
setStringOrNullMember(String("default string value"));
}
void TestDictionary::trace(Visitor* visitor)
......
......@@ -26,43 +26,43 @@ public:
bool hasBooleanMember() const { return !m_booleanMember.isNull(); }
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(); }
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(); }
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; }
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(); }
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(); }
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; }
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; }
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; }
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; }
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; }
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(); }
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(); }
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*);
......
......@@ -29,8 +29,6 @@ TestDictionary* V8TestDictionary::toNative(v8::Isolate* isolate, v8::Handle<v8::
int longMember;
if (DictionaryHelper::get(dictionary, "longMember", longMember))
impl->setLongMember(longMember);
else
impl->setLongMember(1);
Vector<String> stringArrayMember;
if (DictionaryHelper::get(dictionary, "stringArrayMember", stringArrayMember))
impl->setStringArrayMember(stringArrayMember);
......@@ -40,8 +38,6 @@ TestDictionary* V8TestDictionary::toNative(v8::Isolate* isolate, v8::Handle<v8::
String stringOrNullMember;
if (DictionaryHelper::get(dictionary, "stringOrNullMember", stringOrNullMember))
impl->setStringOrNullMember(stringOrNullMember);
else
impl->setStringOrNullMember(String("default string value"));
Vector<String> stringSequenceMember;
if (DictionaryHelper::get(dictionary, "stringSequenceMember", 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