aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/BunWorkerGlobalScope.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/bindings/BunWorkerGlobalScope.cpp')
-rw-r--r--src/bun.js/bindings/BunWorkerGlobalScope.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/bun.js/bindings/BunWorkerGlobalScope.cpp b/src/bun.js/bindings/BunWorkerGlobalScope.cpp
index ef1f70fdf..f78111633 100644
--- a/src/bun.js/bindings/BunWorkerGlobalScope.cpp
+++ b/src/bun.js/bindings/BunWorkerGlobalScope.cpp
@@ -11,4 +11,34 @@ MessagePortChannelProvider& GlobalScope::messagePortChannelProvider()
{
return *reinterpret_cast<MessagePortChannelProvider*>(&MessagePortChannelProviderImpl::singleton());
}
+
+void GlobalScope::onDidChangeListenerImpl(EventTarget& self, const AtomString& eventType, OnDidChangeListenerKind kind)
+{
+ if (eventType == eventNames().messageEvent) {
+ auto& global = static_cast<GlobalScope&>(self);
+ switch (kind) {
+ case Add:
+ if (global.m_messageEventCount == 0) {
+ global.scriptExecutionContext()->refEventLoop();
+ }
+ global.m_messageEventCount++;
+ break;
+ case Remove:
+ global.m_messageEventCount--;
+ if (global.m_messageEventCount == 0) {
+ global.scriptExecutionContext()->unrefEventLoop();
+ }
+ break;
+ // I dont think clear in this context is ever called. If it is (search OnDidChangeListenerKind::Clear for the impl),
+ // it may actually call once per event, in a way the Remove code above would suffice.
+ case Clear:
+ if (global.m_messageEventCount > 0) {
+ global.scriptExecutionContext()->unrefEventLoop();
+ }
+ global.m_messageEventCount = 0;
+ break;
+ }
+ }
+};
+
} \ No newline at end of file