#ifndef EXTENSIONS_COMMON_FEATURES_FEATURE_PROVIDER_H_
#define EXTENSIONS_COMMON_FEATURES_FEATURE_PROVIDER_H_
#include <string>
#include <vector>
namespace extensions {
class Feature;
class FeatureProvider {
public:
FeatureProvider() {}
virtual ~FeatureProvider() {}
virtual Feature* GetFeature(const std::string& name) const = 0;
virtual Feature* GetParent(Feature* feature) const = 0;
virtual std::vector<Feature*> GetChildren(const Feature& parent) const = 0;
virtual const std::vector<std::string>& GetAllFeatureNames() const = 0;
static FeatureProvider* GetByName(const std::string& name);
static FeatureProvider* GetAPIFeatures();
static FeatureProvider* GetManifestFeatures();
static FeatureProvider* GetPermissionFeatures();
};
}
#endif