| Index: extensions/renderer/bindings/api_event_listeners_unittest.cc
|
| diff --git a/extensions/renderer/bindings/api_event_listeners_unittest.cc b/extensions/renderer/bindings/api_event_listeners_unittest.cc
|
| index 4439728318e1ae0ce3fc8a45a4cfdd3b939cc5f9..81bb4744ef84b35888a1ab90a03afe184048daec 100644
|
| --- a/extensions/renderer/bindings/api_event_listeners_unittest.cc
|
| +++ b/extensions/renderer/bindings/api_event_listeners_unittest.cc
|
| @@ -36,7 +36,8 @@ TEST_F(APIEventListenersTest, UnfilteredListeners) {
|
| v8::Local<v8::Context> context = MainContext();
|
|
|
| MockEventChangeHandler handler;
|
| - UnfilteredEventListeners listeners(handler.Get(), binding::kNoListenerMax);
|
| + UnfilteredEventListeners listeners(handler.Get(), binding::kNoListenerMax,
|
| + true);
|
|
|
| // Starting out, there should be no listeners.
|
| v8::Local<v8::Function> function_a = FunctionFromString(context, kFunction);
|
| @@ -107,7 +108,8 @@ TEST_F(APIEventListenersTest, UnfilteredListenersInvalidation) {
|
| v8::Local<v8::Context> context = MainContext();
|
|
|
| MockEventChangeHandler handler;
|
| - UnfilteredEventListeners listeners(handler.Get(), binding::kNoListenerMax);
|
| + UnfilteredEventListeners listeners(handler.Get(), binding::kNoListenerMax,
|
| + true);
|
|
|
| listeners.Invalidate(context);
|
|
|
| @@ -135,7 +137,7 @@ TEST_F(APIEventListenersTest, UnfilteredListenersIgnoreFilteringInfo) {
|
| v8::Local<v8::Context> context = MainContext();
|
|
|
| UnfilteredEventListeners listeners(base::Bind(&DoNothingOnUpdate),
|
| - binding::kNoListenerMax);
|
| + binding::kNoListenerMax, true);
|
| v8::Local<v8::Function> function = FunctionFromString(context, kFunction);
|
| std::string error;
|
| v8::Local<v8::Object> filter;
|
| @@ -150,7 +152,7 @@ TEST_F(APIEventListenersTest, UnfilteredListenersMaxListenersTest) {
|
| v8::HandleScope handle_scope(isolate());
|
| v8::Local<v8::Context> context = MainContext();
|
|
|
| - UnfilteredEventListeners listeners(base::Bind(&DoNothingOnUpdate), 1);
|
| + UnfilteredEventListeners listeners(base::Bind(&DoNothingOnUpdate), 1, true);
|
|
|
| v8::Local<v8::Function> function_a = FunctionFromString(context, kFunction);
|
| EXPECT_EQ(0u, listeners.GetNumListeners());
|
| @@ -169,6 +171,27 @@ TEST_F(APIEventListenersTest, UnfilteredListenersMaxListenersTest) {
|
| EXPECT_EQ(1u, listeners.GetNumListeners());
|
| }
|
|
|
| +TEST_F(APIEventListenersTest, UnfilteredListenersLazyListeners) {
|
| + v8::HandleScope handle_scope(isolate());
|
| + v8::Local<v8::Context> context = MainContext();
|
| +
|
| + MockEventChangeHandler handler;
|
| + UnfilteredEventListeners listeners(handler.Get(), binding::kNoListenerMax,
|
| + false);
|
| +
|
| + v8::Local<v8::Function> listener = FunctionFromString(context, kFunction);
|
| + std::string error;
|
| + EXPECT_CALL(handler, Run(binding::EventListenersChanged::HAS_LISTENERS,
|
| + nullptr, false, context));
|
| + listeners.AddListener(listener, v8::Local<v8::Object>(), context, &error);
|
| + ::testing::Mock::VerifyAndClearExpectations(&handler);
|
| +
|
| + EXPECT_CALL(handler, Run(binding::EventListenersChanged::NO_LISTENERS,
|
| + nullptr, false, context));
|
| + listeners.RemoveListener(listener, context);
|
| + ::testing::Mock::VerifyAndClearExpectations(&handler);
|
| +}
|
| +
|
| // Tests filtered listeners.
|
| TEST_F(APIEventListenersTest, FilteredListeners) {
|
| v8::HandleScope handle_scope(isolate());
|
| @@ -176,8 +199,8 @@ TEST_F(APIEventListenersTest, FilteredListeners) {
|
|
|
| MockEventChangeHandler handler;
|
| EventFilter event_filter;
|
| - FilteredEventListeners listeners(handler.Get(), kEvent,
|
| - binding::kNoListenerMax, &event_filter);
|
| + FilteredEventListeners listeners(
|
| + handler.Get(), kEvent, binding::kNoListenerMax, true, &event_filter);
|
|
|
| // Starting out, there should be no listeners registered.
|
| v8::Local<v8::Function> function_a = FunctionFromString(context, kFunction);
|
| @@ -304,8 +327,8 @@ TEST_F(APIEventListenersTest,
|
|
|
| MockEventChangeHandler handler;
|
| EventFilter event_filter;
|
| - FilteredEventListeners listeners(handler.Get(), kEvent,
|
| - binding::kNoListenerMax, &event_filter);
|
| + FilteredEventListeners listeners(
|
| + handler.Get(), kEvent, binding::kNoListenerMax, true, &event_filter);
|
|
|
| auto get_filter = [context]() {
|
| return V8ValueFromScriptSource(context, "({url: [{pathContains: 'foo'}]})")
|
| @@ -351,7 +374,8 @@ TEST_F(APIEventListenersTest, UnfilteredListenersError) {
|
|
|
| EventFilter event_filter;
|
| FilteredEventListeners listeners(base::Bind(&DoNothingOnUpdate), kEvent,
|
| - binding::kNoListenerMax, &event_filter);
|
| + binding::kNoListenerMax, true,
|
| + &event_filter);
|
|
|
| v8::Local<v8::Object> invalid_filter =
|
| V8ValueFromScriptSource(context, "({url: 'some string'})")
|
| @@ -374,9 +398,11 @@ TEST_F(APIEventListenersTest, MultipleUnfilteredListenerEvents) {
|
|
|
| EventFilter event_filter;
|
| FilteredEventListeners listeners_a(base::Bind(&DoNothingOnUpdate), kAlpha,
|
| - binding::kNoListenerMax, &event_filter);
|
| + binding::kNoListenerMax, true,
|
| + &event_filter);
|
| FilteredEventListeners listeners_b(base::Bind(&DoNothingOnUpdate), kBeta,
|
| - binding::kNoListenerMax, &event_filter);
|
| + binding::kNoListenerMax, true,
|
| + &event_filter);
|
|
|
| EXPECT_EQ(0, event_filter.GetMatcherCountForEventForTesting(kAlpha));
|
| EXPECT_EQ(0, event_filter.GetMatcherCountForEventForTesting(kBeta));
|
| @@ -410,8 +436,8 @@ TEST_F(APIEventListenersTest, FilteredListenersInvalidation) {
|
|
|
| MockEventChangeHandler handler;
|
| EventFilter event_filter;
|
| - FilteredEventListeners listeners(handler.Get(), kEvent,
|
| - binding::kNoListenerMax, &event_filter);
|
| + FilteredEventListeners listeners(
|
| + handler.Get(), kEvent, binding::kNoListenerMax, true, &event_filter);
|
| listeners.Invalidate(context);
|
|
|
| v8::Local<v8::Object> empty_filter;
|
| @@ -452,7 +478,7 @@ TEST_F(APIEventListenersTest, FilteredListenersMaxListenersTest) {
|
|
|
| EventFilter event_filter;
|
| FilteredEventListeners listeners(base::Bind(&DoNothingOnUpdate), kEvent, 1,
|
| - &event_filter);
|
| + true, &event_filter);
|
|
|
| v8::Local<v8::Function> function_a = FunctionFromString(context, kFunction);
|
| EXPECT_EQ(0u, listeners.GetNumListeners());
|
| @@ -471,4 +497,26 @@ TEST_F(APIEventListenersTest, FilteredListenersMaxListenersTest) {
|
| EXPECT_EQ(1u, listeners.GetNumListeners());
|
| }
|
|
|
| +TEST_F(APIEventListenersTest, FilteredListenersLazyListeners) {
|
| + v8::HandleScope handle_scope(isolate());
|
| + v8::Local<v8::Context> context = MainContext();
|
| +
|
| + MockEventChangeHandler handler;
|
| + EventFilter event_filter;
|
| + FilteredEventListeners listeners(
|
| + handler.Get(), kEvent, binding::kNoListenerMax, false, &event_filter);
|
| +
|
| + v8::Local<v8::Function> listener = FunctionFromString(context, kFunction);
|
| + std::string error;
|
| + EXPECT_CALL(handler, Run(binding::EventListenersChanged::HAS_LISTENERS,
|
| + testing::NotNull(), false, context));
|
| + listeners.AddListener(listener, v8::Local<v8::Object>(), context, &error);
|
| + ::testing::Mock::VerifyAndClearExpectations(&handler);
|
| +
|
| + EXPECT_CALL(handler, Run(binding::EventListenersChanged::NO_LISTENERS,
|
| + testing::NotNull(), false, context));
|
| + listeners.RemoveListener(listener, context);
|
| + ::testing::Mock::VerifyAndClearExpectations(&handler);
|
| +}
|
| +
|
| } // namespace extensions
|
|
|