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#include "extensions/common/features/feature_provider.h" 6 7#include <map> 8 9#include "base/basictypes.h" 10#include "base/lazy_instance.h" 11#include "base/memory/linked_ptr.h" 12#include "extensions/common/extensions_client.h" 13 14namespace extensions { 15 16namespace { 17 18class Static { 19 public: 20 FeatureProvider* GetFeatures(const std::string& name) const { 21 FeatureProviderMap::const_iterator it = feature_providers_.find(name); 22 CHECK(it != feature_providers_.end()); 23 return it->second.get(); 24 } 25 26 private: 27 friend struct base::DefaultLazyInstanceTraits<Static>; 28 29 Static() { 30 ExtensionsClient* client = ExtensionsClient::Get(); 31 feature_providers_["api"] = 32 make_linked_ptr(client->CreateFeatureProvider("api").release()); 33 feature_providers_["manifest"] = 34 make_linked_ptr(client->CreateFeatureProvider("manifest").release()); 35 feature_providers_["permission"] = 36 make_linked_ptr(client->CreateFeatureProvider("permission").release()); 37 } 38 39 typedef std::map<std::string, linked_ptr<FeatureProvider> > 40 FeatureProviderMap; 41 42 FeatureProviderMap feature_providers_; 43}; 44 45base::LazyInstance<Static> g_static = LAZY_INSTANCE_INITIALIZER; 46 47} // namespace 48 49// static 50const FeatureProvider* FeatureProvider::GetByName(const std::string& name) { 51 return g_static.Get().GetFeatures(name); 52} 53 54// static 55const FeatureProvider* FeatureProvider::GetAPIFeatures() { 56 return GetByName("api"); 57} 58 59// static 60const FeatureProvider* FeatureProvider::GetManifestFeatures() { 61 return GetByName("manifest"); 62} 63 64// static 65const FeatureProvider* FeatureProvider::GetPermissionFeatures() { 66 return GetByName("permission"); 67} 68 69} // namespace extensions 70