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

Unified Diff: extensions/renderer/api_event_handler_unittest.cc

Issue 2768093002: [Reland][Extensions Bindings] Add support for filtered events (Closed)
Patch Set: Fix 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/api_event_listeners.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 3a376b4ab57758ed445f3747061aeb554ef897b1..3230ebb060e10e4661bfaa25d5d216a4a1ed4745 100644
--- a/extensions/renderer/api_event_handler_unittest.cc
+++ b/extensions/renderer/api_event_handler_unittest.cc
@@ -10,6 +10,7 @@
#include "base/optional.h"
#include "base/test/mock_callback.h"
#include "base/values.h"
+#include "extensions/common/event_filtering_info.h"
#include "extensions/renderer/api_binding_test.h"
#include "extensions/renderer/api_binding_test_util.h"
#include "gin/arguments.h"
@@ -26,6 +27,7 @@ using MockEventChangeHandler = ::testing::StrictMock<
void DoNothingOnEventListenersChanged(const std::string& event_name,
binding::EventListenersChanged change,
+ const base::DictionaryValue* value,
v8::Local<v8::Context> context) {}
class APIEventHandlerTest : public APIBindingTest {
@@ -73,7 +75,7 @@ TEST_F(APIEventHandlerTest, AddingRemovingAndQueryingEventListeners) {
v8::Local<v8::Context> context = MainContext();
v8::Local<v8::Object> event =
- handler()->CreateEventInstance(kEventName, context);
+ handler()->CreateEventInstance(kEventName, false, context);
ASSERT_FALSE(event.IsEmpty());
EXPECT_EQ(0u, handler()->GetNumEventListenersForTesting(kEventName, context));
@@ -172,9 +174,9 @@ TEST_F(APIEventHandlerTest, FiringEvents) {
v8::Local<v8::Context> context = MainContext();
v8::Local<v8::Object> alpha_event =
- handler()->CreateEventInstance(kAlphaName, context);
+ handler()->CreateEventInstance(kAlphaName, false, context);
v8::Local<v8::Object> beta_event =
- handler()->CreateEventInstance(kBetaName, context);
+ handler()->CreateEventInstance(kBetaName, false, context);
ASSERT_FALSE(alpha_event.IsEmpty());
ASSERT_FALSE(beta_event.IsEmpty());
@@ -241,7 +243,8 @@ TEST_F(APIEventHandlerTest, FiringEvents) {
EXPECT_EQ(0, get_fired_count("alphaCount2"));
EXPECT_EQ(0, get_fired_count("betaCount"));
- handler()->FireEventInContext(kAlphaName, context, base::ListValue());
+ handler()->FireEventInContext(kAlphaName, context, base::ListValue(),
+ EventFilteringInfo());
EXPECT_EQ(2u, handler()->GetNumEventListenersForTesting(kAlphaName, context));
EXPECT_EQ(1u, handler()->GetNumEventListenersForTesting(kBetaName, context));
@@ -249,12 +252,14 @@ TEST_F(APIEventHandlerTest, FiringEvents) {
EXPECT_EQ(1, get_fired_count("alphaCount2"));
EXPECT_EQ(0, get_fired_count("betaCount"));
- handler()->FireEventInContext(kAlphaName, context, base::ListValue());
+ handler()->FireEventInContext(kAlphaName, context, base::ListValue(),
+ EventFilteringInfo());
EXPECT_EQ(2, get_fired_count("alphaCount1"));
EXPECT_EQ(2, get_fired_count("alphaCount2"));
EXPECT_EQ(0, get_fired_count("betaCount"));
- handler()->FireEventInContext(kBetaName, context, base::ListValue());
+ handler()->FireEventInContext(kBetaName, context, base::ListValue(),
+ EventFilteringInfo());
EXPECT_EQ(2, get_fired_count("alphaCount1"));
EXPECT_EQ(2, get_fired_count("alphaCount2"));
EXPECT_EQ(1, get_fired_count("betaCount"));
@@ -267,7 +272,7 @@ TEST_F(APIEventHandlerTest, EventArguments) {
const char kEventName[] = "alpha";
v8::Local<v8::Object> event =
- handler()->CreateEventInstance(kEventName, context);
+ handler()->CreateEventInstance(kEventName, false, context);
ASSERT_FALSE(event.IsEmpty());
const char kListenerFunction[] =
@@ -288,7 +293,8 @@ TEST_F(APIEventHandlerTest, EventArguments) {
const char kArguments[] = "['foo',1,{'prop1':'bar'}]";
std::unique_ptr<base::ListValue> event_args = ListValueFromString(kArguments);
ASSERT_TRUE(event_args);
- handler()->FireEventInContext(kEventName, context, *event_args);
+ handler()->FireEventInContext(kEventName, context, *event_args,
+ EventFilteringInfo());
EXPECT_EQ(
ReplaceSingleQuotes(kArguments),
@@ -314,10 +320,10 @@ TEST_F(APIEventHandlerTest, MultipleContexts) {
// Create two instances of the same event in different contexts.
v8::Local<v8::Object> event_a =
- handler()->CreateEventInstance(kEventName, context_a);
+ handler()->CreateEventInstance(kEventName, false, context_a);
ASSERT_FALSE(event_a.IsEmpty());
v8::Local<v8::Object> event_b =
- handler()->CreateEventInstance(kEventName, context_b);
+ handler()->CreateEventInstance(kEventName, false, context_b);
ASSERT_FALSE(event_b.IsEmpty());
// Add two separate listeners to the event, one in each context.
@@ -351,7 +357,8 @@ TEST_F(APIEventHandlerTest, MultipleContexts) {
ListValueFromString("['result_a:']");
ASSERT_TRUE(arguments_a);
- handler()->FireEventInContext(kEventName, context_a, *arguments_a);
+ handler()->FireEventInContext(kEventName, context_a, *arguments_a,
+ EventFilteringInfo());
{
EXPECT_EQ("\"result_a:alpha\"",
GetStringPropertyFromObject(context_a->Global(), context_a,
@@ -367,7 +374,8 @@ TEST_F(APIEventHandlerTest, MultipleContexts) {
std::unique_ptr<base::ListValue> arguments_b =
ListValueFromString("['result_b:']");
ASSERT_TRUE(arguments_b);
- handler()->FireEventInContext(kEventName, context_b, *arguments_b);
+ handler()->FireEventInContext(kEventName, context_b, *arguments_b,
+ EventFilteringInfo());
{
EXPECT_EQ("\"result_a:alpha\"",
GetStringPropertyFromObject(context_a->Global(), context_a,
@@ -386,7 +394,7 @@ TEST_F(APIEventHandlerTest, DifferentCallingMethods) {
const char kEventName[] = "alpha";
v8::Local<v8::Object> event =
- handler()->CreateEventInstance(kEventName, context);
+ handler()->CreateEventInstance(kEventName, false, context);
ASSERT_FALSE(event.IsEmpty());
const char kAddListenerOnNull[] =
@@ -438,7 +446,7 @@ TEST_F(APIEventHandlerTest, TestDispatchFromJs) {
v8::Local<v8::Context> context = MainContext();
v8::Local<v8::Object> event =
- handler()->CreateEventInstance("alpha", context);
+ handler()->CreateEventInstance("alpha", false, context);
ASSERT_FALSE(event.IsEmpty());
const char kListenerFunction[] =
@@ -479,7 +487,7 @@ TEST_F(APIEventHandlerTest, RemovingListenersWhileHandlingEvent) {
const char kEventName[] = "alpha";
v8::Local<v8::Object> event =
- handler()->CreateEventInstance(kEventName, context);
+ handler()->CreateEventInstance(kEventName, false, context);
ASSERT_FALSE(event.IsEmpty());
{
// Cache the event object on the global in order to allow for easy removal.
@@ -521,7 +529,8 @@ TEST_F(APIEventHandlerTest, RemovingListenersWhileHandlingEvent) {
// Fire the event. All listeners should be removed (and we shouldn't crash).
EXPECT_EQ(kNumListeners,
handler()->GetNumEventListenersForTesting(kEventName, context));
- handler()->FireEventInContext(kEventName, context, base::ListValue());
+ handler()->FireEventInContext(kEventName, context, base::ListValue(),
+ EventFilteringInfo());
EXPECT_EQ(0u, handler()->GetNumEventListenersForTesting(kEventName, context));
// TODO(devlin): Another possible test: register listener a and listener b,
@@ -553,7 +562,7 @@ TEST_F(APIEventHandlerTest, TestEventListenersThrowingExceptions) {
const char kEventName[] = "alpha";
v8::Local<v8::Object> event =
- handler()->CreateEventInstance(kEventName, context);
+ handler()->CreateEventInstance(kEventName, false, context);
ASSERT_FALSE(event.IsEmpty());
bool did_throw = false;
@@ -601,7 +610,8 @@ TEST_F(APIEventHandlerTest, TestEventListenersThrowingExceptions) {
std::unique_ptr<base::ListValue> event_args = ListValueFromString("[42]");
ASSERT_TRUE(event_args);
- handler()->FireEventInContext(kEventName, context, *event_args);
+ handler()->FireEventInContext(kEventName, context, *event_args,
+ EventFilteringInfo());
// An exception should have been thrown by the first listener and the second
// listener should have recorded the event arguments.
@@ -626,13 +636,13 @@ TEST_F(APIEventHandlerTest, CallbackNotifications) {
const char kEventName1[] = "onFoo";
const char kEventName2[] = "onBar";
v8::Local<v8::Object> event1_a =
- handler()->CreateEventInstance(kEventName1, context_a);
+ handler()->CreateEventInstance(kEventName1, false, context_a);
ASSERT_FALSE(event1_a.IsEmpty());
v8::Local<v8::Object> event2_a =
- handler()->CreateEventInstance(kEventName2, context_a);
+ handler()->CreateEventInstance(kEventName2, false, context_a);
ASSERT_FALSE(event2_a.IsEmpty());
v8::Local<v8::Object> event1_b =
- handler()->CreateEventInstance(kEventName1, context_b);
+ handler()->CreateEventInstance(kEventName1, false, context_b);
ASSERT_FALSE(event1_b.IsEmpty());
const char kAddListenerFunction[] =
@@ -649,7 +659,7 @@ TEST_F(APIEventHandlerTest, CallbackNotifications) {
{
EXPECT_CALL(change_handler,
Run(kEventName1, binding::EventListenersChanged::HAS_LISTENERS,
- context_a))
+ nullptr, context_a))
.Times(1);
v8::Local<v8::Value> argv[] = {event1_a, listener1};
RunFunction(add_listener, context_a, arraysize(argv), argv);
@@ -686,7 +696,7 @@ TEST_F(APIEventHandlerTest, CallbackNotifications) {
{
EXPECT_CALL(change_handler,
Run(kEventName1, binding::EventListenersChanged::NO_LISTENERS,
- context_a))
+ nullptr, context_a))
.Times(1);
v8::Local<v8::Value> argv[] = {event1_a, listener2};
RunFunction(remove_listener, context_a, arraysize(argv), argv);
@@ -702,7 +712,7 @@ TEST_F(APIEventHandlerTest, CallbackNotifications) {
{
EXPECT_CALL(change_handler,
Run(kEventName2, binding::EventListenersChanged::HAS_LISTENERS,
- context_a))
+ nullptr, context_a))
.Times(1);
v8::Local<v8::Value> argv[] = {event2_a, listener3};
RunFunction(add_listener, context_a, arraysize(argv), argv);
@@ -714,7 +724,7 @@ TEST_F(APIEventHandlerTest, CallbackNotifications) {
{
EXPECT_CALL(change_handler,
Run(kEventName1, binding::EventListenersChanged::HAS_LISTENERS,
- context_b))
+ nullptr, context_b))
.Times(1);
// And add a listener to an event in a different context to make sure the
// associated context is correct.
@@ -731,20 +741,16 @@ TEST_F(APIEventHandlerTest, CallbackNotifications) {
// 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))
+ EXPECT_CALL(change_handler,
+ Run(kEventName2, binding::EventListenersChanged::NO_LISTENERS,
+ nullptr, context_a))
.Times(1);
DisposeContext(context_a);
::testing::Mock::VerifyAndClearExpectations(&change_handler);
- EXPECT_CALL(
- change_handler,
- Run(kEventName1, binding::EventListenersChanged::NO_LISTENERS, context_b))
+ EXPECT_CALL(change_handler,
+ Run(kEventName1, binding::EventListenersChanged::NO_LISTENERS,
+ nullptr, context_b))
.Times(1);
DisposeContext(context_b);
::testing::Mock::VerifyAndClearExpectations(&change_handler);
@@ -757,7 +763,7 @@ TEST_F(APIEventHandlerTest, TestArgumentMassagers) {
const char kEventName[] = "alpha";
v8::Local<v8::Object> event =
- handler()->CreateEventInstance(kEventName, context);
+ handler()->CreateEventInstance(kEventName, false, context);
ASSERT_FALSE(event.IsEmpty());
const char kArgumentMassager[] =
@@ -787,7 +793,8 @@ TEST_F(APIEventHandlerTest, TestArgumentMassagers) {
const char kArguments[] = "['first','second']";
std::unique_ptr<base::ListValue> event_args = ListValueFromString(kArguments);
ASSERT_TRUE(event_args);
- handler()->FireEventInContext(kEventName, context, *event_args);
+ handler()->FireEventInContext(kEventName, context, *event_args,
+ EventFilteringInfo());
EXPECT_EQ(
"[\"first\",\"second\"]",
@@ -805,7 +812,7 @@ TEST_F(APIEventHandlerTest, TestArgumentMassagersAsyncDispatch) {
const char kEventName[] = "alpha";
v8::Local<v8::Object> event =
- handler()->CreateEventInstance(kEventName, context);
+ handler()->CreateEventInstance(kEventName, false, context);
ASSERT_FALSE(event.IsEmpty());
const char kArgumentMassager[] =
@@ -835,7 +842,8 @@ TEST_F(APIEventHandlerTest, TestArgumentMassagersAsyncDispatch) {
const char kArguments[] = "['first','second']";
std::unique_ptr<base::ListValue> event_args = ListValueFromString(kArguments);
ASSERT_TRUE(event_args);
- handler()->FireEventInContext(kEventName, context, *event_args);
+ handler()->FireEventInContext(kEventName, context, *event_args,
+ EventFilteringInfo());
// The massager should have been triggered, but since it doesn't call
// dispatch(), the listener shouldn't have been notified.
@@ -868,7 +876,7 @@ TEST_F(APIEventHandlerTest, TestArgumentMassagersNeverDispatch) {
const char kEventName[] = "alpha";
v8::Local<v8::Object> event =
- handler()->CreateEventInstance(kEventName, context);
+ handler()->CreateEventInstance(kEventName, false, context);
ASSERT_FALSE(event.IsEmpty());
// A massager that never dispatches.
@@ -889,7 +897,8 @@ TEST_F(APIEventHandlerTest, TestArgumentMassagersNeverDispatch) {
v8::Local<v8::Value> argv[] = {event, listener_function};
RunFunction(add_listener_function, context, arraysize(argv), argv);
- handler()->FireEventInContext(kEventName, context, base::ListValue());
+ handler()->FireEventInContext(kEventName, context, base::ListValue(),
+ EventFilteringInfo());
// 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
« no previous file with comments | « extensions/renderer/api_event_handler.cc ('k') | extensions/renderer/api_event_listeners.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698