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

Unified Diff: Source/bindings/templates/partial_interface.cpp

Issue 618373003: [bindings] partial interfaces should not violate componentization (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fixed http/tests/serviceworker/fetch\* regression Created 6 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: Source/bindings/templates/partial_interface.cpp
diff --git a/Source/bindings/templates/partial_interface.cpp b/Source/bindings/templates/partial_interface.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5a7530e5be01a78023d51651f378800e6222a734
--- /dev/null
+++ b/Source/bindings/templates/partial_interface.cpp
@@ -0,0 +1,216 @@
+{% extends 'interface_base.cpp' %}
+
+{##############################################################################}
haraken 2014/10/09 04:24:01 Nit: I'd drop {######} just to list up outlined bl
tasak 2014/10/10 07:52:24 Done.
+{% block indexed_property_getter %}
+{% endblock %}
+
+{##############################################################################}
+{% block indexed_property_getter_callback %}
+{% endblock %}
+
+{##############################################################################}
+{% block indexed_property_setter %}
+{% endblock %}
+
+{##############################################################################}
+{% block indexed_property_setter_callback %}
+{% endblock %}
+
+{##############################################################################}
+{% block indexed_property_deleter %}
+{% endblock %}
+
+{##############################################################################}
+{% block indexed_property_deleter_callback %}
+{% endblock %}
+
+{##############################################################################}
+{% from 'methods.cpp' import union_type_method_call_and_set_return_value %}
haraken 2014/10/09 04:24:01 Is this needed?
tasak 2014/10/10 07:52:23 Done.
+{% block named_property_getter %}
+{% endblock %}
+
+{##############################################################################}
+{% block named_property_getter_callback %}
+{% endblock %}
+
+{##############################################################################}
+{% block named_property_setter %}
+{% endblock %}
+
+{##############################################################################}
+{% block named_property_setter_callback %}
+{% endblock %}
+
+{##############################################################################}
+{% block named_property_query %}
+{% endblock %}
+
+{##############################################################################}
+{% block named_property_query_callback %}
+{% endblock %}
+
+{##############################################################################}
+{% block named_property_deleter %}
+{% endblock %}
+
+{##############################################################################}
+{% block named_property_deleter_callback %}
+{% endblock %}
+
+{##############################################################################}
+{% block named_property_enumerator %}
+{% endblock %}
+
+{##############################################################################}
+{% block named_property_enumerator_callback %}
+{% endblock %}
+
+{##############################################################################}
+{% block origin_safe_method_setter %}
+{% endblock %}
+
+{##############################################################################}
+{% from 'methods.cpp' import generate_constructor with context %}
+{% block named_constructor %}
+{% endblock %}
+
+{##############################################################################}
+{% block overloaded_constructor %}
+{% endblock %}
+
+{##############################################################################}
+{% block event_constructor %}
+{% endblock %}
+
+{##############################################################################}
+{% block visit_dom_wrapper %}
+{% endblock %}
+
+{##############################################################################}
+{% block shadow_attributes %}
+{% endblock %}
+
+{##############################################################################}
+{% block initialize_event %}
+{% endblock %}
+
+{##############################################################################}
+{% block constructor_callback %}
+{% endblock %}
+
+{##############################################################################}
+{% block configure_shadow_object_template %}
+{% endblock %}
+
+{######################################}
+
+{##############################################################################}
+{% block get_dom_template %}
+{% endblock %}
+{% block has_instance %}
+{% endblock %}
+{% block to_native_with_type_check %}
+{% endblock %}
+
+{##############################################################################}
+{% block install_conditional_attributes %}
+{% if has_conditional_attributes %}
+void {{v8_class}}Partial::installConditionallyEnabledProperties(v8::Handle<v8::Object> instanceTemplate, v8::Isolate* isolate)
+{
+ {# install per-context enabled properties defined in master interface. #}
haraken 2014/10/09 04:24:01 master => original
tasak 2014/10/10 07:52:23 Done.
+ {{v8_class}}::installConditionallyEnabledProperties(instanceTemplate, isolate);
+
+ {# install per-context enabled properties defined in partial interface. #}
+ v8::Local<v8::Object> prototypeTemplate = v8::Local<v8::Object>::Cast(instanceTemplate->GetPrototype());
+ {% for attribute in attributes if attribute.per_context_enabled_function or attribute.exposed_test %}
+ if ({{attribute.per_context_enabled_function}}(impl->document())) {
+ static const V8DOMConfiguration::AttributeConfiguration attributeConfiguration =\
+ {{attribute_configuration(attribute)}};
+ V8DOMConfiguration::installAttribute(instanceTemplate, prototypeTemplate, attributeConfiguration, isolate);
+ }
+ {% endfor %}
+}
+{% else %}
+void {{v8_class}}Partial::installConditionallyEnabledProperties(v8::Handle<v8::Object> instanceTemplate, v8::Isolate* isolate)
+{
+ {# invoke installConditionallyEnabledProperties defined in master #}
haraken 2014/10/09 04:24:01 master => original interface
tasak 2014/10/10 07:52:23 Done.
+ {{v8_class}}::installConditionallyEnabledProperties(instanceTemplate, isolate);
+}
+{% endif %}
+{% endblock %}
+
+
+{##############################################################################}
+{% block install_conditional_methods %}
+{% if conditionally_enabled_methods %};
+void {{v8_class}}Partial::installConditionallyEnabledMethods(v8::Handle<v8::Object> prototypeTemplate, v8::Isolate* isolate)
+{
+ {# Define per-context enabled operations defined in master interfaces #}
haraken 2014/10/09 04:24:01 master => original
tasak 2014/10/10 07:52:23 Done.
+ {{v8_class}}::installConditionallyEnabledMethods(prototypeTemplate, isolate);
+
+ {# Define per-context enabled operations #}
+ v8::Local<v8::Signature> defaultSignature = v8::Signature::New(isolate, domTemplate(isolate));
+ ExecutionContext* context = toExecutionContext(prototypeObject->CreationContext());
haraken 2014/10/09 04:24:01 Where is prototypeObject defined?
tasak 2014/10/10 07:52:23 This is a bug when I copied code from interface.cp
+ ASSERT(context);
+
+ {% for method in conditionally_enabled_methods %}
+ {% filter per_context_enabled(method.per_context_enabled_function) %}
+ {% filter exposed(method.exposed_test) %}
haraken 2014/10/09 04:24:01 Shall we use 'for ... if ...' instead of filters,
tasak 2014/10/10 07:52:23 Looking at the newest code, installConditionallyEn
+ prototypeObject->Set(v8AtomicString(isolate, "{{method.name}}"), v8::FunctionTemplate::New(isolate, {{cpp_class}}V8PartialInternal::{{method.name}}MethodCallback, v8Undefined(), defaultSignature, {{method.number_of_required_arguments}})->GetFunction());
+ {% endfilter %}
+ {% endfilter %}
+ {% endfor %}
+}
+{% else %}
+void {{v8_class}}Partial::installConditionallyEnabledMethods(v8::Handle<v8::Object> prototypeTemplate, v8::Isolate* isolate)
+{
+ {# invoke installConditionallyEnabledMethods defined in master #}
haraken 2014/10/09 04:24:01 master => original interface
tasak 2014/10/10 07:52:23 Done.
+ {{v8_class}}::installConditionallyEnabledMethods(prototypeTemplate, isolate);
+}
+{% endif %}
+{% endblock %}
+
+{##############################################################################}
+{% block to_active_dom_object %}
+{% endblock %}
+
+{##############################################################################}
+{% block to_event_target %}
+{% endblock %}
+
+{##############################################################################}
+{% block get_shadow_object_template %}
+{% endblock %}
+
+{##############################################################################}
+{% block wrap %}
+{% endblock %}
+
+{##############################################################################}
+{% block create_wrapper %}
haraken 2014/10/09 04:24:01 I don't fully understand why we need createWrapper
tasak 2014/10/10 07:52:23 Yeah, we don't need createWrapper for partial inte
+{% endblock %}
+
+{##############################################################################}
+{% block deref_object_and_to_v8_no_inline %}
+{% endblock %}
+
+{##############################################################################}
+{% block partial_interface %}
+void {{v8_class}}Partial::initialize()
+{
+ // Should be invoked from initModules.
+ {{v8_class}}::updateWrapperTypeInfo(
+ &{{v8_class}}Partial::install{{v8_class}}Template,
+ &{{v8_class}}Partial::installConditionallyEnabledMethods);
+ {% for method in methods %}
+ {% if method.overloads and method.overloads.partial_overloads %}
+ {% if not method.overload_index or method.overloads %}
haraken 2014/10/09 04:24:01 I don't understand this condition. This if branch
tasak 2014/10/10 07:52:23 This should be "method.overloads and method.overlo
+ {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInterface(&{{cpp_class}}PartialV8Internal::{{method.name}}Method);
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+}
+
+{% endblock %}
+
+

Powered by Google App Engine
This is Rietveld 408576698