Index: extensions/common/features/simple_feature.cc |
diff --git a/extensions/common/features/simple_feature.cc b/extensions/common/features/simple_feature.cc |
index 762730b1f38f5c69d162ae5c05b88341a3d86778..155e76429be855f76dcd833b16a9799c47239c7c 100644 |
--- a/extensions/common/features/simple_feature.cc |
+++ b/extensions/common/features/simple_feature.cc |
@@ -287,10 +287,14 @@ std::string SimpleFeature::Parse(const base::DictionaryValue* value) { |
value->GetBoolean("component_extensions_auto_granted", |
&component_extensions_auto_granted_); |
- if (matches_.is_empty() && contexts_.count(WEB_PAGE_CONTEXT) != 0) { |
- return name() + ": Allowing web_page contexts requires supplying a value " + |
- "for matches."; |
- } |
+ // NOTE: ideally we'd sanity check that "matches" can be specified if and |
+ // only if there's a "web_page" context, but without (Simple)Features being |
+ // aware of their own heirarchy this is impossible. |
+ // |
+ // For example, we might have feature "foo" available to "web_page" context |
+ // and "matches" google.com/*. Then a sub-feature "foo.bar" might override |
+ // "matches" to be chromium.org/*. That sub-feature doesn't need to specify |
+ // "web_page" context because it's inherited, but we don't know that here. |
for (FilterList::iterator filter_iter = filters_.begin(); |
filter_iter != filters_.end(); |
@@ -395,7 +399,7 @@ Feature::Availability SimpleFeature::IsAvailableToContext( |
if (!contexts_.empty() && contexts_.find(context) == contexts_.end()) |
return CreateAvailability(INVALID_CONTEXT, context); |
- if (!matches_.is_empty() && !matches_.MatchesURL(url)) |
+ if (context == WEB_PAGE_CONTEXT && !matches_.MatchesURL(url)) |
return CreateAvailability(INVALID_URL, url); |
for (FilterList::const_iterator filter_iter = filters_.begin(); |
@@ -502,10 +506,6 @@ Feature::Availability SimpleFeature::CreateAvailability( |
context)); |
} |
-std::set<Feature::Context>* SimpleFeature::GetContexts() { |
- return &contexts_; |
-} |
- |
bool SimpleFeature::IsInternal() const { |
return false; |
} |