LibWeb: Assign a unique ID to each HTML task

And return that ID when queueing an element task. This is required for
some task tracking - specifically, the HTML ToggleTaskTracker struct.
This commit is contained in:
Timothy Flynn 2023-08-31 13:25:27 -04:00 committed by Andreas Kling
parent 5ae9b2fdaf
commit f598a357ad
Notes: sideshowbarker 2024-07-17 21:26:19 +09:00
4 changed files with 15 additions and 4 deletions

View file

@ -759,10 +759,14 @@ void Element::make_html_uppercased_qualified_name()
}
// https://html.spec.whatwg.org/multipage/webappapis.html#queue-an-element-task
void Element::queue_an_element_task(HTML::Task::Source source, JS::SafeFunction<void()> steps)
int Element::queue_an_element_task(HTML::Task::Source source, JS::SafeFunction<void()> steps)
{
auto task = HTML::Task::create(source, &document(), move(steps));
auto id = task->id();
HTML::main_thread_event_loop().task_queue().add(move(task));
return id;
}
// https://html.spec.whatwg.org/multipage/syntax.html#void-elements

View file

@ -197,7 +197,7 @@ public:
void set_custom_properties(Optional<CSS::Selector::PseudoElement>, HashMap<DeprecatedFlyString, CSS::StyleProperty> custom_properties);
[[nodiscard]] HashMap<DeprecatedFlyString, CSS::StyleProperty> const& custom_properties(Optional<CSS::Selector::PseudoElement>) const;
void queue_an_element_task(HTML::Task::Source, JS::SafeFunction<void()>);
int queue_an_element_task(HTML::Task::Source, JS::SafeFunction<void()>);
bool is_void_element() const;
bool serializes_as_void() const;

View file

@ -11,15 +11,20 @@
namespace Web::HTML {
static IDAllocator s_unique_task_source_allocator { static_cast<int>(Task::Source::UniqueTaskSourceStart) };
static IDAllocator s_task_id_allocator;
Task::Task(Source source, DOM::Document const* document, JS::SafeFunction<void()> steps)
: m_source(source)
: m_id(s_task_id_allocator.allocate())
, m_source(source)
, m_steps(move(steps))
, m_document(JS::make_handle(document))
{
}
Task::~Task() = default;
Task::~Task()
{
s_unique_task_source_allocator.deallocate(m_id);
}
void Task::execute()
{

View file

@ -59,6 +59,7 @@ public:
}
~Task();
int id() const { return m_id; }
Source source() const { return m_source; }
void execute();
@ -69,6 +70,7 @@ public:
private:
Task(Source, DOM::Document const*, JS::SafeFunction<void()> steps);
int m_id { 0 };
Source m_source { Source::Unspecified };
JS::SafeFunction<void()> m_steps;
JS::Handle<DOM::Document const> m_document;