LibJS: Switch Agent [[CanBlock]] slot to a enum member

It turns out it was a mistake to make this a virtual since
ServiceWorkerAgents are effectively the exact same as
DedicatedWorkerAgents and SharedWorkerAgents just with [[CanBlock]]
set to false.
This commit is contained in:
Shannon Booth 2025-04-24 16:16:08 +12:00 committed by Andreas Kling
commit 5290ebfe19
Notes: github-actions[bot] 2025-04-25 14:45:34 +00:00
6 changed files with 31 additions and 9 deletions

View file

@ -16,12 +16,26 @@ namespace JS {
// https://tc39.es/ecma262/#sec-agents
class Agent {
public:
enum class CanBlock {
Yes,
No,
};
virtual ~Agent();
// [[CanBlock]]
virtual bool can_block() const = 0;
CanBlock can_block() const { return m_can_block; }
virtual void spin_event_loop_until(GC::Root<GC::Function<bool()>> goal_condition) = 0;
protected:
explicit Agent(CanBlock can_block)
: m_can_block(can_block)
{
}
private:
// [[CanBlock]]
CanBlock m_can_block { false };
};
bool agent_can_suspend(VM const&);