// Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_FEATURE_VISITOR_H_ #define BASE_FEATURE_VISITOR_H_ #include #include #include "base/feature_list.h" #include "build/chromeos_buildflags.h" static_assert(BUILDFLAG(IS_CHROMEOS_ASH), "For ChromeOS ash-chrome only"); namespace variations::cros_early_boot::evaluate_seed { class EarlyBootFeatureVisitor; } namespace base { class TestFeatureVisitor; // An interface for EarlyBootFeatureVisitor that provides a method to // iterate over a feature's name, override state, parameters, and associated // field trial. // // NOTE: This is intended only for the special case of needing to get all // feature overrides. Most users should call FeatureList::IsEnabled() to query // a feature's state. class FeatureVisitor { public: FeatureVisitor(const FeatureVisitor&) = delete; FeatureVisitor& operator=(const FeatureVisitor&) = delete; virtual ~FeatureVisitor() = default; // Intended to be called in FeatureList::VisitFeaturesAndParams(). This method // is called once per feature. virtual void Visit(const std::string& feature_name, FeatureList::OverrideState override_state, const std::map& params, const std::string& trial_name, const std::string& group_name) = 0; private: friend variations::cros_early_boot::evaluate_seed::EarlyBootFeatureVisitor; friend TestFeatureVisitor; // The constructor is private so only friend classes can inherit from this // class. This limits access to who can iterate over features in // FeatureList::VisitFeaturesAndParams(). FeatureVisitor() = default; }; } // namespace base #endif // BASE_FEATURE_VISITOR_H_