| 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 e4d39d255a8312c413ef9b2df3a6702d6f27c547..e2b33be6d4186b1eddd2f767c71a692f6cc70622 100644
|
| --- a/extensions/renderer/api_event_handler_unittest.cc
|
| +++ b/extensions/renderer/api_event_handler_unittest.cc
|
| @@ -128,6 +128,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.
|
| @@ -226,6 +228,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.
|
| @@ -263,6 +267,8 @@ TEST_F(APIEventHandlerTest, EventArguments) {
|
| EXPECT_EQ(
|
| ReplaceSingleQuotes(kArguments),
|
| GetStringPropertyFromObject(context->Global(), context, "eventArgs"));
|
| +
|
| + handler.InvalidateContext(context);
|
| }
|
|
|
| // Test dispatching events to multiple contexts.
|
| @@ -348,6 +354,9 @@ TEST_F(APIEventHandlerTest, MultipleContexts) {
|
| GetStringPropertyFromObject(context_b->Global(), context_b,
|
| "eventArgs"));
|
| }
|
| +
|
| + handler.InvalidateContext(context_a);
|
| + handler.InvalidateContext(context_b);
|
| }
|
|
|
| TEST_F(APIEventHandlerTest, DifferentCallingMethods) {
|
| @@ -403,6 +412,8 @@ TEST_F(APIEventHandlerTest, DifferentCallingMethods) {
|
| context, 1, args);
|
| }
|
| EXPECT_EQ(2u, handler.GetNumEventListenersForTesting(kEventName, context));
|
| +
|
| + handler.InvalidateContext(context);
|
| }
|
|
|
| TEST_F(APIEventHandlerTest, TestDispatchFromJs) {
|
| @@ -443,6 +454,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.
|
| @@ -499,6 +512,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.
|
| @@ -583,6 +597,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.
|
| @@ -705,6 +721,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);
|
| }
|
|
|
| } // namespace extensions
|
|
|