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

Unified Diff: third_party/WebKit/Source/bindings/templates/ConditionalFeaturesForModules.cpp.tmpl

Issue 2970003002: Add code generation for ConditionalFeatures bindings code (Closed)
Patch Set: Readability fixes Created 3 years, 5 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/ConditionalFeaturesForModules.cpp.tmpl
diff --git a/third_party/WebKit/Source/bindings/templates/ConditionalFeaturesForModules.cpp.tmpl b/third_party/WebKit/Source/bindings/templates/ConditionalFeaturesForModules.cpp.tmpl
new file mode 100644
index 0000000000000000000000000000000000000000..af3b82a6e86c42575b7bbf1a36e7763d8b04f154
--- /dev/null
+++ b/third_party/WebKit/Source/bindings/templates/ConditionalFeaturesForModules.cpp.tmpl
@@ -0,0 +1,95 @@
+{% filter format_blink_cpp_source_code %}
+
+{% include 'copyright_block.txt' %}
+
+#include "bindings/modules/v8/ConditionalFeaturesForModules.h"
+
+#include "bindings/core/v8/ConditionalFeaturesForCore.h"
+{% for include in includes %}
+#include "{{include}}"
+{% endfor %}
+
+namespace blink {
+
+namespace {
+InstallConditionalFeaturesFunction
+ g_original_install_conditional_features_function = nullptr;
+InstallPendingConditionalFeatureFunction
+ g_original_install_pending_conditional_feature_function = nullptr;
+}
+
+void InstallConditionalFeaturesForModules(
+ const WrapperTypeInfo* wrapper_type_info,
+ const ScriptState* script_state,
+ v8::Local<v8::Object> prototype_object,
+ v8::Local<v8::Function> interface_object) {
+ (*g_original_install_conditional_features_function)(
+ wrapper_type_info, script_state, prototype_object, interface_object);
+
+ {% if installers_by_interface %}
+ ExecutionContext* execution_context = ExecutionContext::From(script_state);
+ if (!execution_context)
+ return;
+ v8::Isolate* isolate = script_state->GetIsolate();
+ const DOMWrapperWorld& world = script_state->World();
+ // TODO(iclelland): Extract this common code out of ConditionalFeaturesForCore
+ // and ConditionalFeaturesForModules into a block.
+ {% for interface in installers_by_interface %}
+ if (wrapper_type_info == &{{interface.v8_class}}::wrapperTypeInfo) {
+ {% if interface.is_global %}
+ v8::Local<v8::Object> instance_object =
+ script_state->GetContext()->Global();
+ {% endif %}
+ {% for installer in interface.installers %}
+ if ({{installer.condition}}(execution_context)) {
+ {{installer.v8_class_or_partial}}::{{installer.install_method}}(
+ isolate, world, {% if interface.is_global %}instance_object{% else %}v8::Local<v8::Object>(){% endif %}, prototype_object, interface_object);
+ }
+ {% endfor %}
+ }
+ {% endfor %}
+ {% endif %}
+}
+
+void InstallPendingConditionalFeatureForModules(
+ const String& feature,
+ const ScriptState* script_state) {
+ (*g_original_install_pending_conditional_feature_function)(feature,
+ script_state);
+
+ // TODO(iclelland): Extract this common code out of ConditionalFeaturesForCore
+ // and ConditionalFeaturesForModules into a block.
+ {% if installers_by_feature %}
+ v8::Local<v8::Object> prototype_object;
+ v8::Local<v8::Function> interface_object;
+ v8::Isolate* isolate = script_state->GetIsolate();
+ const DOMWrapperWorld& world = script_state->World();
+ V8PerContextData* context_data = script_state->PerContextData();
+ {% for feature in installers_by_feature %}
+ if (feature == "{{feature.name}}") {
+ {% for installer in feature.installers %}
+ if (context_data->GetExistingConstructorAndPrototypeForType(
+ &{{installer.v8_class}}::wrapperTypeInfo, &prototype_object, &interface_object)) {
+ {{installer.v8_class_or_partial}}::{{installer.install_method}}(
+ isolate, world, v8::Local<v8::Object>(), prototype_object, interface_object);
+ }
+ {% endfor %}
+ return;
+ }
+ {% endfor %}
+ {% endif %}
+}
+
+void RegisterInstallConditionalFeaturesForModules() {
+ RegisterInstallConditionalFeaturesForCore();
+ g_original_install_conditional_features_function =
+ SetInstallConditionalFeaturesFunction(
+ &InstallConditionalFeaturesForModules);
+ g_original_install_pending_conditional_feature_function =
+ SetInstallPendingConditionalFeatureFunction(
+ &InstallPendingConditionalFeatureForModules);
+}
+
+} // namespace blink
+
+{% endfilter %}{# format_blink_cpp_source_code #}

Powered by Google App Engine
This is Rietveld 408576698