blob: d209fea73c0eeff3940317ec6840e521b688daed [file] [log] [blame]
{% 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