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

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

Issue 1386843002: bindings: Implements the named properties object (WindowProperties). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated IDL test results. Created 5 years, 2 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 unified diff | Download patch
OLDNEW
1 {% include 'copyright_block.txt' %} 1 {% include 'copyright_block.txt' %}
2 #include "config.h" 2 #include "config.h"
3 {% filter conditional(conditional_string) %} 3 {% filter conditional(conditional_string) %}
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 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 {% endif %} 291 {% endif %}
292 { 292 {
293 {% if is_partial %} 293 {% if is_partial %}
294 {{v8_class}}::install{{v8_class}}Template(functionTemplate, isolate); 294 {{v8_class}}::install{{v8_class}}Template(functionTemplate, isolate);
295 {% else %} 295 {% else %}
296 functionTemplate->ReadOnlyPrototype(); 296 functionTemplate->ReadOnlyPrototype();
297 {% endif %} 297 {% endif %}
298 298
299 v8::Local<v8::Signature> defaultSignature; 299 v8::Local<v8::Signature> defaultSignature;
300 {% set parent_template = 300 {% set parent_template =
301 '%s::domTemplateForNamedPropertiesObject(isolate)' % v8_class
302 if has_named_properties_object else
301 'V8%s::domTemplate(isolate)' % parent_interface 303 'V8%s::domTemplate(isolate)' % parent_interface
302 if parent_interface else 'v8::Local<v8::FunctionTemplate>()' %} 304 if parent_interface else 'v8::Local<v8::FunctionTemplate>()' %}
303 {% if runtime_enabled_function %} 305 {% if runtime_enabled_function %}
304 if (!{{runtime_enabled_function}}()) 306 if (!{{runtime_enabled_function}}())
305 defaultSignature = V8DOMConfiguration::installDOMClassTemplate(isolate, functionTemplate, "{{interface_name}}", {{parent_template}}, {{v8_class}}::inter nalFieldCount, 0, 0, 0, 0, 0, 0); 307 defaultSignature = V8DOMConfiguration::installDOMClassTemplate(isolate, functionTemplate, "{{interface_name}}", {{parent_template}}, {{v8_class}}::inter nalFieldCount, 0, 0, 0, 0, 0, 0);
306 else 308 else
307 {% endif %} 309 {% endif %}
308 {% set runtime_enabled_indent = 4 if runtime_enabled_function else 0 %} 310 {% set runtime_enabled_indent = 4 if runtime_enabled_function else 0 %}
309 {% filter indent(runtime_enabled_indent, true) %} 311 {% filter indent(runtime_enabled_indent, true) %}
310 defaultSignature = V8DOMConfiguration::installDOMClassTemplate(isolate, func tionTemplate, "{{interface_name}}", {{parent_template}}, {{v8_class}}::internalF ieldCount, 312 defaultSignature = V8DOMConfiguration::installDOMClassTemplate(isolate, func tionTemplate, "{{interface_name}}", {{parent_template}}, {{v8_class}}::internalF ieldCount,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 {{attribute_configuration(attribute)}}; 362 {{attribute_configuration(attribute)}};
361 V8DOMConfiguration::installAccessor(isolate, instanceTemplate, prototype Template, functionTemplate, defaultSignature, accessorConfiguration); 363 V8DOMConfiguration::installAccessor(isolate, instanceTemplate, prototype Template, functionTemplate, defaultSignature, accessorConfiguration);
362 {% endif %} 364 {% endif %}
363 } 365 }
364 {% endfilter %} 366 {% endfilter %}
365 {% endfor %} 367 {% endfor %}
366 {% if constants %} 368 {% if constants %}
367 {{install_constants() | indent}} 369 {{install_constants() | indent}}
368 {% endif %} 370 {% endif %}
369 {# Special operations #} 371 {# Special operations #}
370 {# V8 has access-check callback API and it\'s used on Window instead of
371 deleters or enumerators; see ObjectTemplate::SetAccessCheckCallbacks.
372 In addition, the getter should be set on the prototype template, to get
373 the implementation straight out of the Window prototype, regardless of
374 what prototype is actually set on the object. #}
375 {% set set_on_template = 'PrototypeTemplate' if interface_name == 'Window'
376 else 'InstanceTemplate' %}
377 {% if indexed_property_getter %} 372 {% if indexed_property_getter %}
378 {# if have indexed properties, MUST have an indexed property getter #} 373 {{install_indexed_property_handler('instanceTemplate') | indent}}
379 {% set indexed_property_getter_callback =
380 '%sV8Internal::indexedPropertyGetterCallback' % cpp_class %}
381 {% set indexed_property_setter_callback =
382 '%sV8Internal::indexedPropertySetterCallback' % cpp_class
383 if indexed_property_setter else '0' %}
384 {% set indexed_property_query_callback = '0' %}{# Unused #}
385 {% set indexed_property_deleter_callback =
386 '%sV8Internal::indexedPropertyDeleterCallback' % cpp_class
387 if indexed_property_deleter else '0' %}
388 {% set indexed_property_enumerator_callback =
389 'indexedPropertyEnumerator<%s>' % cpp_class
390 if indexed_property_getter.is_enumerable else '0' %}
391 {
392 v8::IndexedPropertyHandlerConfiguration config({{indexed_property_getter _callback}}, {{indexed_property_setter_callback}}, {{indexed_property_query_call back}}, {{indexed_property_deleter_callback}}, {{indexed_property_enumerator_cal lback}});
393 {% if indexed_property_getter.do_not_check_security %}
394 config.flags = v8::PropertyHandlerFlags::kAllCanRead;
395 {% endif %}
396 functionTemplate->{{set_on_template}}()->SetHandler(config);
397 }
398 {% endif %} 374 {% endif %}
399 {% if named_property_getter %} 375 {% if named_property_getter and not has_named_properties_object %}
400 {# if have named properties, MUST have a named property getter #} 376 {{install_named_property_handler('instanceTemplate') | indent}}
401 {% set named_property_getter_callback =
402 '%sV8Internal::namedPropertyGetterCallback' % cpp_class %}
403 {% set named_property_setter_callback =
404 '%sV8Internal::namedPropertySetterCallback' % cpp_class
405 if named_property_setter else '0' %}
406 {% set named_property_query_callback =
407 '%sV8Internal::namedPropertyQueryCallback' % cpp_class
408 if named_property_getter.is_enumerable else '0' %}
409 {% set named_property_deleter_callback =
410 '%sV8Internal::namedPropertyDeleterCallback' % cpp_class
411 if named_property_deleter else '0' %}
412 {% set named_property_enumerator_callback =
413 '%sV8Internal::namedPropertyEnumeratorCallback' % cpp_class
414 if named_property_getter.is_enumerable else '0' %}
415 {
416 int flags = static_cast<int>(v8::PropertyHandlerFlags::kOnlyInterceptStr ings);
417 {% if named_property_getter.do_not_check_security %}
418 flags |= static_cast<int>(v8::PropertyHandlerFlags::kAllCanRead);
419 {% endif %}
420 {% if not is_override_builtins %}
421 flags |= static_cast<int>(v8::PropertyHandlerFlags::kNonMasking);
422 {% endif %}
423 v8::NamedPropertyHandlerConfiguration config({{named_property_getter_cal lback}}, {{named_property_setter_callback}}, {{named_property_query_callback}}, {{named_property_deleter_callback}}, {{named_property_enumerator_callback}}, v8: :Handle<v8::Value>(), static_cast<v8::PropertyHandlerFlags>(flags));
424 functionTemplate->{{set_on_template}}()->SetHandler(config);
425 }
426 {% endif %} 377 {% endif %}
427 {% if iterator_method %} 378 {% if iterator_method %}
428 {% filter exposed(iterator_method.exposed_test) %} 379 {% filter exposed(iterator_method.exposed_test) %}
429 {% filter runtime_enabled(iterator_method.runtime_enabled_function) %} 380 {% filter runtime_enabled(iterator_method.runtime_enabled_function) %}
430 const V8DOMConfiguration::SymbolKeyedMethodConfiguration symbolKeyedIterator Configuration = { v8::Symbol::GetIterator, {{cpp_class_or_partial}}V8Internal::i teratorMethodCallback, 0, v8::DontDelete, V8DOMConfiguration::ExposedToAllScript s, V8DOMConfiguration::OnPrototype }; 381 const V8DOMConfiguration::SymbolKeyedMethodConfiguration symbolKeyedIterator Configuration = { v8::Symbol::GetIterator, {{cpp_class_or_partial}}V8Internal::i teratorMethodCallback, 0, v8::DontDelete, V8DOMConfiguration::ExposedToAllScript s, V8DOMConfiguration::OnPrototype };
431 V8DOMConfiguration::installMethod(isolate, prototypeTemplate, defaultSignatu re, symbolKeyedIteratorConfiguration); 382 V8DOMConfiguration::installMethod(isolate, prototypeTemplate, defaultSignatu re, symbolKeyedIteratorConfiguration);
432 {% endfilter %}{# runtime_enabled() #} 383 {% endfilter %}{# runtime_enabled() #}
433 {% endfilter %}{# exposed() #} 384 {% endfilter %}{# exposed() #}
434 {% endif %} 385 {% endif %}
435 {# End special operations #} 386 {# End special operations #}
(...skipping 20 matching lines...) Expand all
456 {{install_custom_signature(method, 'instanceTemplate', 'prototypeTemplate', 'functionTemplate', signature) | indent}} 407 {{install_custom_signature(method, 'instanceTemplate', 'prototypeTemplate', 'functionTemplate', signature) | indent}}
457 {% endif %}{# is_do_not_check_security #} 408 {% endif %}{# is_do_not_check_security #}
458 {% endfilter %}{# runtime_enabled() #} 409 {% endfilter %}{# runtime_enabled() #}
459 {% endfilter %}{# exposed() #} 410 {% endfilter %}{# exposed() #}
460 {% endfilter %}{# conditional() #} 411 {% endfilter %}{# conditional() #}
461 {% endfor %} 412 {% endfor %}
462 {# Special interfaces #} 413 {# Special interfaces #}
463 {% if not is_partial %} 414 {% if not is_partial %}
464 {% if interface_name == 'Window' %} 415 {% if interface_name == 'Window' %}
465 416
417 instanceTemplate->SetInternalFieldCount(V8Window::internalFieldCount);
466 prototypeTemplate->SetInternalFieldCount(V8Window::internalFieldCount); 418 prototypeTemplate->SetInternalFieldCount(V8Window::internalFieldCount);
467 functionTemplate->SetHiddenPrototype(true); 419 {% endif %}
468 instanceTemplate->SetInternalFieldCount(V8Window::internalFieldCount); 420 {% if is_global or interface_name == 'HTMLDocument' %}
469 {% elif interface_name in [
470 'HTMLDocument', 'DedicatedWorkerGlobalScope', 'CompositorWorkerGlobal Scope',
471 'SharedWorkerGlobalScope', 'ServiceWorkerGlobalScope'] %}
472 functionTemplate->SetHiddenPrototype(true); 421 functionTemplate->SetHiddenPrototype(true);
473 {% endif %} 422 {% endif %}
474 423
475 // Custom toString template 424 // Custom toString template
476 functionTemplate->Set(v8AtomicString(isolate, "toString"), V8PerIsolateData: :from(isolate)->toStringTemplate()); 425 functionTemplate->Set(v8AtomicString(isolate, "toString"), V8PerIsolateData: :from(isolate)->toStringTemplate());
477 {% endif %} 426 {% endif %}
478 } 427 }
479 428
480 {% endif %}{# not is_array_buffer_or_view #} 429 {% endif %}{# not is_array_buffer_or_view #}
481 {% endblock %} 430 {% endblock %}
482 {##############################################################################} 431 {##############################################################################}
483 {% block get_dom_template %}{% endblock %} 432 {% block get_dom_template %}{% endblock %}
433 {% block get_dom_template_for_named_properties_object %}{% endblock %}
484 {% block has_instance %}{% endblock %} 434 {% block has_instance %}{% endblock %}
485 {% block to_impl %}{% endblock %} 435 {% block to_impl %}{% endblock %}
486 {% block to_impl_with_type_check %}{% endblock %} 436 {% block to_impl_with_type_check %}{% endblock %}
487 {% block install_conditional_attributes %}{% endblock %} 437 {% block install_conditional_attributes %}{% endblock %}
488 {##############################################################################} 438 {##############################################################################}
489 {% block prepare_prototype_and_interface_object %}{% endblock %} 439 {% block prepare_prototype_and_interface_object %}{% endblock %}
490 {##############################################################################} 440 {##############################################################################}
491 {% block to_active_dom_object %}{% endblock %} 441 {% block to_active_dom_object %}{% endblock %}
492 {% block ref_object_and_deref_object %}{% endblock %} 442 {% block ref_object_and_deref_object %}{% endblock %}
493 {% for method in methods if method.is_implemented_in_private_script and method.v isible %} 443 {% for method in methods if method.is_implemented_in_private_script and method.v isible %}
494 {{method_implemented_in_private_script(method)}} 444 {{method_implemented_in_private_script(method)}}
495 {% endfor %} 445 {% endfor %}
496 {% for attribute in attributes if attribute.is_implemented_in_private_script %} 446 {% for attribute in attributes if attribute.is_implemented_in_private_script %}
497 {{attribute_getter_implemented_in_private_script(attribute)}} 447 {{attribute_getter_implemented_in_private_script(attribute)}}
498 {% if attribute.has_setter %} 448 {% if attribute.has_setter %}
499 {{attribute_setter_implemented_in_private_script(attribute)}} 449 {{attribute_setter_implemented_in_private_script(attribute)}}
500 {% endif %} 450 {% endif %}
501 {% endfor %} 451 {% endfor %}
502 {% block partial_interface %}{% endblock %} 452 {% block partial_interface %}{% endblock %}
503 } // namespace blink 453 } // namespace blink
504 {% endfilter %} 454 {% endfilter %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698