diff --git a/Userland/Libraries/LibWeb/HTML/Window.cpp b/Userland/Libraries/LibWeb/HTML/Window.cpp index df7d465dcf..eb50c3514f 100644 --- a/Userland/Libraries/LibWeb/HTML/Window.cpp +++ b/Userland/Libraries/LibWeb/HTML/Window.cpp @@ -200,7 +200,11 @@ i32 Window::run_timer_initialization_steps(Bindings::TimerHandler handler, i32 t // 8. Assert: initiating script is not null, since this algorithm is always called from some script. // 9. Let task be a task that runs the following substeps: - auto task = [window = NonnullRefPtr(*this), handler = move(handler), timeout, arguments = move(arguments), repeat, id]() mutable { + auto task = [weak_window = make_weak_ptr(), handler = move(handler), timeout, arguments = move(arguments), repeat, id]() mutable { + auto window = weak_window.strong_ref(); + if (!window) + return; + // 1. If id does not exist in global's map of active timers, then abort these steps. if (!window->m_timers.contains(id)) return; @@ -253,10 +257,12 @@ i32 Window::run_timer_initialization_steps(Bindings::TimerHandler handler, i32 t // 11. FIXME: Set task's timer nesting level to nesting level. // 12. Let completionStep be an algorithm step which queues a global task on the timer task source given global to run task. - auto completion_step = [window = NonnullRefPtr(*this), task = move(task)]() mutable { - HTML::queue_global_task(HTML::Task::Source::TimerTask, *window->wrapper(), [task = move(task)]() mutable { - task(); - }); + auto completion_step = [weak_window = make_weak_ptr(), task = move(task)]() mutable { + auto window = weak_window.strong_ref(); + if (!window) + return; + + HTML::queue_global_task(HTML::Task::Source::TimerTask, *window->wrapper(), move(task)); }; // 13. Run steps after a timeout given global, "setTimeout/setInterval", timeout, completionStep, and id. diff --git a/Userland/Libraries/LibWeb/HTML/Window.h b/Userland/Libraries/LibWeb/HTML/Window.h index 41a5a1f0af..df519f3977 100644 --- a/Userland/Libraries/LibWeb/HTML/Window.h +++ b/Userland/Libraries/LibWeb/HTML/Window.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -26,6 +27,7 @@ class RequestAnimationFrameCallback; class Window final : public RefCounted + , public Weakable , public DOM::EventTarget , public HTML::GlobalEventHandlers { public: