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 // Matches EventFilteringInfos against a set of criteria. This is intended to 16 // be used by EventFilter which performs efficient URL matching across 17 // potentially many EventMatchers itself. This is why this class only exposes 18 // MatchNonURLCriteria() - URL matching is handled by EventFilter. 19 class EventMatcher { 20 public: 21 EventMatcher(scoped_ptr<base::DictionaryValue> filter, 22 int routing_id); 23 ~EventMatcher(); 24 25 // Returns true if |event_info| satisfies this matcher's criteria, not taking 26 // into consideration any URL criteria. 27 bool MatchNonURLCriteria(const EventFilteringInfo& event_info) const; 28 29 int GetURLFilterCount() const; 30 bool GetURLFilter(int i, base::DictionaryValue** url_filter_out); 31 32 int HasURLFilters() const; 33 34 int GetInstanceID() const; 35 36 int GetRoutingID() const; 37 38 base::DictionaryValue* value() const { 39 return filter_.get(); 40 } 41 42 private: 43 // Contains a dictionary that corresponds to a single event filter, eg: 44 // 45 // {url: [{hostSuffix: 'google.com'}]} 46 // 47 // The valid filter keys are event-specific. 48 scoped_ptr<base::DictionaryValue> filter_; 49 50 int routing_id_; 51 52 DISALLOW_COPY_AND_ASSIGN(EventMatcher); 53 }; 54 55 } // namespace extensions 56 57 #endif // EXTENSIONS_COMMON_EVENT_MATCHER_H_ 58