Home | History | Annotate | Download | only in common
      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