OLD | NEW |
---|---|
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 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.
| |
19 Static() { | |
20 ExtensionsClient* client = ExtensionsClient::Get(); | |
21 feature_providers["api"] = | |
22 make_linked_ptr(client->CreateFeatureProvider("api")); | |
23 feature_providers["manifest"] = | |
24 make_linked_ptr(client->CreateFeatureProvider("manifest")); | |
25 feature_providers["permission"] = | |
26 make_linked_ptr(client->CreateFeatureProvider("permission")); | |
27 } | |
28 | |
29 typedef std::map<std::string, linked_ptr<FeatureProvider> > | |
30 FeatureProviderMap; | |
31 | |
32 FeatureProvider* GetFeatures(const std::string& name) const { | |
33 FeatureProviderMap::const_iterator it = feature_providers.find(name); | |
34 CHECK(it != feature_providers.end()); | |
35 return it->second.get(); | |
36 } | |
37 | |
38 FeatureProviderMap feature_providers; | |
39 }; | |
40 | |
41 base::LazyInstance<Static> g_static = LAZY_INSTANCE_INITIALIZER; | |
42 | |
43 } // namespace | |
44 | |
12 // static | 45 // static |
13 FeatureProvider* FeatureProvider::GetByName(const std::string& name) { | 46 FeatureProvider* FeatureProvider::GetByName(const std::string& name) { |
14 return ExtensionsClient::Get()->GetFeatureProviderByName(name); | 47 return g_static.Get().GetFeatures(name); |
15 } | 48 } |
16 | 49 |
17 // static | 50 // static |
18 FeatureProvider* FeatureProvider::GetAPIFeatures() { | 51 FeatureProvider* FeatureProvider::GetAPIFeatures() { |
19 return GetByName("api"); | 52 return GetByName("api"); |
20 } | 53 } |
21 | 54 |
22 // static | 55 // static |
23 FeatureProvider* FeatureProvider::GetManifestFeatures() { | 56 FeatureProvider* FeatureProvider::GetManifestFeatures() { |
24 return GetByName("manifest"); | 57 return GetByName("manifest"); |
25 } | 58 } |
26 | 59 |
27 // static | 60 // static |
28 FeatureProvider* FeatureProvider::GetPermissionFeatures() { | 61 FeatureProvider* FeatureProvider::GetPermissionFeatures() { |
29 return GetByName("permission"); | 62 return GetByName("permission"); |
30 } | 63 } |
31 | 64 |
32 } // namespace extensions | 65 } // namespace extensions |
OLD | NEW |