| {% from 'templates/macros.tmpl' import license, source_files_for_generated_file %} |
| {{license()}} |
| |
| {{source_files_for_generated_file(template_file, input_files)}} |
| |
| #include "third_party/blink/renderer/core/origin_trials/origin_trials.h" |
| |
| #include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h" |
| #include "third_party/blink/renderer/platform/runtime_enabled_features.h" |
| #include "third_party/blink/renderer/platform/wtf/hash_map.h" |
| |
| namespace blink { |
| |
| using TrialToFeaturesMap = HashMap<String, Vector<OriginTrialFeature>>; |
| |
| namespace { |
| |
| const TrialToFeaturesMap& GetTrialToFeaturesMap() { |
| // The object needs to be thread-safe because service workers can call this |
| // function as well. |
| DEFINE_THREAD_SAFE_STATIC_LOCAL(TrialToFeaturesMap, trial_to_features_map, ()); |
| if (trial_to_features_map.IsEmpty()) { |
| {% for trial_name, features_list in trial_to_features_map.items() %} |
| trial_to_features_map.Set("{{trial_name}}", |
| Vector<OriginTrialFeature>({ |
| {%- for trial_feature in features_list %} |
| OriginTrialFeature::k{{trial_feature.name}}, |
| {%- endfor %} |
| })); |
| {% endfor %} |
| // For testing |
| trial_to_features_map.Set("This trial does not exist", |
| Vector<OriginTrialFeature>({OriginTrialFeature::kNonExisting})); |
| } |
| return trial_to_features_map; |
| } |
| |
| } // namespace |
| |
| bool origin_trials::IsTrialValid(const String& trial_name) { |
| return GetTrialToFeaturesMap().Contains(trial_name); |
| } |
| |
| |
| const Vector<OriginTrialFeature>& origin_trials::FeaturesForTrial(const String& trial_name) { |
| DCHECK(IsTrialValid(trial_name)); |
| return GetTrialToFeaturesMap().find(trial_name)->value; |
| } |
| |
| |
| Vector<OriginTrialFeature> origin_trials::GetImpliedFeatures(OriginTrialFeature feature) { |
| {% for implied_by_name, implied_list in implied_origin_trial_features.items() %} |
| if (feature == OriginTrialFeature::k{{implied_by_name}}) { |
| Vector<OriginTrialFeature> implied_features = { |
| {%- for implied_name in implied_list %} |
| OriginTrialFeature::k{{implied_name}}, |
| {%- endfor %} |
| }; |
| return implied_features; |
| } |
| {% endfor %} |
| return Vector<OriginTrialFeature>(); |
| } |
| |
| |
| bool origin_trials::FeatureEnabledForOS(OriginTrialFeature feature) { |
| switch (feature) { |
| {% for feature in features %} |
| {% if feature.origin_trial_feature_name %} |
| case OriginTrialFeature::k{{feature.name}}: |
| {% if feature.origin_trial_os %} |
| #if |
| {%- for os in feature.origin_trial_os %} |
| {%- if not loop.first %} ||{% endif %} |
| defined(OS_{{os | upper}}) |
| {%- endfor %} |
| |
| return true; |
| #else |
| return false; |
| #endif |
| {% else %} |
| return true; |
| {% endif %} |
| {% endif %} |
| {% endfor %} |
| // For testing |
| case OriginTrialFeature::kNonExisting: |
| return true; |
| } |
| } |
| |
| } // namespace blink |