aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bun.js/bindings/webcore/EventEmitter.h5
-rw-r--r--src/bun.js/bindings/webcore/IdentifierEventListenerMap.h11
-rw-r--r--src/bun.js/bindings/webcore/JSEventEmitterCustom.cpp2
3 files changed, 16 insertions, 2 deletions
diff --git a/src/bun.js/bindings/webcore/EventEmitter.h b/src/bun.js/bindings/webcore/EventEmitter.h
index d6fd20c65..eb6fa2e77 100644
--- a/src/bun.js/bindings/webcore/EventEmitter.h
+++ b/src/bun.js/bindings/webcore/EventEmitter.h
@@ -76,8 +76,11 @@ public:
const EventEmitterData* eventTargetData() const;
+ IdentifierEventListenerMap& eventListenerMap() { return ensureEventEmitterData().eventListenerMap; }
+
private:
- EventEmitter(ScriptExecutionContext& context) : ContextDestructionObserver(&context)
+ EventEmitter(ScriptExecutionContext& context)
+ : ContextDestructionObserver(&context)
{
}
diff --git a/src/bun.js/bindings/webcore/IdentifierEventListenerMap.h b/src/bun.js/bindings/webcore/IdentifierEventListenerMap.h
index 34da21122..f2a60f0a1 100644
--- a/src/bun.js/bindings/webcore/IdentifierEventListenerMap.h
+++ b/src/bun.js/bindings/webcore/IdentifierEventListenerMap.h
@@ -56,6 +56,7 @@ public:
WEBCORE_EXPORT SimpleEventListenerVector* find(const JSC::Identifier& eventType);
const SimpleEventListenerVector* find(const JSC::Identifier& eventType) const { return const_cast<IdentifierEventListenerMap*>(this)->find(eventType); }
Vector<JSC::Identifier> eventTypes() const;
+ template<typename Visitor> void visitJSEventListeners(Visitor&);
Lock& lock() { return m_lock; }
@@ -64,4 +65,14 @@ private:
Lock m_lock;
};
+template<typename Visitor>
+void IdentifierEventListenerMap::visitJSEventListeners(Visitor& visitor)
+{
+ Locker locker { m_lock };
+ for (auto& entry : m_entries) {
+ for (auto& eventListener : entry.second)
+ eventListener->callback().visitJSFunction(visitor);
+ }
+}
+
} // namespace WebCore
diff --git a/src/bun.js/bindings/webcore/JSEventEmitterCustom.cpp b/src/bun.js/bindings/webcore/JSEventEmitterCustom.cpp
index 53220536d..64ae6e1c8 100644
--- a/src/bun.js/bindings/webcore/JSEventEmitterCustom.cpp
+++ b/src/bun.js/bindings/webcore/JSEventEmitterCustom.cpp
@@ -44,7 +44,7 @@ std::unique_ptr<JSEventEmitterWrapper> jsEventEmitterCast(VM& vm, JSC::JSGlobalO
template<typename Visitor>
void JSEventEmitter::visitAdditionalChildren(Visitor& visitor)
{
- wrapped().visitJSEventListeners(visitor);
+ wrapped().eventListenerMap().visitJSEventListeners(visitor);
}
DEFINE_VISIT_ADDITIONAL_CHILDREN(JSEventEmitter);