Index: extensions/common/features/feature_provider.cc |
diff --git a/extensions/common/features/feature_provider.cc b/extensions/common/features/feature_provider.cc |
index d5357f18d9ebb112515e98afccda280f62143bb2..fc0ee5b46b420b5653272004d4d442c6441bdae4 100644 |
--- a/extensions/common/features/feature_provider.cc |
+++ b/extensions/common/features/feature_provider.cc |
@@ -4,14 +4,47 @@ |
#include "extensions/common/features/feature_provider.h" |
+#include <map> |
+ |
#include "base/basictypes.h" |
+#include "base/lazy_instance.h" |
+#include "base/memory/linked_ptr.h" |
#include "extensions/common/extensions_client.h" |
namespace extensions { |
+namespace { |
+ |
+struct Static { |
not at google - send to devlin
2014/04/22 21:39:09
this seems more like a class, and |feature_provide
Yoyo Zhou
2014/04/22 23:17:40
Done.
|
+ Static() { |
+ ExtensionsClient* client = ExtensionsClient::Get(); |
+ feature_providers["api"] = |
+ make_linked_ptr(client->CreateFeatureProvider("api")); |
+ feature_providers["manifest"] = |
+ make_linked_ptr(client->CreateFeatureProvider("manifest")); |
+ feature_providers["permission"] = |
+ make_linked_ptr(client->CreateFeatureProvider("permission")); |
+ } |
+ |
+ typedef std::map<std::string, linked_ptr<FeatureProvider> > |
+ FeatureProviderMap; |
+ |
+ FeatureProvider* GetFeatures(const std::string& name) const { |
+ FeatureProviderMap::const_iterator it = feature_providers.find(name); |
+ CHECK(it != feature_providers.end()); |
+ return it->second.get(); |
+ } |
+ |
+ FeatureProviderMap feature_providers; |
+}; |
+ |
+base::LazyInstance<Static> g_static = LAZY_INSTANCE_INITIALIZER; |
+ |
+} // namespace |
+ |
// static |
FeatureProvider* FeatureProvider::GetByName(const std::string& name) { |
- return ExtensionsClient::Get()->GetFeatureProviderByName(name); |
+ return g_static.Get().GetFeatures(name); |
} |
// static |