diff --git a/Userland/Libraries/LibWeb/HTML/EventLoop/EventLoop.cpp b/Userland/Libraries/LibWeb/HTML/EventLoop/EventLoop.cpp index 0737b211e85..6b43f205796 100644 --- a/Userland/Libraries/LibWeb/HTML/EventLoop/EventLoop.cpp +++ b/Userland/Libraries/LibWeb/HTML/EventLoop/EventLoop.cpp @@ -253,7 +253,13 @@ void EventLoop::process() }); // 10. For each fully active Document in docs, update animations and send events for that Document, passing in now as the timestamp. [WEBANIMATIONS] - // Note: This is handled by the document's animation timer + // Note: This is handled by the document's animation timer, however, if a document has any requestAnimationFrame callbacks, we need + // to dispatch events before that happens below. Not dispatching here would be observable. + for_each_fully_active_document_in_docs([&](DOM::Document& document) { + if (document.window()->animation_frame_callback_driver().has_callbacks()) { + document.update_animations_and_send_events(document.window()->performance()->now()); + } + }); // FIXME: 11. For each fully active Document in docs, run the fullscreen steps for that Document, passing in now as the timestamp. [FULLSCREEN]