Index: tools/dom/scripts/systemnative.py |
diff --git a/tools/dom/scripts/systemnative.py b/tools/dom/scripts/systemnative.py |
index d1c9c3f0ba60182ec2a3ee5cf41416f3a789fe67..36f73cc1951426722c0d57d3155424910a615a90 100644 |
--- a/tools/dom/scripts/systemnative.py |
+++ b/tools/dom/scripts/systemnative.py |
@@ -39,6 +39,7 @@ _cpp_callback_map = { |
('DOMWindow', 'clearTimeout'): 'DOMWindowTimers', |
('DOMWindow', 'clearInterval'): 'DOMWindowTimers', |
('DOMWindow', 'createImageBitmap'): 'ImageBitmapFactories', |
+ ('Element', 'animate'): 'ElementAnimation', |
('HTMLInputElement', 'webkitEntries'): 'HTMLInputElementFileSystem', |
('HTMLVideoElement', 'getVideoPlaybackQuality'): 'HTMLVideoElementMediaSource', |
('Navigator', 'doNotTrack'): 'NavigatorDoNotTrack', |
@@ -199,6 +200,7 @@ class DartiumBackend(HtmlDartGenerator): |
class_name = 'Dart%s' % self._interface.id |
for operation in self._interface.operations: |
function_name = operation.id |
+ return_type = self.SecureOutputType(operation.type.id) |
parameters = [] |
arguments = [] |
if operation.ext_attrs.get('CallWith') == 'ThisValue': |
@@ -212,20 +214,28 @@ class DartiumBackend(HtmlDartGenerator): |
conversion_includes.extend(argument_type_info.conversion_includes()) |
# FIXME(vsm): Handle ThisValue attribute. |
+ if (return_type == 'void'): |
+ ret = '' |
+ else: |
+ ret = ' return 0;\n' |
+ |
if operation.ext_attrs.get('CallWith') == 'ThisValue': |
cpp_header_handlers_emitter.Emit( |
'\n' |
- ' virtual bool $FUNCTION($PARAMETERS) {\n' |
+ ' virtual $RETURN_TYPE $FUNCTION($PARAMETERS) {\n' |
' DART_UNIMPLEMENTED();\n' |
- ' return false;\n' |
+ '$RET' |
' }\n', |
+ RETURN_TYPE=return_type, |
+ RET=ret, |
FUNCTION=function_name, |
PARAMETERS=', '.join(parameters)) |
continue |
cpp_header_handlers_emitter.Emit( |
'\n' |
- ' virtual bool $FUNCTION($PARAMETERS);\n', |
+ ' virtual $RETURN_TYPE $FUNCTION($PARAMETERS);\n', |
+ RETURN_TYPE=return_type, |
FUNCTION=function_name, |
PARAMETERS=', '.join(parameters)) |
@@ -236,17 +246,26 @@ class DartiumBackend(HtmlDartGenerator): |
arguments_declaration = 'Dart_Handle arguments[] = { %s }' % ', '.join(arguments) |
if not len(arguments): |
arguments_declaration = 'Dart_Handle* arguments = 0' |
+ if (return_type == 'void'): |
+ ret1 = 'return' |
+ ret2 = '' |
+ else: |
+ ret1 = 'return 0' |
+ ret2 = ' return' |
cpp_impl_handlers_emitter.Emit( |
'\n' |
- 'bool $CLASS_NAME::$FUNCTION($PARAMETERS)\n' |
+ '$RETURN_TYPE $CLASS_NAME::$FUNCTION($PARAMETERS)\n' |
'{\n' |
' if (!m_callback.isIsolateAlive())\n' |
- ' return false;\n' |
+ ' $RET1;\n' |
' DartIsolateScope scope(m_callback.isolate());\n' |
' DartApiScope apiScope;\n' |
' $ARGUMENTS_DECLARATION;\n' |
- ' return m_callback.handleEvent($ARGUMENT_COUNT, arguments);\n' |
+ ' $RET2 m_callback.handleEvent($ARGUMENT_COUNT, arguments);\n' |
'}\n', |
+ RETURN_TYPE=return_type, |
+ RET1=ret1, |
+ RET2=ret2, |
CLASS_NAME=class_name, |
FUNCTION=function_name, |
PARAMETERS=', '.join(parameters), |
@@ -508,6 +527,8 @@ class DartiumBackend(HtmlDartGenerator): |
'PureInterface' in ext_attrs or |
'CPPPureInterface' in ext_attrs or |
'SpecialWrapFor' in ext_attrs or |
+ ('Custom' in ext_attrs and ext_attrs['Custom'] == 'Wrap') or |
+ ('Custom' in ext_attrs and ext_attrs['Custom'] == 'ToV8') or |
self._interface_type_info.custom_to_dart()): |
to_dart_emitter.Emit( |
' static Dart_Handle createWrapper(DartDOMData* domData, NativeType* value);\n') |
@@ -586,6 +607,8 @@ class DartiumBackend(HtmlDartGenerator): |
webcore_function_name = self._ToWebKitName(attr.id) |
function_expression = self._GenerateWebCoreFunctionExpression(webcore_function_name, attr) |
+ raises = ('RaisesException' in attr.ext_attrs and |
+ attr.ext_attrs['RaisesException'] != 'Setter') |
self._GenerateNativeCallback( |
cpp_callback_name, |
True, |
@@ -594,7 +617,7 @@ class DartiumBackend(HtmlDartGenerator): |
[], |
attr.type.id, |
attr.type.nullable, |
- 'GetterRaisesException' in attr.ext_attrs or 'RaisesException' in attr.ext_attrs, |
+ raises, |
auto_scope_setup) |
def _AddSetter(self, attr, html_name): |
@@ -611,12 +634,18 @@ class DartiumBackend(HtmlDartGenerator): |
if 'Reflect' in attr.ext_attrs: |
webcore_function_name = self._TypeInfo(attr.type.id).webcore_setter_name() |
else: |
+ if 'ImplementedAs' in attr.ext_attrs: |
+ attr_name = attr.ext_attrs['ImplementedAs'] |
+ else: |
+ attr_name = attr.id |
webcore_function_name = re.sub(r'^(xml|css|(?=[A-Z])|\w)', |
lambda s: s.group(1).upper(), |
- attr.id) |
+ attr_name) |
webcore_function_name = 'set%s' % webcore_function_name |
function_expression = self._GenerateWebCoreFunctionExpression(webcore_function_name, attr) |
+ raises = ('RaisesException' in attr.ext_attrs and |
+ attr.ext_attrs['RaisesException'] != 'Getter') |
self._GenerateNativeCallback( |
cpp_callback_name, |
True, |
@@ -625,7 +654,7 @@ class DartiumBackend(HtmlDartGenerator): |
[attr], |
'void', |
False, |
- 'SetterRaisesException' in attr.ext_attrs, |
+ raises, |
auto_scope_setup, |
generate_custom_element_scope_if_needed=True) |
@@ -1082,7 +1111,7 @@ class DartiumBackend(HtmlDartGenerator): |
# In this case, the getter is mapped to a static method. |
if (not function_expression.startswith('receiver->') and |
not function_expression.startswith(interface_name + '::')): |
- if interface_name == 'DOMWindow' or interface_name == 'Navigator' or interface_name == 'WorkerGlobalScope': |
+ if interface_name in ['DOMWindow', 'Element', 'Navigator', 'WorkerGlobalScope']: |
cpp_arguments.insert(0, 'receiver') |
else: |
cpp_arguments.append('receiver') |
@@ -1104,7 +1133,7 @@ class DartiumBackend(HtmlDartGenerator): |
' $NATIVE_TYPE result = $FUNCTION_CALL;\n' |
' if (isNull)\n' |
' return;\n', |
- NATIVE_TYPE=return_type_info.native_type(), |
+ NATIVE_TYPE=return_type_info.parameter_type(), |
FUNCTION_CALL=function_call) |
value_expression = 'result' |
else: |