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) 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include <string> 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/event_filter.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/event_filtering_info.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/event_matcher.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ipc/ipc_message.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::DictionaryValue; 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ListValue; 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::Value; 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EventFilterUnittest : public testing::Test { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventFilterUnittest() { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) google_event_.SetURL(GURL("http://google.com")); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) yahoo_event_.SetURL(GURL("http://yahoo.com")); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) random_url_event_.SetURL(GURL("http://www.something-else.com")); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) empty_url_event_.SetURL(GURL()); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> HostSuffixDict(const std::string& host_suffix) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::DictionaryValue> dict(new DictionaryValue()); 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dict->Set("hostSuffix", new base::StringValue(host_suffix)); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return scoped_ptr<base::Value>(dict.release()); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> ValueAsList(scoped_ptr<base::Value> value) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> result(new base::ListValue()); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->Append(value.release()); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result.Pass(); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<EventMatcher> AllURLs() { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return scoped_ptr<EventMatcher>(new EventMatcher( 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<DictionaryValue>(new DictionaryValue), MSG_ROUTING_NONE)); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<EventMatcher> HostSuffixMatcher(const std::string& host_suffix) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return MatcherFromURLFilterList(ValueAsList(HostSuffixDict(host_suffix))); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<EventMatcher> MatcherFromURLFilterList( 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ListValue> url_filter_list) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DictionaryValue> filter_dict(new DictionaryValue); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filter_dict->Set("url", url_filter_list.release()); 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return scoped_ptr<EventMatcher>( 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new EventMatcher(filter_dict.Pass(), MSG_ROUTING_NONE)); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventFilter event_filter_; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventFilteringInfo empty_event_; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventFilteringInfo google_event_; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventFilteringInfo yahoo_event_; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventFilteringInfo random_url_event_; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventFilteringInfo empty_url_event_; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, NoMatchersMatchIfEmpty) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> matches = event_filter_.MatchEvent("some-event", 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch empty_event_, 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MSG_ROUTING_NONE); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0u, matches.size()); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, AddingEventMatcherDoesntCrash) { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_filter_.AddEventMatcher("event1", AllURLs()); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DontMatchAgainstMatchersForDifferentEvents) { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_filter_.AddEventMatcher("event1", AllURLs()); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> matches = event_filter_.MatchEvent("event2", 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch empty_event_, 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MSG_ROUTING_NONE); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0u, matches.size()); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, DoMatchAgainstMatchersForSameEvent) { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = event_filter_.AddEventMatcher("event1", AllURLs()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> matches = event_filter_.MatchEvent("event1", 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch google_event_, MSG_ROUTING_NONE); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.size()); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.count(id)); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, DontMatchUnlessMatcherMatches) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventFilteringInfo info; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.SetURL(GURL("http://www.yahoo.com")); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_filter_.AddEventMatcher("event1", HostSuffixMatcher("google.com")); 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::set<int> matches = event_filter_.MatchEvent( 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "event1", info, MSG_ROUTING_NONE); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(matches.empty()); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, RemovingAnEventMatcherStopsItMatching) { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = event_filter_.AddEventMatcher("event1", AllURLs()); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_filter_.RemoveEventMatcher(id); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> matches = event_filter_.MatchEvent("event1", 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch empty_event_, 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MSG_ROUTING_NONE); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(matches.empty()); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, MultipleEventMatches) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id1 = event_filter_.AddEventMatcher("event1", AllURLs()); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id2 = event_filter_.AddEventMatcher("event1", AllURLs()); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> matches = event_filter_.MatchEvent("event1", 1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch google_event_, MSG_ROUTING_NONE); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, matches.size()); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.count(id1)); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.count(id2)); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, TestURLMatching) { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventFilteringInfo info; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.SetURL(GURL("http://www.google.com")); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = event_filter_.AddEventMatcher("event1", 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostSuffixMatcher("google.com")); 1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::set<int> matches = event_filter_.MatchEvent( 1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "event1", info, MSG_ROUTING_NONE); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.size()); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.count(id)); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, TestMultipleURLFiltersMatchOnAny) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> filters(new base::ListValue()); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filters->Append(HostSuffixDict("google.com").release()); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filters->Append(HostSuffixDict("yahoo.com").release()); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<EventMatcher> matcher(MatcherFromURLFilterList(filters.Pass())); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = event_filter_.AddEventMatcher("event1", matcher.Pass()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> matches = event_filter_.MatchEvent("event1", 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch google_event_, MSG_ROUTING_NONE); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.size()); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.count(id)); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> matches = event_filter_.MatchEvent("event1", 1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch yahoo_event_, MSG_ROUTING_NONE); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.size()); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.count(id)); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> matches = event_filter_.MatchEvent("event1", 1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch random_url_event_, MSG_ROUTING_NONE); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0u, matches.size()); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, TestStillMatchesAfterRemoval) { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id1 = event_filter_.AddEventMatcher("event1", AllURLs()); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id2 = event_filter_.AddEventMatcher("event1", AllURLs()); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_filter_.RemoveEventMatcher(id1); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> matches = event_filter_.MatchEvent("event1", 1697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch google_event_, MSG_ROUTING_NONE); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.size()); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.count(id2)); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, TestMatchesOnlyAgainstPatternsForCorrectEvent) { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id1 = event_filter_.AddEventMatcher("event1", AllURLs()); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_filter_.AddEventMatcher("event2", AllURLs()); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> matches = event_filter_.MatchEvent("event1", 1817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch google_event_, MSG_ROUTING_NONE); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.size()); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.count(id1)); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, TestGetMatcherCountForEvent) { 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, event_filter_.GetMatcherCountForEvent("event1")); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id1 = event_filter_.AddEventMatcher("event1", AllURLs()); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, event_filter_.GetMatcherCountForEvent("event1")); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id2 = event_filter_.AddEventMatcher("event1", AllURLs()); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2, event_filter_.GetMatcherCountForEvent("event1")); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_filter_.RemoveEventMatcher(id1); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, event_filter_.GetMatcherCountForEvent("event1")); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_filter_.RemoveEventMatcher(id2); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, event_filter_.GetMatcherCountForEvent("event1")); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, RemoveEventMatcherReturnsEventName) { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id1 = event_filter_.AddEventMatcher("event1", AllURLs()); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id2 = event_filter_.AddEventMatcher("event1", AllURLs()); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id3 = event_filter_.AddEventMatcher("event2", AllURLs()); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("event1", event_filter_.RemoveEventMatcher(id1)); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("event1", event_filter_.RemoveEventMatcher(id2)); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("event2", event_filter_.RemoveEventMatcher(id3)); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, InvalidURLFilterCantBeAdded) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> filter_list(new base::ListValue()); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filter_list->Append(new base::ListValue()); // Should be a dict. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<EventMatcher> matcher(MatcherFromURLFilterList( 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filter_list.Pass())); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id1 = event_filter_.AddEventMatcher("event1", matcher.Pass()); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(event_filter_.IsURLMatcherEmpty()); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(-1, id1); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, EmptyListOfURLFiltersMatchesAllURLs) { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> filter_list(new base::ListValue()); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<EventMatcher> matcher(MatcherFromURLFilterList( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ListValue>(new ListValue))); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = event_filter_.AddEventMatcher("event1", matcher.Pass()); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<int> matches = event_filter_.MatchEvent("event1", 2257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch google_event_, MSG_ROUTING_NONE); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.size()); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.count(id)); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InternalURLMatcherShouldBeEmptyWhenThereAreNoEventMatchers) { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(event_filter_.IsURLMatcherEmpty()); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = event_filter_.AddEventMatcher("event1", 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostSuffixMatcher("google.com")); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(event_filter_.IsURLMatcherEmpty()); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_filter_.RemoveEventMatcher(id); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(event_filter_.IsURLMatcherEmpty()); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, EmptyURLsShouldBeMatchedByEmptyURLFilters) { 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = event_filter_.AddEventMatcher("event1", AllURLs()); 2427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::set<int> matches = event_filter_.MatchEvent( 2437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "event1", empty_url_event_, MSG_ROUTING_NONE); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.size()); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.count(id)); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventFilterUnittest, 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EmptyURLsShouldBeMatchedByEmptyURLFiltersWithAnEmptyItem) { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<EventMatcher> matcher(MatcherFromURLFilterList(ValueAsList( 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Value>(new DictionaryValue())))); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = event_filter_.AddEventMatcher("event1", matcher.Pass()); 2537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::set<int> matches = event_filter_.MatchEvent( 2547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "event1", empty_url_event_, MSG_ROUTING_NONE); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.size()); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, matches.count(id)); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 260