1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef EXTENSIONS_COMMON_EVENT_MATCHER_H_ 6 #define EXTENSIONS_COMMON_EVENT_MATCHER_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "base/values.h" 10 11 namespace extensions { 12 13 class EventFilteringInfo; 14 15 extern const char kEventFilterServiceTypeKey[]; 16 17 // Matches EventFilteringInfos against a set of criteria. This is intended to 18 // be used by EventFilter which performs efficient URL matching across 19 // potentially many EventMatchers itself. This is why this class only exposes 20 // MatchNonURLCriteria() - URL matching is handled by EventFilter. 21 class EventMatcher { 22 public: 23 EventMatcher(scoped_ptr<base::DictionaryValue> filter, 24 int routing_id); 25 ~EventMatcher(); 26 27 // Returns true if |event_info| satisfies this matcher's criteria, not taking 28 // into consideration any URL criteria. 29 bool MatchNonURLCriteria(const EventFilteringInfo& event_info) const; 30 31 int GetURLFilterCount() const; 32 bool GetURLFilter(int i, base::DictionaryValue** url_filter_out); 33 34 std::string GetServiceTypeFilter() const; 35 36 int HasURLFilters() const; 37 38 int GetInstanceID() const; 39 40 int GetRoutingID() const; 41 value()42 base::DictionaryValue* value() const { 43 return filter_.get(); 44 } 45 46 private: 47 // Contains a dictionary that corresponds to a single event filter, eg: 48 // 49 // {url: [{hostSuffix: 'google.com'}]} 50 // 51 // The valid filter keys are event-specific. 52 scoped_ptr<base::DictionaryValue> filter_; 53 54 int routing_id_; 55 56 DISALLOW_COPY_AND_ASSIGN(EventMatcher); 57 }; 58 59 } // namespace extensions 60 61 #endif // EXTENSIONS_COMMON_EVENT_MATCHER_H_ 62