diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp index e10a6e5edb1..6777b8ec8e0 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.cpp +++ b/Userland/Libraries/LibWeb/DOM/Document.cpp @@ -2392,6 +2392,11 @@ void Document::update_readiness(HTML::DocumentReadyState readiness_value) m_needs_to_call_page_did_load = true; } } + + for (auto document_observer : m_document_observers) { + if (document_observer->document_readiness_observer()) + document_observer->document_readiness_observer()->function()(m_readiness); + } } // https://html.spec.whatwg.org/multipage/dom.html#dom-document-lastmodified diff --git a/Userland/Libraries/LibWeb/DOM/DocumentObserver.cpp b/Userland/Libraries/LibWeb/DOM/DocumentObserver.cpp index cae3266613b..b941c4ace06 100644 --- a/Userland/Libraries/LibWeb/DOM/DocumentObserver.cpp +++ b/Userland/Libraries/LibWeb/DOM/DocumentObserver.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Tim Flynn + * Copyright (c) 2023-2024, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ @@ -25,6 +25,7 @@ void DocumentObserver::visit_edges(Cell::Visitor& visitor) visitor.visit(m_document); visitor.visit(m_document_became_inactive); visitor.visit(m_document_completely_loaded); + visitor.visit(m_document_readiness_observer); } void DocumentObserver::finalize() @@ -43,4 +44,9 @@ void DocumentObserver::set_document_completely_loaded(Function callback) m_document_completely_loaded = JS::create_heap_function(vm().heap(), move(callback)); } +void DocumentObserver::set_document_readiness_observer(Function callback) +{ + m_document_readiness_observer = JS::create_heap_function(vm().heap(), move(callback)); +} + } diff --git a/Userland/Libraries/LibWeb/DOM/DocumentObserver.h b/Userland/Libraries/LibWeb/DOM/DocumentObserver.h index d62a602ff80..7858c029af1 100644 --- a/Userland/Libraries/LibWeb/DOM/DocumentObserver.h +++ b/Userland/Libraries/LibWeb/DOM/DocumentObserver.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Tim Flynn + * Copyright (c) 2023-2024, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ @@ -11,6 +11,7 @@ #include #include #include +#include namespace Web::DOM { @@ -25,6 +26,9 @@ public: [[nodiscard]] JS::GCPtr> document_completely_loaded() const { return m_document_completely_loaded; } void set_document_completely_loaded(Function); + [[nodiscard]] JS::GCPtr> document_readiness_observer() const { return m_document_readiness_observer; } + void set_document_readiness_observer(Function); + private: explicit DocumentObserver(JS::Realm&, DOM::Document&); @@ -34,6 +38,7 @@ private: JS::NonnullGCPtr m_document; JS::GCPtr> m_document_became_inactive; JS::GCPtr> m_document_completely_loaded; + JS::GCPtr> m_document_readiness_observer; }; }