blob: 2b5eeb4e371c3c68593864fabd7ed5c898bfa434 [file] [log] [blame]
{% from 'templates/macros.tmpl' import license, source_files_for_generated_file, platform_define %}
{{license()}}
{{source_files_for_generated_file(template_file, input_files)}}
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "third_party/blink/renderer/platform/wtf/assertions.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
RuntimeEnabledFeatures::Backup::Backup()
: {% for feature in features -%}
{{feature.data_member_name}}(RuntimeEnabledFeatures::{{feature.data_member_name}})
{%- if not loop.last %},
{%+ endif -%}
{% endfor %} {}
void RuntimeEnabledFeatures::Backup::Restore() {
{% for feature in features %}
RuntimeEnabledFeatures::{{feature.data_member_name}} = {{feature.data_member_name}};
{% endfor %}
}
{% for feature_set in feature_sets %}
void RuntimeEnabledFeatures::Set{{feature_set|capitalize}}FeaturesEnabled(bool enable) {
{% for feature in features if feature.status_type == 'str' and feature.status == feature_set %}
Set{{feature.name}}Enabled(enable);
{% endfor %}
// Platform-dependent features
{% for platform in platforms %}
#if {{platform_define(platform)}}
{% for feature in features if feature.status_type == 'dict' and feature.status[platform] == feature_set %}
Set{{feature.name}}Enabled(enable);
{% endfor %}
#endif
{% endfor %}
// Default values for platforms not specifically handled above
#if
{%- for platform in platforms %}
{%- if not loop.first %} &&{% endif %}
!{{platform_define(platform)}}
{%- endfor %}
{% for feature in features if feature.status_type == 'dict' and feature.status['default'] == feature_set %}
Set{{feature.name}}Enabled(enable);
{% endfor %}
#endif
}
{% endfor %}
void RuntimeEnabledFeatures::SetOriginTrialControlledFeaturesEnabled(bool enable) {
{% for feature in origin_trial_controlled_features %}
Set{{feature.name}}Enabled(enable);
{% endfor %}
}
void RuntimeEnabledFeatures::SetFeatureEnabledFromString(
const std::string& name, bool enable) {
static const struct {
const char* name;
bool* setting;
} kFeatures[] = {
{% for feature in features %}
{"{{feature.name}}", &{{feature.data_member_name}}},
{% endfor %}
};
for (const auto& feature : kFeatures) {
if (name == feature.name) {
*feature.setting = enable;
return;
}
}
DLOG(ERROR) << "RuntimeEnabledFeature not recognized: " << name;
}
{% for feature in origin_trial_controlled_features %}
bool RuntimeEnabledFeatures::{{feature.name}}Enabled(const FeatureContext* context) {
{% for depends_on in feature.depends_on %}
if (!RuntimeEnabledFeatures::{{depends_on}}Enabled(context))
return false;
{% endfor %}
{% for implied_by in feature.implied_by %}
if (RuntimeEnabledFeatures::{{implied_by}}Enabled(context))
return true;
{% endfor %}
if ({{feature.data_member_name}})
return true;
{% if not feature.origin_trial_feature_name %}
// The feature does not have an origin trial name and its runtime flag
// is not enabled.
return false;
{% else %}
return context && context->FeatureEnabled(OriginTrialFeature::k{{feature.name}});
{% endif %}
}
{% endfor %}
{% for feature in features %}
{% if feature.status_type == 'str' %}
bool RuntimeEnabledFeatures::{{feature.data_member_name}} = {{'true' if feature.status == 'stable' else 'false'}};
{% endif %}
{% endfor %}
// Platform-dependent features
{% for platform in platforms %}
#if {{platform_define(platform)}}
{% for feature in features %}
{% if feature.status_type == 'dict' %}
bool RuntimeEnabledFeatures::{{feature.data_member_name}} = {{'true' if feature.status[platform] == 'stable' else 'false'}};
{% endif %}
{% endfor %}
#endif
{% endfor %}
// Default values for platforms not specifically handled above
#if
{%- for platform in platforms %}
{%- if not loop.first %} &&{% endif %}
!{{platform_define(platform)}}
{%- endfor %}
{% for feature in features %}
{% if feature.status_type == 'dict' %}
bool RuntimeEnabledFeatures::{{feature.data_member_name}} = {{'true' if feature.status['default'] == 'stable' else 'false'}};
{% endif %}
{% endfor %}
#endif
} // namespace blink