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

Unified Diff: extensions/renderer/bindings/api_event_listeners.cc

Issue 2973903002: [Extensions Bindings] Introduce a supportsLazyListeners property (Closed)
Patch Set: onMessage event fix Created 3 years, 5 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/bindings/api_event_listeners.cc
diff --git a/extensions/renderer/bindings/api_event_listeners.cc b/extensions/renderer/bindings/api_event_listeners.cc
index 140d8ddb4f1ec669868eeda20f9fc3b5a0bd3316..06a90609e89ef4a5a58d96bb9248954d08beca54 100644
--- a/extensions/renderer/bindings/api_event_listeners.cc
+++ b/extensions/renderer/bindings/api_event_listeners.cc
@@ -79,8 +79,11 @@ bool ValidateFilter(v8::Local<v8::Context> context,
UnfilteredEventListeners::UnfilteredEventListeners(
const ListenersUpdated& listeners_updated,
- int max_listeners)
- : listeners_updated_(listeners_updated), max_listeners_(max_listeners) {
+ int max_listeners,
+ bool supports_lazy_listeners)
+ : listeners_updated_(listeners_updated),
+ max_listeners_(max_listeners),
+ supports_lazy_listeners_(supports_lazy_listeners) {
DCHECK(max_listeners_ == binding::kNoListenerMax || max_listeners_ > 0);
}
UnfilteredEventListeners::~UnfilteredEventListeners() = default;
@@ -106,7 +109,7 @@ bool UnfilteredEventListeners::AddListener(v8::Local<v8::Function> listener,
v8::Global<v8::Function>(context->GetIsolate(), listener));
if (listeners_.size() == 1) {
listeners_updated_.Run(binding::EventListenersChanged::HAS_LISTENERS,
- nullptr, true, context);
+ nullptr, supports_lazy_listeners_, context);
}
return true;
@@ -121,7 +124,7 @@ void UnfilteredEventListeners::RemoveListener(v8::Local<v8::Function> listener,
listeners_.erase(iter);
if (listeners_.empty()) {
listeners_updated_.Run(binding::EventListenersChanged::NO_LISTENERS,
- nullptr, true, context);
+ nullptr, supports_lazy_listeners_, context);
}
}
@@ -147,8 +150,11 @@ std::vector<v8::Local<v8::Function>> UnfilteredEventListeners::GetListeners(
void UnfilteredEventListeners::Invalidate(v8::Local<v8::Context> context) {
if (!listeners_.empty()) {
listeners_.clear();
+ // We don't want to update stored lazy listeners in this case, since the
+ // extension didn't unregister interest in the event.
+ bool update_lazy_listeners = false;
listeners_updated_.Run(binding::EventListenersChanged::NO_LISTENERS,
- nullptr, false, context);
+ nullptr, update_lazy_listeners, context);
}
}
@@ -169,10 +175,12 @@ FilteredEventListeners::FilteredEventListeners(
const ListenersUpdated& listeners_updated,
const std::string& event_name,
int max_listeners,
+ bool supports_lazy_listeners,
EventFilter* event_filter)
: listeners_updated_(listeners_updated),
event_name_(event_name),
max_listeners_(max_listeners),
+ supports_lazy_listeners_(supports_lazy_listeners),
event_filter_(event_filter) {}
FilteredEventListeners::~FilteredEventListeners() = default;
@@ -208,7 +216,7 @@ bool FilteredEventListeners::AddListener(v8::Local<v8::Function> listener,
{v8::Global<v8::Function>(context->GetIsolate(), listener), filter_id});
if (value_counter_.Add(*matcher->value())) {
listeners_updated_.Run(binding::EventListenersChanged::HAS_LISTENERS,
- matcher->value(), true, context);
+ matcher->value(), supports_lazy_listeners_, context);
}
return true;
@@ -264,7 +272,8 @@ void FilteredEventListeners::InvalidateListener(
DCHECK(matcher);
if (value_counter_.Remove(*matcher->value())) {
listeners_updated_.Run(binding::EventListenersChanged::NO_LISTENERS,
- matcher->value(), was_manual, context);
+ matcher->value(),
+ was_manual && supports_lazy_listeners_, context);
}
event_filter_->RemoveEventMatcher(listener.filter_id);
« no previous file with comments | « extensions/renderer/bindings/api_event_listeners.h ('k') | extensions/renderer/bindings/api_event_listeners_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698