From e6d3b1a7aaded29f5938247c58e0f573229adbe4 Mon Sep 17 00:00:00 2001 From: Dylan Piercey Date: Wed, 7 Jun 2023 16:29:04 -0700 Subject: [PATCH] #948@patch: Use macro task timing for postmessage api. --- packages/happy-dom/src/window/Window.ts | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/happy-dom/src/window/Window.ts b/packages/happy-dom/src/window/Window.ts index bfe5aa110..8bdd57ff7 100644 --- a/packages/happy-dom/src/window/Window.ts +++ b/packages/happy-dom/src/window/Window.ts @@ -806,14 +806,22 @@ export default class Window extends EventTarget implements IWindow { ); } - this.dispatchEvent( - new MessageEvent('message', { - data: message, - origin: this.parent.location.origin, - source: this.parent, - lastEventId: '' - }) - ); + const setImmediate = + globalThis.setImmediate || (setTimeout); + const clearImmediate = + globalThis.clearImmediate || (clearTimeout); + const taskId = this.happyDOM.asyncTaskManager.startTask(() => clearImmediate(immediateId)); + const immediateId = setImmediate(() => { + this.happyDOM.asyncTaskManager.endTask(taskId); + this.dispatchEvent( + new MessageEvent('message', { + data: message, + origin: this.parent.location.origin, + source: this.parent, + lastEventId: '' + }) + ); + }); } /**