Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(371)

Unified Diff: extensions/renderer/api_event_handler_unittest.cc

Issue 2722463006: [Extensions Bindings] Notify of event unregistration on invalidation (Closed)
Patch Set: Rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/renderer/api_event_handler.cc ('k') | extensions/renderer/event_emitter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/renderer/api_event_handler_unittest.cc
diff --git a/extensions/renderer/api_event_handler_unittest.cc b/extensions/renderer/api_event_handler_unittest.cc
index 3846ecc410b7e5dd7b68135614b1fc013672f6a5..8420680453456396466857c15d9e0d673a2459e7 100644
--- a/extensions/renderer/api_event_handler_unittest.cc
+++ b/extensions/renderer/api_event_handler_unittest.cc
@@ -129,6 +129,8 @@ TEST_F(APIEventHandlerTest, AddingRemovingAndQueryingEventListeners) {
gin::Converter<bool>::FromV8(isolate(), result, &has_listeners));
EXPECT_FALSE(has_listeners);
}
+
+ handler.InvalidateContext(context);
}
// Tests listening for and firing different events.
@@ -227,6 +229,8 @@ TEST_F(APIEventHandlerTest, FiringEvents) {
EXPECT_EQ(2, get_fired_count("alphaCount1"));
EXPECT_EQ(2, get_fired_count("alphaCount2"));
EXPECT_EQ(1, get_fired_count("betaCount"));
+
+ handler.InvalidateContext(context);
}
// Tests firing events with arguments.
@@ -264,6 +268,8 @@ TEST_F(APIEventHandlerTest, EventArguments) {
EXPECT_EQ(
ReplaceSingleQuotes(kArguments),
GetStringPropertyFromObject(context->Global(), context, "eventArgs"));
+
+ handler.InvalidateContext(context);
}
// Test dispatching events to multiple contexts.
@@ -349,6 +355,9 @@ TEST_F(APIEventHandlerTest, MultipleContexts) {
GetStringPropertyFromObject(context_b->Global(), context_b,
"eventArgs"));
}
+
+ handler.InvalidateContext(context_a);
+ handler.InvalidateContext(context_b);
}
TEST_F(APIEventHandlerTest, DifferentCallingMethods) {
@@ -404,6 +413,8 @@ TEST_F(APIEventHandlerTest, DifferentCallingMethods) {
context, 1, args);
}
EXPECT_EQ(2u, handler.GetNumEventListenersForTesting(kEventName, context));
+
+ handler.InvalidateContext(context);
}
TEST_F(APIEventHandlerTest, TestDispatchFromJs) {
@@ -444,6 +455,8 @@ TEST_F(APIEventHandlerTest, TestDispatchFromJs) {
EXPECT_EQ("[42,\"foo\",{\"bar\":\"baz\"}]",
GetStringPropertyFromObject(
context->Global(), context, "eventArgs"));
+
+ handler.InvalidateContext(context);
}
// Test listeners that remove themselves in their handling of the event.
@@ -500,6 +513,7 @@ TEST_F(APIEventHandlerTest, RemovingListenersWhileHandlingEvent) {
handler.FireEventInContext(kEventName, context, base::ListValue());
EXPECT_EQ(0u, handler.GetNumEventListenersForTesting(kEventName, context));
+ handler.InvalidateContext(context);
// TODO(devlin): Another possible test: register listener a and listener b,
// where a removes b and b removes a. Theoretically, only one should be
// notified. Investigate what we currently do in JS-style bindings.
@@ -584,6 +598,8 @@ TEST_F(APIEventHandlerTest, TestEventListenersThrowingExceptions) {
EXPECT_EQ("[42]", GetStringPropertyFromObject(context->Global(), context,
"eventArgs"));
EXPECT_TRUE(did_throw);
+
+ handler.InvalidateContext(context);
}
// Tests being notified as listeners are added or removed from events.
@@ -706,6 +722,26 @@ TEST_F(APIEventHandlerTest, CallbackNotifications) {
}
EXPECT_EQ(1u,
handler.GetNumEventListenersForTesting(kEventName1, context_b));
+
+ // When the contexts are invalidated, we should receive listener removed
+ // notifications.
+ EXPECT_CALL(
+ change_handler,
+ Run(kEventName1, binding::EventListenersChanged::NO_LISTENERS, context_a))
+ .Times(1);
+ EXPECT_CALL(
+ change_handler,
+ Run(kEventName2, binding::EventListenersChanged::NO_LISTENERS, context_a))
+ .Times(1);
+ handler.InvalidateContext(context_a);
+ ::testing::Mock::VerifyAndClearExpectations(&change_handler);
+
+ EXPECT_CALL(
+ change_handler,
+ Run(kEventName1, binding::EventListenersChanged::NO_LISTENERS, context_b))
+ .Times(1);
+ handler.InvalidateContext(context_b);
+ ::testing::Mock::VerifyAndClearExpectations(&change_handler);
}
// Test registering an argument massager for a given event.
@@ -755,6 +791,8 @@ TEST_F(APIEventHandlerTest, TestArgumentMassagers) {
EXPECT_EQ(
"[\"primary\",\"secondary\"]",
GetStringPropertyFromObject(context->Global(), context, "eventArgs"));
+
+ handler.InvalidateContext(context);
}
// Test registering an argument massager for a given event and dispatching
@@ -821,6 +859,8 @@ TEST_F(APIEventHandlerTest, TestArgumentMassagersAsyncDispatch) {
EXPECT_EQ(
"[\"primary\",\"secondary\"]",
GetStringPropertyFromObject(context->Global(), context, "eventArgs"));
+
+ handler.InvalidateContext(context);
}
// Test registering an argument massager and never dispatching.
@@ -858,6 +898,8 @@ TEST_F(APIEventHandlerTest, TestArgumentMassagersNeverDispatch) {
// Nothing should blow up. (We tested in the previous test that the event
// isn't notified without calling dispatch, so all there is to test here is
// that we don't crash.)
+
+ handler.InvalidateContext(context);
}
} // namespace extensions
« no previous file with comments | « extensions/renderer/api_event_handler.cc ('k') | extensions/renderer/event_emitter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698