/* * Copyright (c) 2023, Aliaksandr Kalenik * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace Web::HTML { // https://html.spec.whatwg.org/multipage/document-sequences.html#tn-session-history-traversal-queue class SessionHistoryTraversalQueue { public: SessionHistoryTraversalQueue() { m_timer = Core::Timer::create_single_shot(0, [this] { while (m_queue.size() > 0) { auto steps = m_queue.take_first(); steps(); } }).release_value_but_fixme_should_propagate_errors(); } void append(JS::SafeFunction steps) { m_queue.append(move(steps)); if (!m_timer->is_active()) { m_timer->start(); } } private: Vector> m_queue; RefPtr m_timer; }; }