LibJS+LibWeb: Set [[CanBlock]] false to Agent for window agent

similar-origin window agents have the [[CanBlock]] flag set to false.
Achieve this by hooking up JS's concept with an agent to HTML::Agent.
For now, this is only hooked up to the similar-origin window agent
case but should be extended to the other agent types in the future.
This commit is contained in:
Shannon Booth 2025-04-20 16:49:34 +12:00 committed by Tim Flynn
commit e124ef52ee
Notes: github-actions[bot] 2025-04-22 15:52:53 +00:00
16 changed files with 106 additions and 44 deletions

View file

@ -6,6 +6,7 @@
*/
#include <AK/TypeCasts.h>
#include <LibJS/Runtime/Agent.h>
#include <LibJS/Runtime/Completion.h>
#include <LibJS/Runtime/NativeFunction.h>
#include <LibJS/Runtime/Promise.h>
@ -98,9 +99,9 @@ ThrowCompletionOr<Value> await(VM& vm, Value value)
// FIXME: Since we don't support context suspension, we attempt to "wait" for the promise to resolve
// by syncronously running all queued promise jobs.
if (auto* custom_data = vm.custom_data()) {
if (auto* agent = vm.agent()) {
// Embedder case (i.e. LibWeb). Runs all promise jobs by performing a microtask checkpoint.
custom_data->spin_event_loop_until(GC::create_function(vm.heap(), [success] {
agent->spin_event_loop_until(GC::create_function(vm.heap(), [success] {
return success.has_value();
}));
} else {