| {% 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 |