1{% filter format_blink_cpp_source_code %} 2 3{% include 'copyright_block.txt' %} 4 5#include "third_party/blink/renderer/bindings/modules/v8/origin_trial_features_for_modules.h" 6 7#include "third_party/blink/renderer/bindings/core/v8/origin_trial_features_for_core.h" 8{% for include in includes %} 9#include "{{include}}" 10{% endfor %} 11 12namespace blink { 13 14namespace { 15InstallOriginTrialFeaturesFunction 16 g_original_install_origin_trial_features_function = nullptr; 17InstallPendingOriginTrialFeatureFunction 18 g_original_install_pending_origin_trial_feature_function = nullptr; 19 20void InstallOriginTrialFeaturesForModules( 21 const WrapperTypeInfo* wrapper_type_info, 22 const ScriptState* script_state, 23 v8::Local<v8::Object> prototype_object, 24 v8::Local<v8::Function> interface_object) { 25 (*g_original_install_origin_trial_features_function)( 26 wrapper_type_info, script_state, prototype_object, interface_object); 27 28 {% if installers_by_interface %} 29 ExecutionContext* execution_context = ExecutionContext::From(script_state); 30 if (!execution_context) 31 return; 32 v8::Isolate* isolate = script_state->GetIsolate(); 33 const DOMWrapperWorld& world = script_state->World(); 34 // TODO(iclelland): Extract this common code out of OriginTrialFeaturesForCore 35 // and OriginTrialFeaturesForModules into a block. 36 {% for interface in installers_by_interface %} 37 if (wrapper_type_info == {{interface.v8_class}}::GetWrapperTypeInfo()) { 38 {% if interface.is_global %} 39 v8::Local<v8::Object> instance_object = 40 script_state->GetContext()->Global(); 41 {% endif %} 42 {% for installer in interface.installers %} 43 if ({{installer.condition}}(execution_context)) { 44 {{installer.v8_class_or_partial}}::{{installer.install_method}}( 45 isolate, world, {% if interface.is_global %}instance_object{% else %}v8::Local<v8::Object>(){% endif %}, prototype_object, interface_object); 46 } 47 {% endfor %} 48 } 49 {% endfor %} 50 {% endif %} 51} 52 53void InstallPendingOriginTrialFeatureForModules( 54 OriginTrialFeature feature, 55 const ScriptState* script_state) { 56 (*g_original_install_pending_origin_trial_feature_function)(feature, 57 script_state); 58 59 // TODO(iclelland): Extract this common code out of OriginTrialFeaturesForCore 60 // and OriginTrialFeaturesForModules into a block. 61 {% if installers_by_feature %} 62 v8::Local<v8::Object> prototype_object; 63 v8::Local<v8::Function> interface_object; 64 v8::Isolate* isolate = script_state->GetIsolate(); 65 const DOMWrapperWorld& world = script_state->World(); 66 V8PerContextData* context_data = script_state->PerContextData(); 67 switch (feature) { 68 {% for feature in installers_by_feature %} 69 case {{feature.name_constant}}: { 70 {% for installer in feature.installers %} 71 {% if installer.interface_is_global %} 72 {{installer.v8_class_or_partial}}::{{installer.install_method}}( 73 isolate, world, script_state->GetContext()->Global(), 74 v8::Local<v8::Object>(), v8::Local<v8::Function>()); 75 {% else %} 76 if (context_data->GetExistingConstructorAndPrototypeForType( 77 {{installer.v8_class}}::GetWrapperTypeInfo(), &prototype_object, &interface_object)) { 78 {{installer.v8_class_or_partial}}::{{installer.install_method}}( 79 isolate, world, v8::Local<v8::Object>(), prototype_object, interface_object); 80 } 81 {% endif %} 82 {% endfor %} 83 break; 84 } 85 {% endfor %} 86 default: 87 break; 88 } 89 {% endif %} 90} 91 92} // namespace 93 94void RegisterInstallOriginTrialFeaturesForModules() { 95 RegisterInstallOriginTrialFeaturesForCore(); 96 g_original_install_origin_trial_features_function = 97 SetInstallOriginTrialFeaturesFunction( 98 &InstallOriginTrialFeaturesForModules); 99 g_original_install_pending_origin_trial_feature_function = 100 SetInstallPendingOriginTrialFeatureFunction( 101 &InstallPendingOriginTrialFeatureForModules); 102} 103 104} // namespace blink 105 106{% endfilter %}{# format_blink_cpp_source_code #} 107