1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 10:18:11 +00:00

LibWeb: Support unique task sources

Some elements, like HTMLMediaElement, must have a unique task sources
for every instance of that element that is created. Support this with a
simple wrapper around IDAllocator.
This commit is contained in:
Timothy Flynn 2023-04-04 09:02:00 -04:00 committed by Linus Groh
parent 4d9c14ca67
commit 807891c0df
2 changed files with 26 additions and 0 deletions

View file

@ -4,11 +4,14 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <AK/IDAllocator.h>
#include <LibWeb/DOM/Document.h>
#include <LibWeb/HTML/EventLoop/Task.h>
namespace Web::HTML {
static IDAllocator s_unique_task_source_allocator { static_cast<int>(Task::Source::UniqueTaskSourceStart) };
Task::Task(Source source, DOM::Document const* document, JS::SafeFunction<void()> steps)
: m_source(source)
, m_steps(move(steps))
@ -35,4 +38,14 @@ DOM::Document const* Task::document() const
return m_document.ptr();
}
UniqueTaskSource::UniqueTaskSource()
: source(static_cast<Task::Source>(s_unique_task_source_allocator.allocate()))
{
}
UniqueTaskSource::~UniqueTaskSource()
{
s_unique_task_source_allocator.deallocate(static_cast<int>(source));
}
}