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

Unified Diff: third_party/WebKit/Source/bindings/templates/interface.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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/bindings/templates/interface.cpp
diff --git a/third_party/WebKit/Source/bindings/templates/interface.cpp b/third_party/WebKit/Source/bindings/templates/interface.cpp
index cd9099936adf991f54f65ef57b394c08b6aad057..7046525d6d3b2090847a7b5973aee03f855905e9 100644
--- a/third_party/WebKit/Source/bindings/templates/interface.cpp
+++ b/third_party/WebKit/Source/bindings/templates/interface.cpp
@@ -646,6 +646,63 @@ V8DOMConfiguration::installAttribute(isolate, {{instance_template}}, {{prototype
{##############################################################################}
+{% macro install_indexed_property_handler(target) %}
+{% set indexed_property_getter_callback =
+ '%sV8Internal::indexedPropertyGetterCallback' % cpp_class %}
+{% set indexed_property_setter_callback =
+ '%sV8Internal::indexedPropertySetterCallback' % cpp_class
+ if indexed_property_setter else '0' %}
+{% set indexed_property_query_callback = '0' %}{# Unused #}
+{% set indexed_property_deleter_callback =
+ '%sV8Internal::indexedPropertyDeleterCallback' % cpp_class
+ if indexed_property_deleter else '0' %}
+{% set indexed_property_enumerator_callback =
+ 'indexedPropertyEnumerator<%s>' % cpp_class
+ if indexed_property_getter.is_enumerable else '0' %}
+{% set property_handler_flags =
+ 'v8::PropertyHandlerFlags::kAllCanRead'
+ if indexed_property_getter.do_not_check_security
+ else 'v8::PropertyHandlerFlags::kNone' %}
+v8::IndexedPropertyHandlerConfiguration indexedPropertyHandlerConfig({{indexed_property_getter_callback}}, {{indexed_property_setter_callback}}, {{indexed_property_query_callback}}, {{indexed_property_deleter_callback}}, {{indexed_property_enumerator_callback}}, v8::Local<v8::Value>(), {{property_handler_flags}});
+{{target}}->SetHandler(indexedPropertyHandlerConfig);
+{%- endmacro %}
+
+
+{##############################################################################}
+{% macro install_named_property_handler(target) %}
+{% set named_property_getter_callback =
+ '%sV8Internal::namedPropertyGetterCallback' % cpp_class %}
+{% set named_property_setter_callback =
+ '%sV8Internal::namedPropertySetterCallback' % cpp_class
+ if named_property_setter else '0' %}
+{% set named_property_query_callback =
+ '%sV8Internal::namedPropertyQueryCallback' % cpp_class
+ if named_property_getter.is_enumerable else '0' %}
+{% set named_property_deleter_callback =
+ '%sV8Internal::namedPropertyDeleterCallback' % cpp_class
+ if named_property_deleter else '0' %}
+{% set named_property_enumerator_callback =
+ '%sV8Internal::namedPropertyEnumeratorCallback' % cpp_class
+ if named_property_getter.is_enumerable else '0' %}
+{% set property_handler_flags_list =
+ ['int(v8::PropertyHandlerFlags::kOnlyInterceptStrings)'] %}
+{% if named_property_getter.do_not_check_security %}
+{% set property_handler_flags_list =
+ property_handler_flags_list + ['int(v8::PropertyHandlerFlags::kAllCanRead)'] %}
+{% endif %}
+{% if not is_override_builtins %}
+{% set property_handler_flags_list =
+ property_handler_flags_list + ['int(v8::PropertyHandlerFlags::kNonMasking)'] %}
+{% endif %}
+{% set property_handler_flags =
+ 'static_cast<v8::PropertyHandlerFlags>(%s)' %
+ ' | '.join(property_handler_flags_list) %}
+v8::NamedPropertyHandlerConfiguration namedPropertyHandlerConfig({{named_property_getter_callback}}, {{named_property_setter_callback}}, {{named_property_query_callback}}, {{named_property_deleter_callback}}, {{named_property_enumerator_callback}}, v8::Local<v8::Value>(), {{property_handler_flags}});
+{{target}}->SetHandler(namedPropertyHandlerConfig);
+{%- endmacro %}
+
+
+{##############################################################################}
{% block get_dom_template %}
{% if not is_array_buffer_or_view %}
v8::Local<v8::FunctionTemplate> {{v8_class}}::domTemplate(v8::Isolate* isolate)
@@ -665,6 +722,28 @@ v8::Local<v8::FunctionTemplate> {{v8_class}}::domTemplate(v8::Isolate* isolate)
{##############################################################################}
+{% block get_dom_template_for_named_properties_object %}
+{% if has_named_properties_object %}
+v8::Local<v8::FunctionTemplate> {{v8_class}}::domTemplateForNamedPropertiesObject(v8::Isolate* isolate)
+{
+ v8::Local<v8::FunctionTemplate> parentTemplate = V8{{parent_interface}}::domTemplate(isolate);
+
+ v8::Local<v8::FunctionTemplate> namedPropertiesObjectFunctionTemplate = v8::FunctionTemplate::New(isolate);
+ namedPropertiesObjectFunctionTemplate->SetClassName(v8AtomicString(isolate, "{{interface_name}}Properties"));
+ namedPropertiesObjectFunctionTemplate->Inherit(parentTemplate);
+
+ v8::Local<v8::ObjectTemplate> namedPropertiesObjectTemplate = namedPropertiesObjectFunctionTemplate->PrototypeTemplate();
+ namedPropertiesObjectTemplate->SetInternalFieldCount({{v8_class}}::internalFieldCount);
+ {{install_named_property_handler('namedPropertiesObjectTemplate') | indent}}
+
+ return namedPropertiesObjectFunctionTemplate;
+}
+
+{% endif %}
+{% endblock %}
+
+
+{##############################################################################}
{% block has_instance %}
bool {{v8_class}}::hasInstance(v8::Local<v8::Value> v8Value, v8::Isolate* isolate)
{
@@ -902,6 +981,7 @@ void {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInt
{
{{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method;
}
+
{% endfor %}
{% endif %}
{% endblock %}

Powered by Google App Engine
This is Rietveld 408576698