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

#ifndef InternalRuntimeFlags_h
#define InternalRuntimeFlags_h

#include "RuntimeEnabledFeatures.h"
#include "wtf/PassRefPtr.h"
#include "wtf/RefPtr.h"
#include "wtf/RefCounted.h"

namespace WebCore {

class InternalRuntimeFlags : public RefCounted<InternalRuntimeFlags> {
public:
    static PassRefPtr<InternalRuntimeFlags> create()
    {
        return adoptRef(new InternalRuntimeFlags);
    }

{#-
    Setting after startup does not work for most runtime flags, but we
    could add an option to print setters for ones which do:
    void set{{feature.name}}Enabled(bool isEnabled) { RuntimeEnabledFeatures::set{{feature.name}}Enabled(isEnabled); }
    If we do that, we also need to respect Internals::resetToConsistentState.
#}
{% for feature in features if not feature.custom %}
{%- call wrap_with_condition(feature.condition) %}
    bool {{feature.first_lowered_name}}Enabled() { return RuntimeEnabledFeatures::{{feature.first_lowered_name}}Enabled(); }
{%- endcall %}
{% endfor %}

private:
    InternalRuntimeFlags() { }
};

} // namespace WebCore

#endif // InternalRuntimeFlags_h

