/* * Copyright (c) 2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Web::DOM { class Timer final : public RefCounted { public: enum class Type { Interval, Timeout, }; static NonnullRefPtr create_interval(Window&, int milliseconds, JS::FunctionObject&); static NonnullRefPtr create_timeout(Window&, int milliseconds, JS::FunctionObject&); ~Timer(); i32 id() const { return m_id; } Type type() const { return m_type; } JS::FunctionObject& callback() { return *m_callback.cell(); } private: Timer(Window&, Type, int ms, JS::FunctionObject&); Window& m_window; RefPtr m_timer; Type m_type; int m_id { 0 }; JS::Handle m_callback; }; }