{% from "macros.tmpl" import wrap_with_condition, license -%}
{{ license() }}

#ifndef RuntimeEnabledFeatures_h
#define RuntimeEnabledFeatures_h

namespace WebCore {

// A class that stores static enablers for all experimental features.

class RuntimeEnabledFeatures {
public:

{%- for feature_set in feature_sets %}
    static void set{{feature_set|capitalize}}FeaturesEnabled(bool);
{%- endfor %}

{% for feature in features %}
{%- if feature.custom %}
    static bool {{feature.first_lowered_name}}Enabled();
{%- else %}
{%- if feature.condition %}
#if ENABLE({{feature.condition}})
{%- endif %}
    static void set{{feature.name}}Enabled(bool isEnabled) { is{{feature.name}}Enabled = isEnabled; }
    static bool {{feature.first_lowered_name}}Enabled() { return {{feature.enabled_condition}}; }
{%- if feature.condition %}
#else
    static void set{{feature.name}}Enabled(bool) { }
    static bool {{feature.first_lowered_name}}Enabled() { return false; }
#endif
{%- endif %}
{%- endif %}
{% endfor %}

private:
    RuntimeEnabledFeatures() { }
{% for feature in features if not feature.custom %}
{%- call wrap_with_condition(feature.condition) %}
    static bool is{{feature.name}}Enabled;
{%- endcall %}
{%- endfor %}
};

} // namespace WebCore

#endif // RuntimeEnabledFeatures_h
