Serenity Operating System
1/*
2 * Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/RefCounted.h>
10#include <LibJS/SafeFunction.h>
11
12namespace Web::Platform {
13
14class Timer : public RefCounted<Timer> {
15public:
16 static NonnullRefPtr<Timer> create();
17 static NonnullRefPtr<Timer> create_repeating(int interval_ms, JS::SafeFunction<void()>&& timeout_handler);
18 static NonnullRefPtr<Timer> create_single_shot(int interval_ms, JS::SafeFunction<void()>&& timeout_handler);
19
20 virtual ~Timer();
21
22 virtual void start() = 0;
23 virtual void start(int interval_ms) = 0;
24 virtual void restart() = 0;
25 virtual void restart(int interval_ms) = 0;
26 virtual void stop() = 0;
27
28 virtual void set_active(bool) = 0;
29
30 virtual bool is_active() const = 0;
31 virtual int interval() const = 0;
32 virtual void set_interval(int interval_ms) = 0;
33
34 virtual bool is_single_shot() const = 0;
35 virtual void set_single_shot(bool) = 0;
36
37 JS::SafeFunction<void()> on_timeout;
38};
39
40}