diff options
Diffstat (limited to 'src/bun.js/bindings/BunWorkerGlobalScope.cpp')
-rw-r--r-- | src/bun.js/bindings/BunWorkerGlobalScope.cpp | 30 |
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 |