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