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 11namespace extensions { 12 13class EventFilteringInfo; 14 15extern 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. 21class 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 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