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