| Index: chrome/browser/extensions/event_listener_map_unittest.cc
|
| diff --git a/chrome/browser/extensions/event_listener_map_unittest.cc b/chrome/browser/extensions/event_listener_map_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e8e9f7c50935b2d9a6fbddded406cb63348dec9b
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/event_listener_map_unittest.cc
|
| @@ -0,0 +1,239 @@
|
| +// 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.
|
| +
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +#include "chrome/browser/extensions/event_listener_map.h"
|
| +#include "chrome/browser/extensions/extension_event_router.h"
|
| +#include "content/public/test/mock_render_process_host.h"
|
| +
|
| +class EventListenerMapUnittest : public testing::Test {
|
| + public:
|
| + EventListenerMapUnittest()
|
| + : listeners_(new EventListenerMap),
|
| + process_(new content::MockRenderProcessHost(NULL)) {
|
| + }
|
| +
|
| + scoped_ptr<DictionaryValue> HostSuffixFilter(const std::string& suffix) {
|
| + scoped_ptr<DictionaryValue> filter(new DictionaryValue);
|
| + scoped_ptr<ListValue> filter_list(new ListValue);
|
| + scoped_ptr<DictionaryValue> filter_dict(new DictionaryValue);
|
| +
|
| + filter_dict->Set("hostSuffix", new StringValue(suffix));
|
| +
|
| + filter_list->Append(filter_dict.release());
|
| + filter->Set("url", filter_list.release());
|
| + return filter.Pass();
|
| + }
|
| +
|
| + scoped_ptr<ExtensionEvent> GetNamedEvent(const std::string event_name) {
|
| + scoped_ptr<ExtensionEvent> result(new ExtensionEvent(event_name, "", GURL(),
|
| + NULL, "", ExtensionEventRouter::USER_GESTURE_UNKNOWN,
|
| + EventFilteringInfo()));
|
| + return result.Pass();
|
| + }
|
| +
|
| + protected:
|
| + scoped_ptr<EventListenerMap> listeners_;
|
| + scoped_ptr<content::MockRenderProcessHost> process_;
|
| +};
|
| +
|
| +TEST_F(EventListenerMapUnittest, UnfilteredEventsGoToAllListeners) {
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", NULL, scoped_ptr<DictionaryValue>())));
|
| +
|
| + scoped_ptr<ExtensionEvent> event(GetNamedEvent("event"));
|
| + scoped_ptr<std::set<const EventListener*> > targets(
|
| + listeners_->GetEventTargets(*event));
|
| + ASSERT_EQ(1u, targets->size());
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, FilteredEventsGoToAllMatchingListeners) {
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", NULL, HostSuffixFilter("google.com"))));
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", NULL, scoped_ptr<DictionaryValue>(new DictionaryValue))));
|
| +
|
| + scoped_ptr<ExtensionEvent> event(GetNamedEvent("event"));
|
| + event->info.SetURL(GURL("http://www.google.com"));
|
| + scoped_ptr<std::set<const EventListener*> > targets(
|
| + listeners_->GetEventTargets(*event));
|
| + ASSERT_EQ(2u, targets->size());
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, FilteredEventsOnlyGoToMatchingListeners) {
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", NULL, HostSuffixFilter("google.com"))));
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", NULL, HostSuffixFilter("yahoo.com"))));
|
| +
|
| + scoped_ptr<ExtensionEvent> event(GetNamedEvent("event"));
|
| + event->info.SetURL(GURL("http://www.google.com"));
|
| + scoped_ptr<std::set<const EventListener*> > targets(
|
| + listeners_->GetEventTargets(*event));
|
| + ASSERT_EQ(1u, targets->size());
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, LazyAndUnlazyListenersGetReturned) {
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", NULL, HostSuffixFilter("google.com"))));
|
| +
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", process_.get(), HostSuffixFilter("google.com"))));
|
| +
|
| + scoped_ptr<ExtensionEvent> event(GetNamedEvent("event"));
|
| + event->info.SetURL(GURL("http://www.google.com"));
|
| + scoped_ptr<std::set<const EventListener*> > targets(
|
| + listeners_->GetEventTargets(*event));
|
| + ASSERT_EQ(2u, targets->size());
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, TestRemovingByProcess) {
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", NULL, HostSuffixFilter("google.com"))));
|
| +
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", process_.get(), HostSuffixFilter("google.com"))));
|
| +
|
| + listeners_->RemoveListenersForProcess(process_.get());
|
| +
|
| + scoped_ptr<ExtensionEvent> event(GetNamedEvent("event"));
|
| + event->info.SetURL(GURL("http://www.google.com"));
|
| + scoped_ptr<std::set<const EventListener*> > targets(
|
| + listeners_->GetEventTargets(*event));
|
| + ASSERT_EQ(1u, targets->size());
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, TestRemovingByListener) {
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", NULL, HostSuffixFilter("google.com"))));
|
| +
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", process_.get(), HostSuffixFilter("google.com"))));
|
| +
|
| + listeners_->RemoveListener(scoped_ptr<EventListener>(new EventListener(
|
| + "event", "1", process_.get(), HostSuffixFilter("google.com"))));
|
| +
|
| + scoped_ptr<ExtensionEvent> event(GetNamedEvent("event"));
|
| + event->info.SetURL(GURL("http://www.google.com"));
|
| + scoped_ptr<std::set<const EventListener*> > targets(
|
| + listeners_->GetEventTargets(*event));
|
| + ASSERT_EQ(1u, targets->size());
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, TestLazyDoubleAddIsUndoneByRemove) {
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", NULL, HostSuffixFilter("google.com"))));
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", NULL, HostSuffixFilter("google.com"))));
|
| +
|
| + listeners_->RemoveListener(scoped_ptr<EventListener>(new EventListener(
|
| + "event", "1", NULL, HostSuffixFilter("google.com"))));
|
| +
|
| + scoped_ptr<ExtensionEvent> event(GetNamedEvent("event"));
|
| + event->info.SetURL(GURL("http://www.google.com"));
|
| + scoped_ptr<std::set<const EventListener*> > targets(
|
| + listeners_->GetEventTargets(*event));
|
| + ASSERT_EQ(0u, targets->size());
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, HostSuffixFilterEquality) {
|
| + scoped_ptr<DictionaryValue> filter1(HostSuffixFilter("google.com"));
|
| + scoped_ptr<DictionaryValue> filter2(HostSuffixFilter("google.com"));
|
| + ASSERT_TRUE(filter1->Equals(filter2.get()));
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, RemoveLazyListenersFor) {
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event",
|
| + "1", NULL, HostSuffixFilter("google.com"))));
|
| + listeners_->AddListener(scoped_ptr<EventListener>(new EventListener("event2",
|
| + "1", NULL, HostSuffixFilter("google.com"))));
|
| +
|
| + listeners_->RemoveLazyListenersFor("1");
|
| +
|
| + scoped_ptr<ExtensionEvent> event(GetNamedEvent("event"));
|
| + event->info.SetURL(GURL("http://www.google.com"));
|
| + scoped_ptr<std::set<const EventListener*> > targets(
|
| + listeners_->GetEventTargets(*event));
|
| + ASSERT_EQ(0u, targets->size());
|
| +
|
| + event->event_name = "event2";
|
| + scoped_ptr<std::set<const EventListener*> > targets2(
|
| + listeners_->GetEventTargets(*event));
|
| + ASSERT_EQ(0u, targets2->size());
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, AddExistingFilteredListener) {
|
| + bool first_new = listeners_->AddListener(scoped_ptr<EventListener>(
|
| + new EventListener("event", "1", NULL, HostSuffixFilter("google.com"))));
|
| + bool second_new = listeners_->AddListener(scoped_ptr<EventListener>(
|
| + new EventListener("event", "1", NULL, HostSuffixFilter("google.com"))));
|
| +
|
| + ASSERT_TRUE(first_new);
|
| + ASSERT_FALSE(second_new);
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, AddExistingUnfilteredListener) {
|
| + bool first_add = listeners_->AddListener(scoped_ptr<EventListener>(
|
| + new EventListener("event", "1", NULL, scoped_ptr<DictionaryValue>())));
|
| + bool second_add = listeners_->AddListener(scoped_ptr<EventListener>(
|
| + new EventListener("event", "1", NULL, scoped_ptr<DictionaryValue>())));
|
| +
|
| + bool first_remove = listeners_->RemoveListener(scoped_ptr<EventListener>(
|
| + new EventListener("event", "1", NULL, scoped_ptr<DictionaryValue>())));
|
| + bool second_remove = listeners_->RemoveListener(scoped_ptr<EventListener>(
|
| + new EventListener("event", "1", NULL, scoped_ptr<DictionaryValue>())));
|
| +
|
| + ASSERT_TRUE(first_add);
|
| + ASSERT_FALSE(second_add);
|
| + ASSERT_TRUE(first_remove);
|
| + ASSERT_FALSE(second_remove);
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, RemovingRouters) {
|
| + listeners_->AddListener(scoped_ptr<EventListener>(
|
| + new EventListener("event", "1", process_.get(),
|
| + scoped_ptr<DictionaryValue>())));
|
| + std::vector<linked_ptr<EventListener> > removed =
|
| + listeners_->RemoveListenersForProcess(process_.get());
|
| +
|
| + scoped_ptr<EventListener> listener(new EventListener("event", "1",
|
| + process_.get(), scoped_ptr<DictionaryValue>()));
|
| + ASSERT_EQ(1u, removed.size());
|
| + ASSERT_TRUE(removed[0]->Equals(listener.get()));
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, AnyListenersForEvent) {
|
| + ASSERT_FALSE(listeners_->AnyListenersForEvent("event"));
|
| +
|
| + listeners_->AddListener(scoped_ptr<EventListener>(
|
| + new EventListener("event", "1", process_.get(),
|
| + scoped_ptr<DictionaryValue>())));
|
| +
|
| + ASSERT_FALSE(listeners_->AnyListenersForEvent("event2"));
|
| + ASSERT_TRUE(listeners_->AnyListenersForEvent("event"));
|
| + listeners_->RemoveListenersForProcess(process_.get());
|
| + ASSERT_FALSE(listeners_->AnyListenersForEvent("event"));
|
| +}
|
| +
|
| +TEST_F(EventListenerMapUnittest, AnyListenersForExtension) {
|
| + ASSERT_FALSE(listeners_->AnyListenersForExtension("1", "event"));
|
| +
|
| + // Non-lazy listener.
|
| + listeners_->AddListener(scoped_ptr<EventListener>(
|
| + new EventListener("event", "1", process_.get(),
|
| + scoped_ptr<DictionaryValue>())));
|
| + // Lazy listener.
|
| + listeners_->AddListener(scoped_ptr<EventListener>(
|
| + new EventListener("event", "1", NULL,
|
| + scoped_ptr<DictionaryValue>())));
|
| +
|
| + ASSERT_FALSE(listeners_->AnyListenersForExtension("1", "event2"));
|
| + ASSERT_TRUE(listeners_->AnyListenersForExtension("1", "event"));
|
| + ASSERT_FALSE(listeners_->AnyListenersForExtension("2", "event"));
|
| + listeners_->RemoveListenersForProcess(process_.get());
|
| + ASSERT_TRUE(listeners_->AnyListenersForExtension("1", "event"));
|
| + listeners_->RemoveLazyListenersFor("1");
|
| + ASSERT_FALSE(listeners_->AnyListenersForExtension("1", "event"));
|
| +}
|
|
|