Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(204)

Unified Diff: Source/bindings/scripts/v8_methods.py

Issue 232563003: API functions returning Promises should not throw exceptions. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/bindings/scripts/v8_methods.py
diff --git a/Source/bindings/scripts/v8_methods.py b/Source/bindings/scripts/v8_methods.py
index 8f559f59492ed2af6fa2dc833113c0e12d7207b3..55a8eed977b558bc1efd466a6d9b8dd7802fa608 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
@@ -62,9 +62,9 @@ def argument_needs_try_catch(argument):
base_type == 'SerializedScriptValue' or
(argument.is_variadic and idl_type.is_wrapper_type) or
# 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))
+ # TOSTRING_* macros except for _ASYNC variants in
+ # Source/bindings/core/v8/V8BindingMacros.h don't use a v8::TryCatch.
+ (base_type == 'DOMString' and not argument.is_variadic and not async))
haraken 2014/07/31 07:54:47 This condition is getting to a mess... but would b
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'
haraken 2014/07/31 07:54:47 Shall we rename |async| to |return_promise| for cl
yhirano 2014/08/01 02:27:57 Done.
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 {
@@ -201,6 +202,7 @@ def argument_context(interface, method, argument, index):
idl_type = argument.idl_type
this_cpp_value = cpp_value(interface, method, index)
is_variadic_wrapper_type = argument.is_variadic and idl_type.is_wrapper_type
+ async = method.idl_type.name == 'Promise' if method.idl_type else False
if ('ImplementedInPrivateScript' in extended_attributes and
not idl_type.is_wrapper_type and
@@ -242,7 +244,7 @@ def argument_context(interface, method, argument, index):
creation_context='scriptState->context()->Global()'),
'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': v8_value_to_local_cpp_value(argument, index, async=async),
'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)
################################################################################

Powered by Google App Engine
This is Rietveld 408576698