1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef EXTENSIONS_COMMON_FEATURES_FEATURE_PROVIDER_H_ 6 #define EXTENSIONS_COMMON_FEATURES_FEATURE_PROVIDER_H_ 7 8 #include <string> 9 #include <vector> 10 11 namespace extensions { 12 13 class Feature; 14 15 // Implemented by classes that can vend features. 16 class FeatureProvider { 17 public: 18 FeatureProvider() {} 19 virtual ~FeatureProvider() {} 20 21 // Returns the feature with the specified name. 22 virtual Feature* GetFeature(const std::string& name) = 0; 23 24 // Returns the parent feature of |feature|, or NULL if there isn't one. 25 virtual Feature* GetParent(Feature* feature) = 0; 26 27 // Returns all features described by this instance. 28 virtual const std::vector<std::string>& GetAllFeatureNames() = 0; 29 30 // Gets a feature provider for a specific feature type, like "permission". 31 static FeatureProvider* GetByName(const std::string& name); 32 33 // Directly access the common feature types. 34 static FeatureProvider* GetAPIFeatures(); 35 static FeatureProvider* GetManifestFeatures(); 36 static FeatureProvider* GetPermissionFeatures(); 37 }; 38 39 } // namespace extensions 40 41 #endif // EXTENSIONS_COMMON_FEATURES_FEATURE_PROVIDER_H_ 42