Chromium Code Reviews| 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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 52 | 52 |
| 53 # [CheckSecurity] | 53 # [CheckSecurity] |
| 54 is_check_security_for_node = 'CheckSecurity' in extended_attributes | 54 is_check_security_for_node = 'CheckSecurity' in extended_attributes |
| 55 if is_check_security_for_node: | 55 if is_check_security_for_node: |
| 56 includes.add('bindings/core/v8/BindingSecurity.h') | 56 includes.add('bindings/core/v8/BindingSecurity.h') |
| 57 # [CustomElementCallbacks], [Reflect] | 57 # [CustomElementCallbacks], [Reflect] |
| 58 is_custom_element_callbacks = 'CustomElementCallbacks' in extended_attribute s | 58 is_custom_element_callbacks = 'CustomElementCallbacks' in extended_attribute s |
| 59 is_reflect = 'Reflect' in extended_attributes | 59 is_reflect = 'Reflect' in extended_attributes |
| 60 if is_custom_element_callbacks or is_reflect: | 60 if is_custom_element_callbacks or is_reflect: |
| 61 includes.add('core/dom/custom/CustomElementProcessingStack.h') | 61 includes.add('core/dom/custom/CustomElementProcessingStack.h') |
| 62 # [PerWorldBindings] | 62 # [ExposeJSAccessors] |
| 63 if 'PerWorldBindings' in extended_attributes: | 63 is_expose_js_accessors = 'ExposeJSAccessors' in extended_attributes |
| 64 assert idl_type.is_wrapper_type or 'LogActivity' in extended_attributes, '[PerWorldBindings] should only be used with wrapper types: %s.%s' % (interface .name, attribute.name) | |
| 65 # [ImplementedInPrivateScript] | 64 # [ImplementedInPrivateScript] |
| 66 is_implemented_in_private_script = 'ImplementedInPrivateScript' in extended_ attributes | 65 is_implemented_in_private_script = 'ImplementedInPrivateScript' in extended_ attributes |
| 67 if is_implemented_in_private_script: | 66 if is_implemented_in_private_script: |
| 68 includes.add('bindings/core/v8/PrivateScriptRunner.h') | 67 includes.add('bindings/core/v8/PrivateScriptRunner.h') |
| 69 includes.add('core/frame/LocalFrame.h') | 68 includes.add('core/frame/LocalFrame.h') |
| 70 includes.add('platform/ScriptForbiddenScope.h') | 69 includes.add('platform/ScriptForbiddenScope.h') |
| 71 | |
| 72 # [OnlyExposedToPrivateScript] | 70 # [OnlyExposedToPrivateScript] |
| 73 is_only_exposed_to_private_script = 'OnlyExposedToPrivateScript' in extended _attributes | 71 is_only_exposed_to_private_script = 'OnlyExposedToPrivateScript' in extended _attributes |
| 72 # [PerWorldBindings] | |
| 73 if 'PerWorldBindings' in extended_attributes: | |
| 74 assert idl_type.is_wrapper_type or 'LogActivity' in extended_attributes, '[PerWorldBindings] should only be used with wrapper types: %s.%s' % (interface .name, attribute.name) | |
| 74 | 75 |
| 75 if (base_idl_type == 'EventHandler' and | 76 if (base_idl_type == 'EventHandler' and |
| 76 interface.name in ['Window', 'WorkerGlobalScope'] and | 77 interface.name in ['Window', 'WorkerGlobalScope'] and |
| 77 attribute.name == 'onerror'): | 78 attribute.name == 'onerror'): |
| 78 includes.add('bindings/core/v8/V8ErrorHandler.h') | 79 includes.add('bindings/core/v8/V8ErrorHandler.h') |
| 79 | 80 |
| 80 context = { | 81 context = { |
| 81 'access_control_list': access_control_list(interface, attribute), | 82 'access_control_list': access_control_list(interface, attribute), |
| 82 'activity_logging_world_list_for_getter': v8_utilities.activity_logging_ world_list(attribute, 'Getter'), # [ActivityLogging] | 83 'activity_logging_world_list_for_getter': v8_utilities.activity_logging_ world_list(attribute, 'Getter'), # [ActivityLogging] |
| 83 'activity_logging_world_list_for_setter': v8_utilities.activity_logging_ world_list(attribute, 'Setter'), # [ActivityLogging] | 84 'activity_logging_world_list_for_setter': v8_utilities.activity_logging_ world_list(attribute, 'Setter'), # [ActivityLogging] |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 94 'enum_validation_expression': idl_type.enum_validation_expression, | 95 'enum_validation_expression': idl_type.enum_validation_expression, |
| 95 'exposed_test': v8_utilities.exposed(attribute, interface), # [Exposed] | 96 'exposed_test': v8_utilities.exposed(attribute, interface), # [Exposed] |
| 96 'has_custom_getter': has_custom_getter(attribute), | 97 'has_custom_getter': has_custom_getter(attribute), |
| 97 'has_custom_setter': has_custom_setter(attribute), | 98 'has_custom_setter': has_custom_setter(attribute), |
| 98 'has_side_effect_on_get': 'HasSideEffectOnGet' in extended_attributes, | 99 'has_side_effect_on_get': 'HasSideEffectOnGet' in extended_attributes, |
| 99 'idl_type': str(idl_type), # need trailing [] on array for Dictionary:: ConversionContext::setConversionType | 100 'idl_type': str(idl_type), # need trailing [] on array for Dictionary:: ConversionContext::setConversionType |
| 100 'is_call_with_execution_context': v8_utilities.has_extended_attribute_va lue(attribute, 'CallWith', 'ExecutionContext'), | 101 'is_call_with_execution_context': v8_utilities.has_extended_attribute_va lue(attribute, 'CallWith', 'ExecutionContext'), |
| 101 'is_call_with_script_state': v8_utilities.has_extended_attribute_value(a ttribute, 'CallWith', 'ScriptState'), | 102 'is_call_with_script_state': v8_utilities.has_extended_attribute_value(a ttribute, 'CallWith', 'ScriptState'), |
| 102 'is_check_security_for_node': is_check_security_for_node, | 103 'is_check_security_for_node': is_check_security_for_node, |
| 103 'is_custom_element_callbacks': is_custom_element_callbacks, | 104 'is_custom_element_callbacks': is_custom_element_callbacks, |
| 104 'is_expose_js_accessors': 'ExposeJSAccessors' in extended_attributes, | 105 'is_expose_js_accessors': is_expose_js_accessors, |
| 105 'is_getter_raises_exception': # [RaisesException] | 106 'is_getter_raises_exception': # [RaisesException] |
| 106 'RaisesException' in extended_attributes and | 107 'RaisesException' in extended_attributes and |
| 107 extended_attributes['RaisesException'] in (None, 'Getter'), | 108 extended_attributes['RaisesException'] in (None, 'Getter'), |
| 108 'is_implemented_in_private_script': is_implemented_in_private_script, | 109 'is_implemented_in_private_script': is_implemented_in_private_script, |
| 109 'is_initialized_by_event_constructor': | 110 'is_initialized_by_event_constructor': |
| 110 'InitializedByEventConstructor' in extended_attributes, | 111 'InitializedByEventConstructor' in extended_attributes, |
| 111 'is_keep_alive_for_gc': is_keep_alive_for_gc(interface, attribute), | 112 'is_keep_alive_for_gc': is_keep_alive_for_gc(interface, attribute), |
| 112 'is_nullable': idl_type.is_nullable, | 113 'is_nullable': idl_type.is_nullable, |
| 113 'is_explicit_nullable': idl_type.is_explicit_nullable, | 114 'is_explicit_nullable': idl_type.is_explicit_nullable, |
| 114 'is_partial_interface_member': | 115 'is_partial_interface_member': |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 127 'per_context_enabled_function': v8_utilities.per_context_enabled_functio n_name(attribute), # [PerContextEnabled] | 128 'per_context_enabled_function': v8_utilities.per_context_enabled_functio n_name(attribute), # [PerContextEnabled] |
| 128 'private_script_v8_value_to_local_cpp_value': idl_type.v8_value_to_local _cpp_value( | 129 'private_script_v8_value_to_local_cpp_value': idl_type.v8_value_to_local _cpp_value( |
| 129 extended_attributes, 'v8Value', 'cppValue', isolate='scriptState->is olate()', used_in_private_script=True), | 130 extended_attributes, 'v8Value', 'cppValue', isolate='scriptState->is olate()', used_in_private_script=True), |
| 130 'property_attributes': property_attributes(interface, attribute), | 131 'property_attributes': property_attributes(interface, attribute), |
| 131 'put_forwards': 'PutForwards' in extended_attributes, | 132 'put_forwards': 'PutForwards' in extended_attributes, |
| 132 'reflect_empty': extended_attributes.get('ReflectEmpty'), | 133 'reflect_empty': extended_attributes.get('ReflectEmpty'), |
| 133 'reflect_invalid': extended_attributes.get('ReflectInvalid', ''), | 134 'reflect_invalid': extended_attributes.get('ReflectInvalid', ''), |
| 134 'reflect_missing': extended_attributes.get('ReflectMissing'), | 135 'reflect_missing': extended_attributes.get('ReflectMissing'), |
| 135 'reflect_only': extended_attribute_value_as_list(attribute, 'ReflectOnly '), | 136 'reflect_only': extended_attribute_value_as_list(attribute, 'ReflectOnly '), |
| 136 'runtime_enabled_function': v8_utilities.runtime_enabled_function_name(a ttribute), # [RuntimeEnabled] | 137 'runtime_enabled_function': v8_utilities.runtime_enabled_function_name(a ttribute), # [RuntimeEnabled] |
| 137 'setter_callback': setter_callback_name(interface, attribute), | 138 'setter_callback': setter_callback_name(interface, attribute, is_expose_ js_accessors), |
| 138 'should_be_exposed_to_script': not (is_implemented_in_private_script and is_only_exposed_to_private_script), | 139 'should_be_exposed_to_script': not (is_implemented_in_private_script and is_only_exposed_to_private_script), |
| 139 'world_suffixes': ['', 'ForMainWorld'] | 140 'world_suffixes': ['', 'ForMainWorld'] |
| 140 if 'PerWorldBindings' in extended_attributes | 141 if 'PerWorldBindings' in extended_attributes |
| 141 else [''], # [PerWorldBindings] | 142 else [''], # [PerWorldBindings] |
| 142 } | 143 } |
| 143 | 144 |
| 144 if is_constructor_attribute(attribute): | 145 if is_constructor_attribute(attribute): |
| 145 constructor_getter_context(interface, attribute, context) | 146 constructor_getter_context(interface, attribute, context) |
| 146 return context | 147 return context |
| 147 if not has_custom_getter(attribute): | 148 if not has_custom_getter(attribute): |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 420 else: | 421 else: |
| 421 namespace = 'HTMLNames' | 422 namespace = 'HTMLNames' |
| 422 includes.add('core/%s.h' % namespace) | 423 includes.add('core/%s.h' % namespace) |
| 423 return '%s::%sAttr' % (namespace, content_attribute_name) | 424 return '%s::%sAttr' % (namespace, content_attribute_name) |
| 424 | 425 |
| 425 | 426 |
| 426 ################################################################################ | 427 ################################################################################ |
| 427 # Attribute configuration | 428 # Attribute configuration |
| 428 ################################################################################ | 429 ################################################################################ |
| 429 | 430 |
| 430 # [Replaceable] | 431 # [PutForwards], [Replaceable] |
| 431 def setter_callback_name(interface, attribute): | 432 def setter_callback_name(interface, attribute, is_expose_js_accessors): |
| 432 cpp_class_name = cpp_name(interface) | 433 cpp_class_name = cpp_name(interface) |
| 433 cpp_class_name_or_partial = cpp_name_or_partial(interface) | 434 cpp_class_name_or_partial = cpp_name_or_partial(interface) |
| 434 | 435 |
| 435 extended_attributes = attribute.extended_attributes | 436 extended_attributes = attribute.extended_attributes |
| 436 if (('Replaceable' in extended_attributes and | 437 if (not is_expose_js_accessors and |
| 437 'PutForwards' not in extended_attributes) or | 438 ('Replaceable' in extended_attributes or |
|
haraken
2015/02/23 14:48:52
Why can we remove "'PutForwards' not in extended_a
Yuki
2015/02/23 15:18:42
[Replaceable] and [PutForwards] conflict each othe
haraken
2015/02/23 17:34:00
Sounds like a good idea.
| |
| 438 is_constructor_attribute(attribute)): | 439 is_constructor_attribute(attribute))): |
| 439 return '%sV8Internal::%sForceSetAttributeOnThisCallback' % ( | 440 return '%sV8Internal::%sForceSetAttributeOnThisCallback' % ( |
|
haraken
2015/02/23 14:48:52
Help me understand: What's a difference between a
Yuki
2015/02/23 15:18:42
Basically we have the same implementation for "rep
haraken
2015/02/23 17:33:59
Ah, now I understand what this CL is doing :)
It
Yuki
2015/02/25 14:19:29
Done.
| |
| 440 cpp_class_name_or_partial, cpp_class_name) | 441 cpp_class_name_or_partial, cpp_class_name) |
| 441 if attribute.is_read_only and 'PutForwards' not in extended_attributes: | 442 if (attribute.is_read_only and |
| 443 'PutForwards' not in extended_attributes and | |
| 444 'Replaceable' not in extended_attributes): | |
|
haraken
2015/02/23 14:48:52
Fix indentation.
Yuki
2015/02/23 15:18:42
We need this indentation. Otherwise, I got a lint
| |
| 442 return '0' | 445 return '0' |
| 443 return '%sV8Internal::%sAttributeSetterCallback' % (cpp_class_name_or_partia l, attribute.name) | 446 return '%sV8Internal::%sAttributeSetterCallback' % (cpp_class_name_or_partia l, attribute.name) |
| 444 | 447 |
| 445 | 448 |
| 446 # [DoNotCheckSecurity], [Unforgeable] | 449 # [DoNotCheckSecurity], [Unforgeable] |
| 447 def access_control_list(interface, attribute): | 450 def access_control_list(interface, attribute): |
| 448 extended_attributes = attribute.extended_attributes | 451 extended_attributes = attribute.extended_attributes |
| 449 access_control = [] | 452 access_control = [] |
| 450 if 'DoNotCheckSecurity' in extended_attributes: | 453 if 'DoNotCheckSecurity' in extended_attributes: |
| 451 do_not_check_security = extended_attributes['DoNotCheckSecurity'] | 454 do_not_check_security = extended_attributes['DoNotCheckSecurity'] |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 498 lambda self: strip_suffix(self.base_type, 'Constructor')) | 501 lambda self: strip_suffix(self.base_type, 'Constructor')) |
| 499 | 502 |
| 500 | 503 |
| 501 def is_constructor_attribute(attribute): | 504 def is_constructor_attribute(attribute): |
| 502 # FIXME: replace this with [ConstructorAttribute] extended attribute | 505 # FIXME: replace this with [ConstructorAttribute] extended attribute |
| 503 return attribute.idl_type.name.endswith('Constructor') | 506 return attribute.idl_type.name.endswith('Constructor') |
| 504 | 507 |
| 505 | 508 |
| 506 def constructor_getter_context(interface, attribute, context): | 509 def constructor_getter_context(interface, attribute, context): |
| 507 context['needs_constructor_getter_callback'] = context['measure_as'] or cont ext['deprecate_as'] | 510 context['needs_constructor_getter_callback'] = context['measure_as'] or cont ext['deprecate_as'] |
| OLD | NEW |