Commit fd145f9a authored by bashi@chromium.org's avatar bashi@chromium.org

IDL: Fix build bugs in IDL dictionary impl generation

- bindings_core_dictionary_impl_generated target should have
  core_dictionary_idl_files as inputs, otherwise IDL dictionaries
  impl classes won't get re-generated when they are edited.
- impl_includes_for_type() should check idl_type.base_type
  (not idl_type.name), otherwise the CG won't include necessary
  header files for nullable interface members.

BUG=321462

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

git-svn-id: svn://svn.chromium.org/blink/trunk@181884 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent a4246102
......@@ -140,6 +140,7 @@
'explicit_idl_action': 1,
'msvs_cygwin_shell': 0,
'inputs': [
'<@(core_dictionary_idl_files)',
'<@(core_testing_dictionary_idl_files)',
'<@(idl_lexer_parser_files)',
'<@(idl_cache_files)',
......
......@@ -422,8 +422,8 @@ def impl_includes_for_type(idl_type, interfaces_info):
if idl_type.is_string_type:
includes_for_type.add('wtf/text/WTFString.h')
if idl_type.name in interfaces_info:
interface_info = interfaces_info[idl_type.name]
if idl_type.base_type in interfaces_info:
interface_info = interfaces_info[idl_type.base_type]
includes_for_type.add(interface_info['include_path'])
return includes_for_type
......
......@@ -21,4 +21,5 @@ enum TestEnum { "foo", "bar", "baz" };
DOMString[] stringArrayMember;
sequence<DOMString> stringSequenceMember;
TestEnum enumMember = "foo";
Element? elementOrNullMember;
};
......@@ -23,6 +23,7 @@ void TestDictionary::trace(Visitor* visitor)
visitor->trace(m_testInterfaceGarbageCollectedOrNullMember);
visitor->trace(m_testInterfaceWillBeGarbageCollectedMember);
visitor->trace(m_testInterfaceWillBeGarbageCollectedOrNullMember);
visitor->trace(m_elementOrNullMember);
}
} // namespace blink
......@@ -11,6 +11,7 @@
#include "bindings/tests/idls/core/TestInterfaceGarbageCollected.h"
#include "bindings/tests/idls/core/TestInterfaceImplementation.h"
#include "bindings/tests/idls/core/TestInterfaceWillBeGarbageCollected.h"
#include "core/dom/Element.h"
#include "platform/heap/Handle.h"
#include "wtf/Vector.h"
#include "wtf/text/WTFString.h"
......@@ -66,6 +67,9 @@ public:
bool hasEnumMember() const { return !m_enumMember.isNull(); }
String enumMember() const { return m_enumMember; }
void setEnumMember(String value) { m_enumMember = value; }
bool hasElementOrNullMember() const { return m_elementOrNullMember; }
PassRefPtrWillBeRawPtr<Element> elementOrNullMember() const { return m_elementOrNullMember; }
void setElementOrNullMember(PassRefPtrWillBeRawPtr<Element> value) { m_elementOrNullMember = value; }
void trace(Visitor*);
......@@ -86,6 +90,7 @@ private:
Nullable<Vector<String> > m_stringArrayMember;
Nullable<Vector<String> > m_stringSequenceMember;
String m_enumMember;
RefPtrWillBeMember<Element> m_elementOrNullMember;
friend class V8TestDictionary;
};
......
......@@ -9,6 +9,7 @@
#include "bindings/core/v8/Dictionary.h"
#include "bindings/core/v8/ExceptionState.h"
#include "bindings/core/v8/V8Element.h"
#include "bindings/core/v8/V8TestInterface.h"
#include "bindings/core/v8/V8TestInterfaceGarbageCollected.h"
#include "bindings/core/v8/V8TestInterfaceWillBeGarbageCollected.h"
......@@ -38,6 +39,13 @@ TestDictionary* V8TestDictionary::toImpl(v8::Isolate* isolate, v8::Handle<v8::Va
exceptionState.rethrowV8Exception(block.Exception());
return 0;
}
RefPtrWillBeRawPtr<Element> elementOrNullMember;
if (DictionaryHelper::getWithUndefinedOrNullCheck(dictionary, "elementOrNullMember", elementOrNullMember)) {
impl->setElementOrNullMember(elementOrNullMember);
} else if (block.HasCaught()) {
exceptionState.rethrowV8Exception(block.Exception());
return 0;
}
String enumMember;
if (DictionaryHelper::getWithUndefinedOrNullCheck(dictionary, "enumMember", enumMember)) {
String string = enumMember;
......@@ -139,6 +147,8 @@ v8::Handle<v8::Value> toV8(TestDictionary* impl, v8::Handle<v8::Object> creation
v8Object->Set(v8String(isolate, "doubleOrNullMember"), v8::Number::New(isolate, impl->doubleOrNullMember()));
else
v8Object->Set(v8String(isolate, "doubleOrNullMember"), v8::Null(isolate));
if (impl->hasElementOrNullMember())
v8Object->Set(v8String(isolate, "elementOrNullMember"), toV8(impl->elementOrNullMember(), creationContext, isolate));
if (impl->hasEnumMember())
v8Object->Set(v8String(isolate, "enumMember"), v8String(isolate, impl->enumMember()));
else
......
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