diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp index 0a7abe12b0..68d49fe134 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.cpp +++ b/Userland/Libraries/LibWeb/DOM/Document.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -383,6 +384,8 @@ void Document::visit_edges(Cell::Visitor& visitor) visitor.visit(m_lazy_load_intersection_observer); visitor.visit(m_visual_viewport); + visitor.visit(m_default_timeline); + for (auto& script : m_scripts_to_execute_when_parsing_has_finished) visitor.visit(script); for (auto& script : m_scripts_to_execute_as_soon_as_possible) @@ -3560,4 +3563,13 @@ HashMap& Document::shared_image_requests() return m_shared_image_requests; } +// https://www.w3.org/TR/web-animations-1/#dom-document-timeline +JS::NonnullGCPtr Document::timeline() +{ + // The DocumentTimeline object representing the default document timeline. + if (!m_default_timeline) + m_default_timeline = Animations::DocumentTimeline::create(realm(), *this, static_cast(MonotonicTime::now().milliseconds())); + return *m_default_timeline; +} + } diff --git a/Userland/Libraries/LibWeb/DOM/Document.h b/Userland/Libraries/LibWeb/DOM/Document.h index 311514f5ca..f04482aa5e 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.h +++ b/Userland/Libraries/LibWeb/DOM/Document.h @@ -534,6 +534,8 @@ public: HashMap& shared_image_requests(); + JS::NonnullGCPtr timeline(); + protected: virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; @@ -740,6 +742,9 @@ private: JS::GCPtr m_latest_entry; HashMap m_shared_image_requests; + + // https://www.w3.org/TR/web-animations-1/#document-default-document-timeline + JS::GCPtr m_default_timeline; }; template<> diff --git a/Userland/Libraries/LibWeb/DOM/Document.idl b/Userland/Libraries/LibWeb/DOM/Document.idl index a2d285b1c4..322f29e245 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.idl +++ b/Userland/Libraries/LibWeb/DOM/Document.idl @@ -1,3 +1,4 @@ +#import #import #import #import @@ -112,6 +113,9 @@ interface Document : Node { [NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null); Selection? getSelection(); + + // https://www.w3.org/TR/web-animations-1/#extensions-to-the-document-interface + readonly attribute DocumentTimeline timeline; }; dictionary ElementCreationOptions {