Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Side by Side Diff: extensions/common/features/feature_provider.cc

Issue 246423002: Split feature definitions into extensions and chrome features. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: repack2 Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/common/features/feature_provider.h" 5 #include "extensions/common/features/feature_provider.h"
6 6
7 #include <map>
8
7 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/lazy_instance.h"
11 #include "base/memory/linked_ptr.h"
8 #include "extensions/common/extensions_client.h" 12 #include "extensions/common/extensions_client.h"
9 13
10 namespace extensions { 14 namespace extensions {
11 15
16 namespace {
17
18 class 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
45 base::LazyInstance<Static> g_static = LAZY_INSTANCE_INITIALIZER;
46
47 } // namespace
48
12 // static 49 // static
13 FeatureProvider* FeatureProvider::GetByName(const std::string& name) { 50 FeatureProvider* FeatureProvider::GetByName(const std::string& name) {
14 return ExtensionsClient::Get()->GetFeatureProviderByName(name); 51 return g_static.Get().GetFeatures(name);
15 } 52 }
16 53
17 // static 54 // static
18 FeatureProvider* FeatureProvider::GetAPIFeatures() { 55 FeatureProvider* FeatureProvider::GetAPIFeatures() {
19 return GetByName("api"); 56 return GetByName("api");
20 } 57 }
21 58
22 // static 59 // static
23 FeatureProvider* FeatureProvider::GetManifestFeatures() { 60 FeatureProvider* FeatureProvider::GetManifestFeatures() {
24 return GetByName("manifest"); 61 return GetByName("manifest");
25 } 62 }
26 63
27 // static 64 // static
28 FeatureProvider* FeatureProvider::GetPermissionFeatures() { 65 FeatureProvider* FeatureProvider::GetPermissionFeatures() {
29 return GetByName("permission"); 66 return GetByName("permission");
30 } 67 }
31 68
32 } // namespace extensions 69 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698