From 6f235ad93f48107d48607f7315ff1372915144f0 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 22 Mar 2020 21:20:40 +0100 Subject: [PATCH] LibWeb: Implement cancelAnimationFrame() These functions (rAF and cAF) should eventually stop using raw ID's from GUI::DisplayLink as their identifiers. That's a FIXME for now. :^) --- Libraries/LibWeb/DOM/Document.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Libraries/LibWeb/DOM/Document.cpp b/Libraries/LibWeb/DOM/Document.cpp index 4f7498c2ec..058c702d29 100644 --- a/Libraries/LibWeb/DOM/Document.cpp +++ b/Libraries/LibWeb/DOM/Document.cpp @@ -373,6 +373,7 @@ JS::Interpreter& Document::interpreter() ASSERT(arguments[0].is_object()); ASSERT(arguments[0].as_object()->is_function()); auto callback = make_handle(const_cast(arguments[0].as_object())); + // FIXME: Don't hand out raw DisplayLink ID's to JavaScript! i32 link_id = GUI::DisplayLink::register_callback([this, callback](i32 link_id) { const_cast(static_cast(callback.cell()))->call(*m_interpreter, {}); GUI::DisplayLink::unregister_callback(link_id); @@ -380,6 +381,14 @@ JS::Interpreter& Document::interpreter() return JS::Value(link_id); }); + m_interpreter->global_object().put_native_function("cancelAnimationFrame", [](JS::Object*, const Vector& arguments) -> JS::Value { + if (arguments.size() < 1) + return JS::js_undefined(); + // FIXME: We should not be passing untrusted numbers to DisplayLink::unregistered_callback()! + GUI::DisplayLink::unregister_callback(arguments[0].to_i32()); + return JS::js_undefined(); + }); + m_interpreter->global_object().put_native_property( "document", [this](JS::Object*) {