From 9e0746f164a228cbc6bfcd433bbfbebf1e381e7b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Nov 2026 09:30:02 +0000 Subject: [PATCH 1/3] Initial plan From c0e60029c25b253c919aa032aff65c4952b98e1c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Nov 2026 09:34:14 +0000 Subject: [PATCH 2/3] Lengthen cross-origin async test wait Co-authored-by: FlorianRappl <1766191+FlorianRappl@users.noreply.github.com> --- src/AngleSharp.Js.Tests/CrossOriginTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AngleSharp.Js.Tests/CrossOriginTests.cs b/src/AngleSharp.Js.Tests/CrossOriginTests.cs index 675268c..15190fe 100644 --- a/src/AngleSharp.Js.Tests/CrossOriginTests.cs +++ b/src/AngleSharp.Js.Tests/CrossOriginTests.cs @@ -62,9 +62,9 @@ protected override async Task PerformRequestAsync(Request request, Ca private static async Task Until(Func condition) { - for (var i = 0; i < 200 && !condition(); i++) + for (var i = 0; i < 500 && !condition(); i++) { - await Task.Delay(20); + await Task.Delay(20).ConfigureAwait(false); } Assert.IsTrue(condition(), "The condition never held."); From 170f94f66936c4c657f842eed9570c92e7bf25c5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Nov 2026 09:56:40 +0000 Subject: [PATCH 3/3] Serialize message tasks through engine runner Co-authored-by: FlorianRappl <1766191+FlorianRappl@users.noreply.github.com> --- src/AngleSharp.Js.Tests/CrossOriginTests.cs | 4 +-- src/AngleSharp.Js/Dom/MessageChannel.cs | 27 ++++++++++++--------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/AngleSharp.Js.Tests/CrossOriginTests.cs b/src/AngleSharp.Js.Tests/CrossOriginTests.cs index 15190fe..675268c 100644 --- a/src/AngleSharp.Js.Tests/CrossOriginTests.cs +++ b/src/AngleSharp.Js.Tests/CrossOriginTests.cs @@ -62,9 +62,9 @@ protected override async Task PerformRequestAsync(Request request, Ca private static async Task Until(Func condition) { - for (var i = 0; i < 500 && !condition(); i++) + for (var i = 0; i < 200 && !condition(); i++) { - await Task.Delay(20).ConfigureAwait(false); + await Task.Delay(20); } Assert.IsTrue(condition(), "The condition never held."); diff --git a/src/AngleSharp.Js/Dom/MessageChannel.cs b/src/AngleSharp.Js/Dom/MessageChannel.cs index 7421424..e3ab158 100644 --- a/src/AngleSharp.Js/Dom/MessageChannel.cs +++ b/src/AngleSharp.Js/Dom/MessageChannel.cs @@ -557,13 +557,27 @@ public static void Enqueue(IDocument document, Action action) if (loop != null) { - loop.Enqueue(action, TaskPriority.Normal); + loop.Enqueue(_ => Execute(document, action), TaskPriority.Normal); return; } Queues.GetValue(document, static _ => new TaskQueue()).Enqueue(document, action); } + private static void Execute(IDocument document, Action action) + { + var scripting = document.Context?.GetService(); + + if (scripting != null) + { + scripting.GetOrCreateInstance(document).RunTask(action); + } + else + { + action(); + } + } + private sealed class TaskQueue { private readonly Queue _actions = new Queue(); @@ -620,16 +634,7 @@ private void Run(IDocument document) try { - var scripting = document.Context?.GetService(); - - if (scripting != null) - { - scripting.GetOrCreateInstance(document).RunTask(action); - } - else - { - action(); - } + Execute(document, action); } catch (Exception error) {