OLD | NEW |
1 # Copyright (C) 2013 Google Inc. All rights reserved. | 1 # Copyright (C) 2013 Google Inc. All rights reserved. |
2 # | 2 # |
3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
5 # met: | 5 # met: |
6 # | 6 # |
7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 # Methods with any of these require custom method registration code in the | 45 # Methods with any of these require custom method registration code in the |
46 # interface's configure*Template() function. | 46 # interface's configure*Template() function. |
47 CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES = frozenset([ | 47 CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES = frozenset([ |
48 'DoNotCheckSecurity', | 48 'DoNotCheckSecurity', |
49 'DoNotCheckSignature', | 49 'DoNotCheckSignature', |
50 'NotEnumerable', | 50 'NotEnumerable', |
51 'Unforgeable', | 51 'Unforgeable', |
52 ]) | 52 ]) |
53 | 53 |
54 | 54 |
55 def argument_needs_try_catch(method, argument): | |
56 idl_type = argument.idl_type | |
57 base_type = idl_type.base_type | |
58 | |
59 return not( | |
60 # These cases are handled by separate code paths in the | |
61 # generate_argument() macro in Source/bindings/templates/methods.cpp. | |
62 idl_type.is_callback_interface or | |
63 base_type == 'SerializedScriptValue' or | |
64 (argument.is_variadic and idl_type.is_wrapper_type) or | |
65 # Variadic arguments use toImplArguments() with throws excentions via | |
66 # its ExceptionState& argument. | |
67 argument.is_variadic or | |
68 # String and enumeration arguments converted using one of the | |
69 # TOSTRING_* macros except for _PROMISE variants in | |
70 # Source/bindings/core/v8/V8BindingMacros.h don't use a v8::TryCatch. | |
71 ((base_type == 'DOMString' or idl_type.is_enum) and | |
72 not method.returns_promise) or | |
73 # Conversion that take an ExceptionState& argument throw all their | |
74 # exceptions via it, and doesn't need/use a TryCatch, except if the | |
75 # argument has [Clamp], in which case it uses a separate code path in | |
76 # Source/bindings/templates/methods.cpp, which *does* use a TryCatch. | |
77 argument_conversion_needs_exception_state(method, argument) or | |
78 # A trivial conversion cannot throw exceptions at all, so doesn't need a | |
79 # TryCatch to catch them. | |
80 idl_type.v8_conversion_is_trivial) | |
81 | |
82 | |
83 def use_local_result(method): | 55 def use_local_result(method): |
84 extended_attributes = method.extended_attributes | 56 extended_attributes = method.extended_attributes |
85 idl_type = method.idl_type | 57 idl_type = method.idl_type |
86 return (has_extended_attribute_value(method, 'CallWith', 'ScriptState') or | 58 return (has_extended_attribute_value(method, 'CallWith', 'ScriptState') or |
87 'ImplementedInPrivateScript' in extended_attributes or | 59 'ImplementedInPrivateScript' in extended_attributes or |
88 'RaisesException' in extended_attributes or | 60 'RaisesException' in extended_attributes or |
89 idl_type.is_union_type or | 61 idl_type.is_union_type or |
90 idl_type.is_explicit_nullable) | 62 idl_type.is_explicit_nullable) |
91 | 63 |
92 | 64 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 is_check_security_for_frame = ( | 107 is_check_security_for_frame = ( |
136 has_extended_attribute_value(interface, 'CheckSecurity', 'Frame') and | 108 has_extended_attribute_value(interface, 'CheckSecurity', 'Frame') and |
137 not is_do_not_check_security) | 109 not is_do_not_check_security) |
138 | 110 |
139 is_check_security_for_window = ( | 111 is_check_security_for_window = ( |
140 has_extended_attribute_value(interface, 'CheckSecurity', 'Window') and | 112 has_extended_attribute_value(interface, 'CheckSecurity', 'Window') and |
141 not is_do_not_check_security) | 113 not is_do_not_check_security) |
142 | 114 |
143 is_raises_exception = 'RaisesException' in extended_attributes | 115 is_raises_exception = 'RaisesException' in extended_attributes |
144 | 116 |
145 arguments_need_try_catch = ( | |
146 any(argument_needs_try_catch(method, argument) | |
147 for argument in arguments)) | |
148 | |
149 return { | 117 return { |
150 'activity_logging_world_list': v8_utilities.activity_logging_world_list(
method), # [ActivityLogging] | 118 'activity_logging_world_list': v8_utilities.activity_logging_world_list(
method), # [ActivityLogging] |
151 'arguments': [argument_context(interface, method, argument, index) | 119 'arguments': [argument_context(interface, method, argument, index) |
152 for index, argument in enumerate(arguments)], | 120 for index, argument in enumerate(arguments)], |
153 'argument_declarations_for_private_script': | 121 'argument_declarations_for_private_script': |
154 argument_declarations_for_private_script(interface, method), | 122 argument_declarations_for_private_script(interface, method), |
155 'arguments_need_try_catch': arguments_need_try_catch, | |
156 'conditional_string': v8_utilities.conditional_string(method), | 123 'conditional_string': v8_utilities.conditional_string(method), |
157 'cpp_type': (v8_types.cpp_template_type('Nullable', idl_type.cpp_type) | 124 'cpp_type': (v8_types.cpp_template_type('Nullable', idl_type.cpp_type) |
158 if idl_type.is_explicit_nullable else idl_type.cpp_type), | 125 if idl_type.is_explicit_nullable else idl_type.cpp_type), |
159 'cpp_value': this_cpp_value, | 126 'cpp_value': this_cpp_value, |
160 'cpp_type_initializer': idl_type.cpp_type_initializer, | 127 'cpp_type_initializer': idl_type.cpp_type_initializer, |
161 'custom_registration_extended_attributes': | 128 'custom_registration_extended_attributes': |
162 CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES.intersection( | 129 CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES.intersection( |
163 extended_attributes.iterkeys()), | 130 extended_attributes.iterkeys()), |
164 'deprecate_as': v8_utilities.deprecate_as(method), # [DeprecateAs] | 131 'deprecate_as': v8_utilities.deprecate_as(method), # [DeprecateAs] |
165 'exposed_test': v8_utilities.exposed(method, interface), # [Exposed] | 132 'exposed_test': v8_utilities.exposed(method, interface), # [Exposed] |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 | 441 |
475 IdlOperation.returns_promise = property(method_returns_promise) | 442 IdlOperation.returns_promise = property(method_returns_promise) |
476 | 443 |
477 | 444 |
478 def argument_conversion_needs_exception_state(method, argument): | 445 def argument_conversion_needs_exception_state(method, argument): |
479 idl_type = argument.idl_type | 446 idl_type = argument.idl_type |
480 return (idl_type.v8_conversion_needs_exception_state or | 447 return (idl_type.v8_conversion_needs_exception_state or |
481 argument.is_variadic or | 448 argument.is_variadic or |
482 (method.returns_promise and (idl_type.is_string_type or | 449 (method.returns_promise and (idl_type.is_string_type or |
483 idl_type.is_enum))) | 450 idl_type.is_enum))) |
OLD | NEW |