| 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 | 
|---|