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

Side by Side Diff: third_party/WebKit/Source/bindings/templates/interface_base.cpp.tmpl

Issue 2578943002: [Bindings] Refactoring of binding code around runtime enabled features (Closed)
Patch Set: Work for a comment Created 4 years 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 unified diff | Download patch
OLDNEW
1 {% filter format_blink_cpp_source_code %} 1 {% filter format_blink_cpp_source_code %}
2 2
3 {% include 'copyright_block.txt' %} 3 {% include 'copyright_block.txt' %}
4 #include "{{v8_class_or_partial}}.h" 4 #include "{{v8_class_or_partial}}.h"
5 5
6 {% for filename in cpp_includes if filename != '%s.h' % cpp_class_or_partial %} 6 {% for filename in cpp_includes if filename != '%s.h' % cpp_class_or_partial %}
7 #include "{{filename}}" 7 #include "{{filename}}"
8 {% endfor %} 8 {% endfor %}
9 9
10 namespace blink { 10 namespace blink {
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 // Global object prototype chain consists of Immutable Prototype Exotic Object s 420 // Global object prototype chain consists of Immutable Prototype Exotic Object s
421 prototypeTemplate->SetImmutableProto(); 421 prototypeTemplate->SetImmutableProto();
422 {% endif %} 422 {% endif %}
423 423
424 {% if is_global %} 424 {% if is_global %}
425 // Global objects are Immutable Prototype Exotic Objects 425 // Global objects are Immutable Prototype Exotic Objects
426 instanceTemplate->SetImmutableProto(); 426 instanceTemplate->SetImmutableProto();
427 {% endif %} 427 {% endif %}
428 428
429 // Register DOM constants, attributes and operations. 429 // Register DOM constants, attributes and operations.
430 {% filter runtime_enabled(runtime_enabled_function) %} 430 {% filter runtime_enabled(runtime_enabled_feature_name) %}
431 {% if constants %} 431 {% if constants %}
432 {{install_constants() | indent(2)}} 432 {{install_constants() | indent(2)}}
433 {% endif %} 433 {% endif %}
434 {% if data_attributes %} 434 {% if data_attributes %}
435 V8DOMConfiguration::installAttributes(isolate, world, instanceTemplate, protot ypeTemplate, {{'%sAttributes' % v8_class}}, {{'WTF_ARRAY_LENGTH(%sAttributes)' % v8_class}}); 435 V8DOMConfiguration::installAttributes(isolate, world, instanceTemplate, protot ypeTemplate, {{'%sAttributes' % v8_class}}, {{'WTF_ARRAY_LENGTH(%sAttributes)' % v8_class}});
436 {% endif %} 436 {% endif %}
437 {% if lazy_data_attributes %} 437 {% if lazy_data_attributes %}
438 V8DOMConfiguration::installLazyDataAttributes(isolate, world, instanceTemplate , prototypeTemplate, {{'%sLazyDataAttributes' % v8_class}}, {{'WTF_ARRAY_LENGTH( %sLazyDataAttributes)' % v8_class}}); 438 V8DOMConfiguration::installLazyDataAttributes(isolate, world, instanceTemplate , prototypeTemplate, {{'%sLazyDataAttributes' % v8_class}}, {{'WTF_ARRAY_LENGTH( %sLazyDataAttributes)' % v8_class}});
439 {% endif %} 439 {% endif %}
440 {% if accessors %} 440 {% if accessors %}
441 V8DOMConfiguration::installAccessors(isolate, world, instanceTemplate, prototy peTemplate, interfaceTemplate, signature, {{'%sAccessors' % v8_class}}, {{'WTF_A RRAY_LENGTH(%sAccessors)' % v8_class}}); 441 V8DOMConfiguration::installAccessors(isolate, world, instanceTemplate, prototy peTemplate, interfaceTemplate, signature, {{'%sAccessors' % v8_class}}, {{'WTF_A RRAY_LENGTH(%sAccessors)' % v8_class}});
442 {% endif %} 442 {% endif %}
443 {% if methods | has_method_configuration(is_partial) %} 443 {% if methods | has_method_configuration(is_partial) %}
444 V8DOMConfiguration::installMethods(isolate, world, instanceTemplate, prototype Template, interfaceTemplate, signature, {{'%sMethods' % v8_class}}, {{'WTF_ARRAY _LENGTH(%sMethods)' % v8_class}}); 444 V8DOMConfiguration::installMethods(isolate, world, instanceTemplate, prototype Template, interfaceTemplate, signature, {{'%sMethods' % v8_class}}, {{'WTF_ARRAY _LENGTH(%sMethods)' % v8_class}});
445 {% endif %} 445 {% endif %}
446 {% endfilter %} 446 {% endfilter %}
447 447
448 {% if has_access_check_callbacks and not is_partial %} 448 {% if has_access_check_callbacks and not is_partial %}
449 // Cross-origin access check 449 // Cross-origin access check
450 {% set cross_origin_named_getter = '%sV8Internal::crossOriginNamedGetter' % cp p_class if has_cross_origin_named_getter else 'nullptr' %} 450 {% set cross_origin_named_getter = '%sV8Internal::crossOriginNamedGetter' % cp p_class if has_cross_origin_named_getter else 'nullptr' %}
451 {% set cross_origin_named_setter = '%sV8Internal::crossOriginNamedSetter' % cp p_class if has_cross_origin_named_setter else 'nullptr' %} 451 {% set cross_origin_named_setter = '%sV8Internal::crossOriginNamedSetter' % cp p_class if has_cross_origin_named_setter else 'nullptr' %}
452 {% set cross_origin_named_enumerator = '%sV8Internal::crossOriginNamedEnumerat or' % cpp_class if has_cross_origin_named_enumerator else 'nullptr' %} 452 {% set cross_origin_named_enumerator = '%sV8Internal::crossOriginNamedEnumerat or' % cpp_class if has_cross_origin_named_enumerator else 'nullptr' %}
453 {% set cross_origin_indexed_getter = '%sV8Internal::crossOriginIndexedGetter' % cpp_class if has_cross_origin_indexed_getter else 'nullptr' %} 453 {% set cross_origin_indexed_getter = '%sV8Internal::crossOriginIndexedGetter' % cpp_class if has_cross_origin_indexed_getter else 'nullptr' %}
454 instanceTemplate->SetAccessCheckCallbackAndHandler({{cpp_class}}V8Internal::se curityCheck, v8::NamedPropertyHandlerConfiguration({{cross_origin_named_getter}} , {{cross_origin_named_setter}}, nullptr, nullptr, {{cross_origin_named_enumerat or}}), v8::IndexedPropertyHandlerConfiguration({{cross_origin_indexed_getter}}), v8::External::New(isolate, const_cast<WrapperTypeInfo*>(&{{v8_class}}::wrapperT ypeInfo))); 454 instanceTemplate->SetAccessCheckCallbackAndHandler({{cpp_class}}V8Internal::se curityCheck, v8::NamedPropertyHandlerConfiguration({{cross_origin_named_getter}} , {{cross_origin_named_setter}}, nullptr, nullptr, {{cross_origin_named_enumerat or}}), v8::IndexedPropertyHandlerConfiguration({{cross_origin_indexed_getter}}), v8::External::New(isolate, const_cast<WrapperTypeInfo*>(&{{v8_class}}::wrapperT ypeInfo)));
455 {% endif %} 455 {% endif %}
456 456
457 {% for group in runtime_enabled_attributes | groupby('runtime_feature_name') % } 457 {% for group in runtime_enabled_attributes | groupby('runtime_enabled_feature_ name') %}
458 if ({{group.list[0].runtime_enabled_function}}()) { 458 {% filter runtime_enabled(group.list[0].runtime_enabled_feature_name) %}
459 {% for attribute in group.list | unique_by('name') | sort %} 459 {% for attribute in group.list | unique_by('name') | sort %}
460 {% if attribute.is_data_type_property %} 460 {% if attribute.is_data_type_property %}
461 const V8DOMConfiguration::AttributeConfiguration attribute{{attribute.name}} Configuration = {{attribute_configuration(attribute)}}; 461 const V8DOMConfiguration::AttributeConfiguration attribute{{attribute.name}}Co nfiguration = {{attribute_configuration(attribute)}};
462 V8DOMConfiguration::installAttribute(isolate, world, instanceTemplate, proto typeTemplate, attribute{{attribute.name}}Configuration); 462 V8DOMConfiguration::installAttribute(isolate, world, instanceTemplate, prototy peTemplate, attribute{{attribute.name}}Configuration);
463 {% else %} 463 {% else %}
464 const V8DOMConfiguration::AccessorConfiguration accessor{{attribute.name}}Co nfiguration = {{attribute_configuration(attribute)}}; 464 const V8DOMConfiguration::AccessorConfiguration accessor{{attribute.name}}Conf iguration = {{attribute_configuration(attribute)}};
465 V8DOMConfiguration::installAccessor(isolate, world, instanceTemplate, protot ypeTemplate, interfaceTemplate, signature, accessor{{attribute.name}}Configurati on); 465 V8DOMConfiguration::installAccessor(isolate, world, instanceTemplate, prototyp eTemplate, interfaceTemplate, signature, accessor{{attribute.name}}Configuration );
466 {% endif %} 466 {% endif %}
467 {% endfor %} 467 {% endfor %}
468 } 468 {% endfilter %}
469 {% endfor %} 469 {% endfor %}
470 470
471 {% if (indexed_property_getter or named_property_getter) and not is_partial %} 471 {% if (indexed_property_getter or named_property_getter) and not is_partial %}
472 // Indexed properties 472 // Indexed properties
473 {{install_indexed_property_handler('instanceTemplate') | indent(2)}} 473 {{install_indexed_property_handler('instanceTemplate') | indent(2)}}
474 {% endif %} 474 {% endif %}
475 {% if named_property_getter and not is_partial and not has_named_properties_ob ject %} 475 {% if named_property_getter and not is_partial and not has_named_properties_ob ject %}
476 // Named properties 476 // Named properties
477 {{install_named_property_handler('instanceTemplate') | indent(2)}} 477 {{install_named_property_handler('instanceTemplate') | indent(2)}}
478 {% endif %} 478 {% endif %}
479 479
480 {% if has_array_iterator and not is_partial %} 480 {% if has_array_iterator and not is_partial %}
481 // Array iterator (@@iterator) 481 // Array iterator (@@iterator)
482 {%+ if is_global %}instanceTemplate{% else %}prototypeTemplate{% endif %}->Set IntrinsicDataProperty(v8::Symbol::GetIterator(isolate), v8::kArrayProto_values, v8::DontEnum); 482 {%+ if is_global %}instanceTemplate{% else %}prototypeTemplate{% endif %}->Set IntrinsicDataProperty(v8::Symbol::GetIterator(isolate), v8::kArrayProto_values, v8::DontEnum);
483 {% endif %} 483 {% endif %}
484 484
485 {% if iterator_method %} 485 {% if iterator_method %}
486 {% filter exposed(iterator_method.exposed_test) %} 486 {% filter exposed(iterator_method.exposed_test) %}
487 {% filter runtime_enabled(iterator_method.runtime_enabled_function) %} 487 {% filter runtime_enabled(iterator_method.runtime_enabled_feature_name) %}
488 // Iterator (@@iterator) 488 // Iterator (@@iterator)
489 const V8DOMConfiguration::SymbolKeyedMethodConfiguration symbolKeyedIteratorCo nfiguration = { v8::Symbol::GetIterator, {{cpp_class_or_partial}}V8Internal::ite ratorMethodCallback, 0, v8::DontEnum, V8DOMConfiguration::OnPrototype }; 489 const V8DOMConfiguration::SymbolKeyedMethodConfiguration symbolKeyedIteratorCo nfiguration = { v8::Symbol::GetIterator, {{cpp_class_or_partial}}V8Internal::ite ratorMethodCallback, 0, v8::DontEnum, V8DOMConfiguration::OnPrototype };
490 V8DOMConfiguration::installMethod(isolate, world, prototypeTemplate, signature , symbolKeyedIteratorConfiguration); 490 V8DOMConfiguration::installMethod(isolate, world, prototypeTemplate, signature , symbolKeyedIteratorConfiguration);
491 {% endfilter %} 491 {% endfilter %}
492 {% endfilter %} 492 {% endfilter %}
493 {% endif %} 493 {% endif %}
494 494
495 {% if legacy_caller and not is_partial %} 495 {% if legacy_caller and not is_partial %}
496 instanceTemplate->SetCallAsFunctionHandler({{cpp_class_or_partial}}V8Internal: :{{legacy_caller.name}}MethodCallback); 496 instanceTemplate->SetCallAsFunctionHandler({{cpp_class_or_partial}}V8Internal: :{{legacy_caller.name}}MethodCallback);
497 {% elif has_custom_legacy_call_as_function and not is_partial %} 497 {% elif has_custom_legacy_call_as_function and not is_partial %}
498 instanceTemplate->SetCallAsFunctionHandler({{v8_class}}::legacyCallCustom); 498 instanceTemplate->SetCallAsFunctionHandler({{v8_class}}::legacyCallCustom);
499 {% endif %} 499 {% endif %}
500 500
501 {% if interface_name == 'HTMLAllCollection' and not is_partial %} 501 {% if interface_name == 'HTMLAllCollection' and not is_partial %}
502 // Needed for legacy support of document.all 502 // Needed for legacy support of document.all
503 instanceTemplate->MarkAsUndetectable(); 503 instanceTemplate->MarkAsUndetectable();
504 {% endif %} 504 {% endif %}
505 505
506 {% if methods | custom_registration(is_partial) %} 506 {% if methods | custom_registration(is_partial) %}
507 {% for method in methods | custom_registration(is_partial) %} 507 {% for method in methods | custom_registration(is_partial) %}
508 {# install_custom_signature #} 508 {# install_custom_signature #}
509 {% filter exposed(method.overloads.exposed_test_all 509 {% filter exposed(method.overloads.exposed_test_all
510 if method.overloads else method.exposed_test) %} 510 if method.overloads else method.exposed_test) %}
511 {% filter runtime_enabled(method.overloads.runtime_enabled_function_all 511 {% filter runtime_enabled(method.overloads.runtime_enabled_all
512 if method.overloads else method.runtime_enabled_func tion) %} 512 if method.overloads else method.runtime_enabled_feat ure_name) %}
513 {% if method.is_cross_origin %} 513 {% if method.is_cross_origin %}
514 {# TODO(dcheng): Currently, bindings must create a function object for each 514 {# TODO(dcheng): Currently, bindings must create a function object for each
515 realm as a hack to support the incumbent realm. Remove this when Blink 515 realm as a hack to support the incumbent realm. Remove this when Blink
516 properly supports the incumbent realm. #} 516 properly supports the incumbent realm. #}
517 {{install_origin_safe_method(method, '', 'instanceTemplate', 'prototypeTemplat e') | indent(2)}} 517 {{install_origin_safe_method(method, '', 'instanceTemplate', 'prototypeTemplat e') | indent(2)}}
518 {% else %} 518 {% else %}
519 {{install_custom_signature(method, 'instanceTemplate', 'prototypeTemplate', 'i nterfaceTemplate', 'signature') | indent(2)}} 519 {{install_custom_signature(method, 'instanceTemplate', 'prototypeTemplate', 'i nterfaceTemplate', 'signature') | indent(2)}}
520 {% endif %} 520 {% endif %}
521 {% endfilter %} 521 {% endfilter %}
522 {% endfilter %} 522 {% endfilter %}
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 {% block has_instance %}{% endblock %} 584 {% block has_instance %}{% endblock %}
585 {% block to_impl %}{% endblock %} 585 {% block to_impl %}{% endblock %}
586 {% block to_impl_with_type_check %}{% endblock %} 586 {% block to_impl_with_type_check %}{% endblock %}
587 {##############################################################################} 587 {##############################################################################}
588 {% block prepare_prototype_and_interface_object %}{% endblock %} 588 {% block prepare_prototype_and_interface_object %}{% endblock %}
589 {##############################################################################} 589 {##############################################################################}
590 {% block partial_interface %}{% endblock %} 590 {% block partial_interface %}{% endblock %}
591 } // namespace blink 591 } // namespace blink
592 592
593 {% endfilter %}{# format_blink_cpp_source_code #} 593 {% endfilter %}{# format_blink_cpp_source_code #}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698