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 "chrome/common/extensions/chrome_extensions_client.h" | 5 #include "chrome/common/extensions/chrome_extensions_client.h" |
6 | 6 |
7 #include "apps/common/api/generated_schemas.h" | 7 #include "apps/common/api/generated_schemas.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "chrome/common/chrome_version_info.h" | 9 #include "chrome/common/chrome_version_info.h" |
10 #include "chrome/common/extensions/api/generated_schemas.h" | 10 #include "chrome/common/extensions/api/generated_schemas.h" |
11 #include "chrome/common/extensions/chrome_manifest_handlers.h" | 11 #include "chrome/common/extensions/chrome_manifest_handlers.h" |
12 #include "chrome/common/extensions/extension_constants.h" | 12 #include "chrome/common/extensions/extension_constants.h" |
13 #include "chrome/common/extensions/features/chrome_channel_feature_filter.h" | 13 #include "chrome/common/extensions/features/chrome_channel_feature_filter.h" |
14 #include "chrome/common/extensions/features/feature_channel.h" | 14 #include "chrome/common/extensions/features/feature_channel.h" |
15 #include "chrome/common/url_constants.h" | 15 #include "chrome/common/url_constants.h" |
16 #include "content/public/common/url_constants.h" | 16 #include "content/public/common/url_constants.h" |
17 #include "extensions/common/api/generated_schemas.h" | 17 #include "extensions/common/api/generated_schemas.h" |
18 #include "extensions/common/common_manifest_handlers.h" | 18 #include "extensions/common/common_manifest_handlers.h" |
19 #include "extensions/common/extension.h" | 19 #include "extensions/common/extension.h" |
| 20 #include "extensions/common/features/api_feature.h" |
20 #include "extensions/common/features/base_feature_provider.h" | 21 #include "extensions/common/features/base_feature_provider.h" |
| 22 #include "extensions/common/features/json_feature_provider_source.h" |
| 23 #include "extensions/common/features/manifest_feature.h" |
| 24 #include "extensions/common/features/permission_feature.h" |
| 25 #include "extensions/common/features/simple_feature.h" |
21 #include "extensions/common/manifest_constants.h" | 26 #include "extensions/common/manifest_constants.h" |
22 #include "extensions/common/manifest_handler.h" | 27 #include "extensions/common/manifest_handler.h" |
23 #include "extensions/common/permissions/api_permission_set.h" | 28 #include "extensions/common/permissions/api_permission_set.h" |
24 #include "extensions/common/permissions/permission_message.h" | 29 #include "extensions/common/permissions/permission_message.h" |
25 #include "extensions/common/switches.h" | 30 #include "extensions/common/switches.h" |
26 #include "extensions/common/url_pattern.h" | 31 #include "extensions/common/url_pattern.h" |
27 #include "extensions/common/url_pattern_set.h" | 32 #include "extensions/common/url_pattern_set.h" |
| 33 #include "grit/common_resources.h" |
| 34 #include "grit/extensions_resources.h" |
28 #include "grit/generated_resources.h" | 35 #include "grit/generated_resources.h" |
29 #include "ui/base/l10n/l10n_util.h" | 36 #include "ui/base/l10n/l10n_util.h" |
30 #include "url/gurl.h" | 37 #include "url/gurl.h" |
31 | 38 |
| 39 namespace extensions { |
| 40 |
32 namespace { | 41 namespace { |
| 42 |
33 const char kThumbsWhiteListedExtension[] = "khopmbdjffemhegeeobelklnbglcdgfh"; | 43 const char kThumbsWhiteListedExtension[] = "khopmbdjffemhegeeobelklnbglcdgfh"; |
| 44 |
| 45 template <class FeatureClass> |
| 46 SimpleFeature* CreateFeature() { |
| 47 SimpleFeature* feature = new FeatureClass; |
| 48 feature->AddFilter( |
| 49 scoped_ptr<SimpleFeatureFilter>(new ChromeChannelFeatureFilter(feature))); |
| 50 return feature; |
| 51 } |
| 52 |
34 } // namespace | 53 } // namespace |
35 | 54 |
36 namespace extensions { | |
37 | |
38 static base::LazyInstance<ChromeExtensionsClient> g_client = | 55 static base::LazyInstance<ChromeExtensionsClient> g_client = |
39 LAZY_INSTANCE_INITIALIZER; | 56 LAZY_INSTANCE_INITIALIZER; |
40 | 57 |
41 ChromeExtensionsClient::ChromeExtensionsClient() | 58 ChromeExtensionsClient::ChromeExtensionsClient() |
42 : chrome_api_permissions_(ChromeAPIPermissions()) { | 59 : chrome_api_permissions_(ChromeAPIPermissions()) { |
43 } | 60 } |
44 | 61 |
45 ChromeExtensionsClient::~ChromeExtensionsClient() { | 62 ChromeExtensionsClient::~ChromeExtensionsClient() { |
46 } | 63 } |
47 | 64 |
(...skipping 24 matching lines...) Expand all Loading... |
72 const PermissionsProvider& | 89 const PermissionsProvider& |
73 ChromeExtensionsClient::GetPermissionsProvider() const { | 90 ChromeExtensionsClient::GetPermissionsProvider() const { |
74 return chrome_api_permissions_; | 91 return chrome_api_permissions_; |
75 } | 92 } |
76 | 93 |
77 const PermissionMessageProvider& | 94 const PermissionMessageProvider& |
78 ChromeExtensionsClient::GetPermissionMessageProvider() const { | 95 ChromeExtensionsClient::GetPermissionMessageProvider() const { |
79 return permission_message_provider_; | 96 return permission_message_provider_; |
80 } | 97 } |
81 | 98 |
82 FeatureProvider* ChromeExtensionsClient::GetFeatureProviderByName( | 99 scoped_ptr<FeatureProvider> ChromeExtensionsClient::CreateFeatureProvider( |
83 const std::string& name) const { | 100 const std::string& name) const { |
84 return BaseFeatureProvider::GetByName(name); | 101 JSONFeatureProviderSource source(name); |
| 102 if (name == "api") { |
| 103 source.LoadJSON(IDR_EXTENSION_API_FEATURES); |
| 104 source.LoadJSON(IDR_CHROME_EXTENSION_API_FEATURES); |
| 105 return scoped_ptr<FeatureProvider>(new BaseFeatureProvider( |
| 106 source.dictionary(), CreateFeature<APIFeature>)); |
| 107 } else if (name == "manifest") { |
| 108 source.LoadJSON(IDR_EXTENSION_MANIFEST_FEATURES); |
| 109 source.LoadJSON(IDR_CHROME_EXTENSION_MANIFEST_FEATURES); |
| 110 return scoped_ptr<FeatureProvider>(new BaseFeatureProvider( |
| 111 source.dictionary(), CreateFeature<ManifestFeature>)); |
| 112 } else if (name == "permission") { |
| 113 source.LoadJSON(IDR_EXTENSION_PERMISSION_FEATURES); |
| 114 source.LoadJSON(IDR_CHROME_EXTENSION_PERMISSION_FEATURES); |
| 115 return scoped_ptr<FeatureProvider>(new BaseFeatureProvider( |
| 116 source.dictionary(), CreateFeature<PermissionFeature>)); |
| 117 } else { |
| 118 NOTREACHED(); |
| 119 } |
| 120 return scoped_ptr<FeatureProvider>(); |
85 } | 121 } |
86 | 122 |
87 void ChromeExtensionsClient::FilterHostPermissions( | 123 void ChromeExtensionsClient::FilterHostPermissions( |
88 const URLPatternSet& hosts, | 124 const URLPatternSet& hosts, |
89 URLPatternSet* new_hosts, | 125 URLPatternSet* new_hosts, |
90 std::set<PermissionMessage>* messages) const { | 126 std::set<PermissionMessage>* messages) const { |
91 for (URLPatternSet::const_iterator i = hosts.begin(); | 127 for (URLPatternSet::const_iterator i = hosts.begin(); |
92 i != hosts.end(); ++i) { | 128 i != hosts.end(); ++i) { |
93 // Filters out every URL pattern that matches chrome:// scheme. | 129 // Filters out every URL pattern that matches chrome:// scheme. |
94 if (i->scheme() == content::kChromeUIScheme) { | 130 if (i->scheme() == content::kChromeUIScheme) { |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 if (error) | 188 if (error) |
153 *error = manifest_errors::kCannotScriptGallery; | 189 *error = manifest_errors::kCannotScriptGallery; |
154 return false; | 190 return false; |
155 } | 191 } |
156 return true; | 192 return true; |
157 } | 193 } |
158 | 194 |
159 bool ChromeExtensionsClient::IsAPISchemaGenerated( | 195 bool ChromeExtensionsClient::IsAPISchemaGenerated( |
160 const std::string& name) const { | 196 const std::string& name) const { |
161 // Test from most common to least common. | 197 // Test from most common to least common. |
162 return extensions::api::GeneratedSchemas::IsGenerated(name) || | 198 return api::GeneratedSchemas::IsGenerated(name) || |
163 extensions::core_api::GeneratedSchemas::IsGenerated(name) || | 199 core_api::GeneratedSchemas::IsGenerated(name) || |
164 apps::api::GeneratedSchemas::IsGenerated(name); | 200 apps::api::GeneratedSchemas::IsGenerated(name); |
165 } | 201 } |
166 | 202 |
167 base::StringPiece ChromeExtensionsClient::GetAPISchema( | 203 base::StringPiece ChromeExtensionsClient::GetAPISchema( |
168 const std::string& name) const { | 204 const std::string& name) const { |
169 // Test from most common to least common. | 205 // Test from most common to least common. |
170 if (extensions::api::GeneratedSchemas::IsGenerated(name)) | 206 if (api::GeneratedSchemas::IsGenerated(name)) |
171 return extensions::api::GeneratedSchemas::Get(name); | 207 return api::GeneratedSchemas::Get(name); |
172 | 208 |
173 if (extensions::core_api::GeneratedSchemas::IsGenerated(name)) | 209 if (core_api::GeneratedSchemas::IsGenerated(name)) |
174 return extensions::core_api::GeneratedSchemas::Get(name); | 210 return core_api::GeneratedSchemas::Get(name); |
175 | 211 |
176 return apps::api::GeneratedSchemas::Get(name); | 212 return apps::api::GeneratedSchemas::Get(name); |
177 } | 213 } |
178 | 214 |
179 void ChromeExtensionsClient::AddExtraFeatureFilters( | |
180 SimpleFeature* feature) const { | |
181 feature->AddFilter( | |
182 scoped_ptr<SimpleFeatureFilter>(new ChromeChannelFeatureFilter(feature))); | |
183 } | |
184 | |
185 bool ChromeExtensionsClient::ShouldSuppressFatalErrors() const { | 215 bool ChromeExtensionsClient::ShouldSuppressFatalErrors() const { |
186 // <= dev means dev, canary, and trunk. | 216 // <= dev means dev, canary, and trunk. |
187 return GetCurrentChannel() <= chrome::VersionInfo::CHANNEL_DEV; | 217 return GetCurrentChannel() <= chrome::VersionInfo::CHANNEL_DEV; |
188 } | 218 } |
189 | 219 |
190 // static | 220 // static |
191 ChromeExtensionsClient* ChromeExtensionsClient::GetInstance() { | 221 ChromeExtensionsClient* ChromeExtensionsClient::GetInstance() { |
192 return g_client.Pointer(); | 222 return g_client.Pointer(); |
193 } | 223 } |
194 | 224 |
195 } // namespace extensions | 225 } // namespace extensions |
OLD | NEW |