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 #} |