From 3f1d0df7f922092b3a9745b08dd5e9eb4da60baa Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Mon, 24 Mar 2025 16:07:40 +0100 Subject: [PATCH] cdp: run microtasks after send inspector --- src/browser/browser.zig | 7 +++++++ src/cdp/runtime.zig | 16 +++------------- src/cdp/testing.zig | 2 ++ 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/browser/browser.zig b/src/browser/browser.zig index 700554db..c4ba97e5 100644 --- a/src/browser/browser.zig +++ b/src/browser/browser.zig @@ -100,6 +100,13 @@ pub const Browser = struct { self.session = null; } } + + pub fn runMicrotasks(self: *const Browser) void { + // if no session exists, there is nothing to do. + if (self.session == null) return; + + return self.session.?.env.runMicrotasks(); + } }; // Session is like a browser's tab. diff --git a/src/cdp/runtime.zig b/src/cdp/runtime.zig index 0b7c8750..f0692ea8 100644 --- a/src/cdp/runtime.zig +++ b/src/cdp/runtime.zig @@ -44,21 +44,11 @@ fn sendInspector(cmd: anytype, action: anytype) !void { const bc = cmd.browser_context orelse return error.BrowserContextNotLoaded; - // remove awaitPromise true params - // TODO: delete when Promise are correctly handled by zig-js-runtime - if (action == .callFunctionOn or action == .evaluate) { - const json = cmd.input.json; - if (std.mem.indexOf(u8, json, "\"awaitPromise\":true")) |_| { - // +1 because we'll be turning a true -> false - const buf = try cmd.arena.alloc(u8, json.len + 1); - _ = std.mem.replace(u8, json, "\"awaitPromise\":true", "\"awaitPromise\":false", buf); - bc.session.callInspector(buf); - return; - } - } - // the result to return is handled directly by the inspector. bc.session.callInspector(cmd.input.json); + + // force running micro tasks after send input to the inspector. + cmd.cdp.browser.runMicrotasks(); } pub const ExecutionContextCreated = struct { diff --git a/src/cdp/testing.zig b/src/cdp/testing.zig index 68f26014..a153ca3a 100644 --- a/src/cdp/testing.zig +++ b/src/cdp/testing.zig @@ -64,6 +64,8 @@ const Browser = struct { const session = self.session orelse return false; return std.mem.eql(u8, session.id, session_id); } + + pub fn runMicrotasks(_: *const Browser) void {} }; const Session = struct {