| Index: Source/bindings/scripts/v8_methods.py | 
| diff --git a/Source/bindings/scripts/v8_methods.py b/Source/bindings/scripts/v8_methods.py | 
| index 9e92e0ed43d273adc1b054f1be904578a42c0037..c23b9ecf30da4241a5e044fe51080ef6b3310ff1 100644 | 
| --- a/Source/bindings/scripts/v8_methods.py | 
| +++ b/Source/bindings/scripts/v8_methods.py | 
| @@ -51,7 +51,7 @@ CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES = frozenset([ | 
| ]) | 
|  | 
|  | 
| -def argument_needs_try_catch(argument): | 
| +def argument_needs_try_catch(argument, async): | 
| idl_type = argument.idl_type | 
| base_type = not idl_type.native_array_element_type and idl_type.base_type | 
|  | 
| @@ -64,7 +64,7 @@ def argument_needs_try_catch(argument): | 
| # String and enumeration arguments converted using one of the | 
| # TOSTRING_* macros in Source/bindings/core/v8/V8BindingMacros.h don't | 
| # use a v8::TryCatch. | 
| -        (base_type == 'DOMString' and not argument.is_variadic)) | 
| +        (base_type == 'DOMString' and not argument.is_variadic and not async)) | 
|  | 
|  | 
| def use_local_result(method): | 
| @@ -83,6 +83,7 @@ def method_context(interface, method): | 
| idl_type = method.idl_type | 
| is_static = method.is_static | 
| name = method.name | 
| +    async = idl_type.name == 'Promise' | 
|  | 
| idl_type.add_includes_for_type() | 
| this_cpp_value = cpp_value(interface, method, len(arguments)) | 
| @@ -122,7 +123,7 @@ def method_context(interface, method): | 
| 'DoNotCheckSecurity' not in extended_attributes) | 
| is_raises_exception = 'RaisesException' in extended_attributes | 
|  | 
| -    arguments_need_try_catch = any(argument_needs_try_catch(argument) | 
| +    arguments_need_try_catch = any(argument_needs_try_catch(argument, async) | 
| for argument in arguments) | 
|  | 
| return { | 
| @@ -243,6 +244,7 @@ def argument_context(interface, method, argument, index): | 
| 'v8_set_return_value': v8_set_return_value(interface.name, method, this_cpp_value), | 
| 'v8_set_return_value_for_main_world': v8_set_return_value(interface.name, method, this_cpp_value, for_main_world=True), | 
| 'v8_value_to_local_cpp_value': v8_value_to_local_cpp_value(argument, index), | 
| +        'v8_value_to_local_cpp_value_async': v8_value_to_local_cpp_value(argument, index, async=True), | 
| 'vector_type': v8_types.cpp_ptr_type('Vector', 'HeapVector', idl_type.gc_type), | 
| } | 
|  | 
| @@ -345,27 +347,35 @@ def v8_set_return_value(interface_name, method, cpp_value, for_main_world=False) | 
| return idl_type.v8_set_return_value(cpp_value, extended_attributes, script_wrappable=script_wrappable, release=release, for_main_world=for_main_world) | 
|  | 
|  | 
| -def v8_value_to_local_cpp_variadic_value(argument, index): | 
| +def v8_value_to_local_cpp_variadic_value(argument, index, async): | 
| assert argument.is_variadic | 
| idl_type = argument.idl_type | 
|  | 
| -    macro = 'TONATIVE_VOID_INTERNAL' | 
| +    suffix = '' | 
| + | 
| +    macro = 'TONATIVE_VOID' | 
| macro_args = [ | 
| argument.name, | 
| 'toNativeArguments<%s>(info, %s)' % (idl_type.cpp_type, index), | 
| ] | 
|  | 
| -    return '%s(%s)' % (macro, ', '.join(macro_args)) | 
| +    if async: | 
| +        suffix += '_ASYNC' | 
| +        macro_args.append('info') | 
| + | 
| +    suffix += '_INTERNAL' | 
| + | 
| +    return '%s%s(%s)' % (macro, suffix, ', '.join(macro_args)) | 
|  | 
|  | 
| -def v8_value_to_local_cpp_value(argument, index): | 
| +def v8_value_to_local_cpp_value(argument, index, async=False): | 
| extended_attributes = argument.extended_attributes | 
| idl_type = argument.idl_type | 
| name = argument.name | 
| if argument.is_variadic: | 
| -        return v8_value_to_local_cpp_variadic_value(argument, index) | 
| +        return v8_value_to_local_cpp_variadic_value(argument, index, async) | 
| return idl_type.v8_value_to_local_cpp_value(extended_attributes, 'info[%s]' % index, | 
| -                                                name, index=index, declare_variable=False) | 
| +                                                name, index=index, declare_variable=False, async=async) | 
|  | 
|  | 
| ################################################################################ | 
|  |