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

Unified Diff: extensions/renderer/api_event_handler_unittest.cc

Issue 2722463006: [Extensions Bindings] Notify of event unregistration on invalidation (Closed)
Patch Set: . Created 3 years, 10 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
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..c391d242180bcf4dfee0f81fce6031a44aa19be3 100644
--- a/extensions/renderer/api_event_handler_unittest.cc
+++ b/extensions/renderer/api_event_handler_unittest.cc
@@ -707,4 +707,45 @@ TEST_F(APIEventHandlerTest, CallbackNotifications) {
handler.GetNumEventListenersForTesting(kEventName1, context_b));
}
+// Tests that, when the context is invalidated, the listeners are removed.
+TEST_F(APIEventHandlerTest, TestContextInvalidation) {
+ v8::HandleScope handle_scope(isolate());
+ v8::Local<v8::Context> context = ContextLocal();
+
+ MockEventChangeHandler change_handler;
+ APIEventHandler handler(base::Bind(&RunFunctionOnGlobalAndIgnoreResult),
+ change_handler.Get());
+
+ const char kEventName[] = "onFoo";
+ v8::Local<v8::Object> event =
+ handler.CreateEventInstance(kEventName, context);
+ const char kAddListenerFunction[] =
+ "(function(event, listener) { event.addListener(listener); })";
+
+ // Add a listener to the first event. The APIEventHandler should notify
+ // since it's a change in state (no listeners -> listeners).
+ v8::Local<v8::Function> add_listener =
+ FunctionFromString(context, kAddListenerFunction);
+ v8::Local<v8::Function> listener =
+ FunctionFromString(context, "(function() {})");
+
+ EXPECT_CALL(
+ change_handler,
+ Run(kEventName, binding::EventListenersChanged::HAS_LISTENERS, context))
+ .Times(1);
+ v8::Local<v8::Value> argv[] = {event, listener};
+ RunFunction(add_listener, context, arraysize(argv), argv);
+ ::testing::Mock::VerifyAndClearExpectations(&change_handler);
+ EXPECT_EQ(1u, handler.GetNumEventListenersForTesting(kEventName, context));
+
+ // When the contexts are invalidated, we should receive listener removed
+ // notifications.
+ EXPECT_CALL(
+ change_handler,
+ Run(kEventName, binding::EventListenersChanged::NO_LISTENERS, context))
+ .Times(1);
+ handler.InvalidateContext(context);
+ ::testing::Mock::VerifyAndClearExpectations(&change_handler);
+}
+
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698