Index: tools/dom/scripts/generator.py |
diff --git a/tools/dom/scripts/generator.py b/tools/dom/scripts/generator.py |
index 7ad60706f962ddc58c624ea0e8683842c135f9ed..5852225c40e6854c3f483f6a00de4dbd27eb5c35 100644 |
--- a/tools/dom/scripts/generator.py |
+++ b/tools/dom/scripts/generator.py |
@@ -514,13 +514,51 @@ class OperationInfo(object): |
parameter_count = len(self.param_infos) |
return ', '.join(map(param_name, self.param_infos[:parameter_count])) |
- def ParametersAsListOfVariables(self, parameter_count=None): |
+ def wrap_unwrap_list_blink(self, return_type, type_registry): |
+ """Return True if the type is a List<Node>""" |
+ return return_type.startswith('List<Node>') |
+ |
+ def wrap_unwrap_type_blink(self, return_type, type_registry): |
+ """Returns True if the type is a blink type that requires wrap_jso or unwrap_jso. |
+ Notice we look for any class that starts with HtmlNNNN e.g., HtmlDocument, etc. """ |
+ return (type_registry.HasInterface(return_type) or not(return_type) or |
+ return_type == 'Object' or return_type.startswith('Html') or |
+ return_type == 'MutationObserver') |
+ |
+ def ParametersAsListOfVariables(self, parameter_count=None, type_registry=None): |
"""Returns a list of the first parameter_count parameter names |
as raw variables. |
""" |
if parameter_count is None: |
parameter_count = len(self.param_infos) |
- return [p.name for p in self.param_infos[:parameter_count]] |
+ if not type_registry: |
+ return [p.name for p in self.param_infos[:parameter_count]] |
+ else: |
+ parameters = [] |
+ for p in self.param_infos[:parameter_count]: |
+ type_id = p.type_id |
+ # Unwrap the type to get the JsObject if Type is: |
+ # |
+ # - known IDL type |
+ # - type_id is None then it's probably a union type or overloaded |
+ # it's a dynamic/any type |
+ # - type is Object |
+ # |
+ # JsObject maybe stored in the Dart class. |
+ if (self.wrap_unwrap_type_blink(type_id, type_registry)): |
+ if type_id == 'EventListener' and (self.name == 'addEventListener' or self.name == 'addListener'): |
+ # Events fired need to wrap the Javascript Object passed as a parameter in event. |
+ parameters.append('unwrap_jso((Event event) => %s(wrap_jso(event)))' % p.name) |
+ else: |
+ parameters.append('unwrap_jso(%s)' % p.name) |
+ else: |
+ passParam = p.name |
+ if type_id == 'Dictionary': |
+ # Need to pass the IDL Dictionary from Dart Map to JavaScript object. |
+ passParam = '{0} != null ? new js.JsObject.jsify({0}) : {0}'.format(p.name) |
+ parameters.append(passParam) |
+ |
+ return parameters |
def ParametersAsStringOfVariables(self, parameter_count=None): |
"""Returns a string containing the first parameter_count parameter names |
@@ -1282,6 +1320,9 @@ class TypeRegistry(object): |
self._renamer = renamer |
self._cache = {} |
+ def HasInterface(self, type_name): |
+ return self._database.HasInterface(type_name) |
+ |
def TypeInfo(self, type_name): |
if not type_name in self._cache: |
self._cache[type_name] = self._TypeInfo(type_name) |