{% from 'macros.tmpl' import license %}
{{license()}}

#include "config.h"
#include "gen/sky/platform/RuntimeEnabledFeatures.h"

namespace blink {

{% for feature_set in feature_sets %}
void RuntimeEnabledFeatures::set{{feature_set|capitalize}}FeaturesEnabled(bool enable)
{
    {% for feature in features if feature.status == feature_set %}
    set{{feature.name}}Enabled(enable);
    {% endfor %}
}

{% endfor %}
{% for feature in features if not feature.custom %}
{% filter enable_conditional(feature.condition) %}
bool RuntimeEnabledFeatures::is{{feature.name}}Enabled = {{'true' if feature.status == 'stable' else 'false'}};
{% endfilter %}
{% endfor %}

} // namespace blink
