15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/event_matcher.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/event_filtering_info.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kUrlFiltersKey[] = "url";
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochEventMatcher::EventMatcher(scoped_ptr<base::DictionaryValue> filter,
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                           int routing_id)
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    : filter_(filter.Pass()),
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      routing_id_(routing_id) {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EventMatcher::~EventMatcher() {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool EventMatcher::MatchNonURLCriteria(
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const EventFilteringInfo& event_info) const {
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!event_info.has_instance_id())
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return true;
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return event_info.instance_id() == GetInstanceID();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int EventMatcher::GetURLFilterCount() const {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::ListValue* url_filters = NULL;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (filter_->GetList(kUrlFiltersKey, &url_filters))
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return url_filters->GetSize();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool EventMatcher::GetURLFilter(int i, base::DictionaryValue** url_filter_out) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::ListValue* url_filters = NULL;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (filter_->GetList(kUrlFiltersKey, &url_filters)) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return url_filters->GetDictionary(i, url_filter_out);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int EventMatcher::HasURLFilters() const {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetURLFilterCount() != 0;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochint EventMatcher::GetInstanceID() const {
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int instance_id = 0;
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  filter_->GetInteger("instanceId", &instance_id);
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return instance_id;
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochint EventMatcher::GetRoutingID() const {
587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return routing_id_;
597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
62