ladybird/Userland/Libraries/LibWeb/HTML/EventLoop/Task.h
Andreas Kling 5cf439cce0 LibWeb: Run setTimeout() and setInterval() callbacks as HTML tasks
We now invoke DOM timer callbacks via HTML tasks. This brings callback
sequencing closer to the spec, although there are still many
imperfections in this area.
2021-10-03 13:36:40 +02:00

51 lines
1.1 KiB
C++

/*
* Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Function.h>
#include <AK/NonnullOwnPtr.h>
#include <AK/RefPtr.h>
#include <LibWeb/Forward.h>
namespace Web::HTML {
class Task {
public:
// https://html.spec.whatwg.org/multipage/webappapis.html#generic-task-sources
enum class Source {
Unspecified,
DOMManipulation,
UserInteraction,
Networking,
HistoryTraversal,
IdleTask,
PostedMessage,
Microtask,
TimerTask,
};
static NonnullOwnPtr<Task> create(Source source, DOM::Document* document, Function<void()> steps)
{
return adopt_own(*new Task(source, document, move(steps)));
}
~Task();
Source source() const { return m_source; }
void execute();
DOM::Document* document() { return m_document; }
DOM::Document const* document() const { return m_document; }
private:
Task(Source, DOM::Document*, Function<void()> steps);
Source m_source { Source::Unspecified };
Function<void()> m_steps;
RefPtr<DOM::Document> m_document;
};
}