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..b8f21f32db44984b248088fed4779d6c2701c1f4 100644 |
--- a/extensions/common/features/feature_provider.cc |
+++ b/extensions/common/features/feature_provider.cc |
@@ -4,14 +4,51 @@ |
#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 { |
+ |
+class Static { |
+ public: |
+ FeatureProvider* GetFeatures(const std::string& name) const { |
+ FeatureProviderMap::const_iterator it = feature_providers_.find(name); |
+ CHECK(it != feature_providers_.end()); |
+ return it->second.get(); |
+ } |
+ |
+ private: |
+ friend struct base::DefaultLazyInstanceTraits<Static>; |
+ |
+ Static() { |
+ ExtensionsClient* client = ExtensionsClient::Get(); |
+ feature_providers_["api"] = |
+ make_linked_ptr(client->CreateFeatureProvider("api").release()); |
+ feature_providers_["manifest"] = |
+ make_linked_ptr(client->CreateFeatureProvider("manifest").release()); |
+ feature_providers_["permission"] = |
+ make_linked_ptr(client->CreateFeatureProvider("permission").release()); |
+ } |
+ |
+ typedef std::map<std::string, linked_ptr<FeatureProvider> > |
+ FeatureProviderMap; |
+ |
+ 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 |