Index: extensions/common/event_matcher.cc |
diff --git a/extensions/common/event_matcher.cc b/extensions/common/event_matcher.cc |
index ad76c89f4db848d1063900fd9f71a01c3badf9c2..8ae022a00e8845bcb749813c3e973bf847932649 100644 |
--- a/extensions/common/event_matcher.cc |
+++ b/extensions/common/event_matcher.cc |
@@ -12,6 +12,8 @@ const char kUrlFiltersKey[] = "url"; |
namespace extensions { |
+const char kEventFilterServiceTypeKey[] = "serviceType"; |
+ |
EventMatcher::EventMatcher(scoped_ptr<base::DictionaryValue> filter, |
int routing_id) |
: filter_(filter.Pass()), |
@@ -23,10 +25,13 @@ EventMatcher::~EventMatcher() { |
bool EventMatcher::MatchNonURLCriteria( |
const EventFilteringInfo& event_info) const { |
- if (!event_info.has_instance_id()) |
- return true; |
+ if (event_info.has_instance_id()) { |
+ return event_info.instance_id() == GetInstanceID(); |
+ } |
- return event_info.instance_id() == GetInstanceID(); |
+ const std::string& service_type_filter = GetServiceTypeFilter(); |
+ return service_type_filter.empty() || |
+ service_type_filter == event_info.service_type(); |
} |
int EventMatcher::GetURLFilterCount() const { |
@@ -48,6 +53,12 @@ int EventMatcher::HasURLFilters() const { |
return GetURLFilterCount() != 0; |
} |
+std::string EventMatcher::GetServiceTypeFilter() const { |
+ std::string service_type_filter; |
+ filter_->GetStringASCII(kEventFilterServiceTypeKey, &service_type_filter); |
+ return service_type_filter; |
+} |
+ |
int EventMatcher::GetInstanceID() const { |
int instance_id = 0; |
filter_->GetInteger("instanceId", &instance_id); |