| 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
|
|
|