// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef EXTENSIONS_COMMON_EVENT_MATCHER_H_ #define EXTENSIONS_COMMON_EVENT_MATCHER_H_ #include #include "base/values.h" #include "extensions/common/mojom/event_dispatcher.mojom-forward.h" namespace extensions { extern const char kEventFilterServiceTypeKey[]; // Matches EventFilteringInfos against a set of criteria. This is intended to // be used by EventFilter which performs efficient URL matching across // potentially many EventMatchers itself. This is why this class only exposes // MatchNonURLCriteria() - URL matching is handled by EventFilter. class EventMatcher { public: EventMatcher(std::unique_ptr filter, int routing_id); EventMatcher(const EventMatcher&) = delete; EventMatcher& operator=(const EventMatcher&) = delete; ~EventMatcher(); // Returns true if |event_info| satisfies this matcher's criteria, not taking // into consideration any URL criteria. bool MatchNonURLCriteria(const mojom::EventFilteringInfo& event_info) const; int GetURLFilterCount() const; bool GetURLFilter(int i, const base::DictionaryValue** url_filter_out); int GetWindowTypeCount() const; bool GetWindowType(int i, std::string* window_type_out) const; std::string GetServiceTypeFilter() const; bool HasURLFilters() const; bool HasWindowTypes() const; int GetInstanceID() const; int GetRoutingID() const; base::DictionaryValue* value() const { return filter_.get(); } private: // Contains a dictionary that corresponds to a single event filter, eg: // // {url: [{hostSuffix: 'google.com'}]} // // The valid filter keys are event-specific. const std::unique_ptr filter_; const int routing_id_; }; } // namespace extensions #endif // EXTENSIONS_COMMON_EVENT_MATCHER_H_