Chromium Code Reviews| Index: extensions/common/features/simple_feature.cc |
| diff --git a/extensions/common/features/simple_feature.cc b/extensions/common/features/simple_feature.cc |
| index 8ef18f8ff64b4e62c1bf48c9096fd2c9f2ca40cc..c5ba7ae13644593b80123c52e30dee7de01467bd 100644 |
| --- a/extensions/common/features/simple_feature.cc |
| +++ b/extensions/common/features/simple_feature.cc |
| @@ -237,6 +237,7 @@ void SimpleFeature::AddFilter(scoped_ptr<SimpleFeatureFilter> filter) { |
| std::string SimpleFeature::Parse(const base::DictionaryValue* value) { |
| ParseURLPatterns(value, "matches", &matches_); |
| + ParseSet(value, "blacklist", &blacklist_); |
| ParseSet(value, "whitelist", &whitelist_); |
| ParseSet(value, "dependencies", &dependencies_); |
| ParseEnumSet<Manifest::Type>(value, "extension_types", &extension_types_, |
| @@ -292,6 +293,11 @@ Feature::Availability SimpleFeature::IsAvailableToManifest( |
| if (location == Manifest::COMPONENT) |
| return CreateAvailability(IS_AVAILABLE, type); |
| + if (!blacklist_.empty()) { |
|
not at google - send to devlin
2014/05/01 20:55:06
the !blacklist_.empty() check isn't really necessa
benwells
2014/05/02 00:58:52
Done.
|
| + if (IsIdInBlacklist(extension_id)) |
| + return CreateAvailability(FOUND_IN_BLACKLIST, type); |
| + } |
| + |
| if (!whitelist_.empty()) { |
| if (!IsIdInWhitelist(extension_id)) { |
| // TODO(aa): This is gross. There should be a better way to test the |
| @@ -375,6 +381,7 @@ std::string SimpleFeature::GetAvailabilityMessage( |
| case IS_AVAILABLE: |
| return std::string(); |
| case NOT_FOUND_IN_WHITELIST: |
| + case FOUND_IN_BLACKLIST: |
| return base::StringPrintf( |
| "'%s' is not allowed for specified extension ID.", |
| name().c_str()); |
| @@ -466,13 +473,17 @@ bool SimpleFeature::IsInternal() const { |
| bool SimpleFeature::IsBlockedInServiceWorker() const { return false; } |
| +bool SimpleFeature::IsIdInBlacklist(const std::string& extension_id) const { |
| + return IsIdInList(extension_id, blacklist_); |
| +} |
| + |
| bool SimpleFeature::IsIdInWhitelist(const std::string& extension_id) const { |
| - return IsIdInWhitelist(extension_id, whitelist_); |
| + return IsIdInList(extension_id, whitelist_); |
| } |
| // static |
| -bool SimpleFeature::IsIdInWhitelist(const std::string& extension_id, |
| - const std::set<std::string>& whitelist) { |
| +bool SimpleFeature::IsIdInList(const std::string& extension_id, |
| + const std::set<std::string>& list) { |
| // Belt-and-suspenders philosophy here. We should be pretty confident by this |
| // point that we've validated the extension ID format, but in case something |
| // slips through, we avoid a class of attack where creative ID manipulation |
| @@ -480,8 +491,8 @@ bool SimpleFeature::IsIdInWhitelist(const std::string& extension_id, |
| if (extension_id.length() != 32) // 128 bits / 4 = 32 mpdecimal characters |
| return false; |
| - if (whitelist.find(extension_id) != whitelist.end() || |
| - whitelist.find(HashExtensionId(extension_id)) != whitelist.end()) { |
| + if (list.find(extension_id) != list.end() || |
| + list.find(HashExtensionId(extension_id)) != list.end()) { |
| return true; |
| } |