From a2419b5f4ea26777897bfc01bf2db4d735b5eee8 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Wed, 11 Dec 2024 13:17:41 -0500 Subject: [PATCH] LibWeb: Add a document observer to be notified upon becoming active --- Libraries/LibWeb/DOM/Document.cpp | 4 ++++ Libraries/LibWeb/DOM/DocumentObserver.cpp | 9 +++++++++ Libraries/LibWeb/DOM/DocumentObserver.h | 4 ++++ 3 files changed, 17 insertions(+) diff --git a/Libraries/LibWeb/DOM/Document.cpp b/Libraries/LibWeb/DOM/Document.cpp index 46b39f01cc2..d04c2066af6 100644 --- a/Libraries/LibWeb/DOM/Document.cpp +++ b/Libraries/LibWeb/DOM/Document.cpp @@ -3887,6 +3887,10 @@ void Document::make_active() navigable()->traversable_navigable()->page().client().page_did_finish_loading(url()); m_needs_to_call_page_did_load = false; } + + notify_each_document_observer([&](auto const& document_observer) { + return document_observer.document_became_active(); + }); } HTML::ListOfAvailableImages& Document::list_of_available_images() diff --git a/Libraries/LibWeb/DOM/DocumentObserver.cpp b/Libraries/LibWeb/DOM/DocumentObserver.cpp index 76b4c018284..d5cee5da4f2 100644 --- a/Libraries/LibWeb/DOM/DocumentObserver.cpp +++ b/Libraries/LibWeb/DOM/DocumentObserver.cpp @@ -23,6 +23,7 @@ void DocumentObserver::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_document); + visitor.visit(m_document_became_active); visitor.visit(m_document_became_inactive); visitor.visit(m_document_completely_loaded); visitor.visit(m_document_readiness_observer); @@ -36,6 +37,14 @@ void DocumentObserver::finalize() m_document->unregister_document_observer({}, *this); } +void DocumentObserver::set_document_became_active(Function callback) +{ + if (callback) + m_document_became_active = GC::create_function(vm().heap(), move(callback)); + else + m_document_became_active = nullptr; +} + void DocumentObserver::set_document_became_inactive(Function callback) { if (callback) diff --git a/Libraries/LibWeb/DOM/DocumentObserver.h b/Libraries/LibWeb/DOM/DocumentObserver.h index 5318d0453af..9ba4ca2faeb 100644 --- a/Libraries/LibWeb/DOM/DocumentObserver.h +++ b/Libraries/LibWeb/DOM/DocumentObserver.h @@ -20,6 +20,9 @@ class DocumentObserver final : public Bindings::PlatformObject { GC_DECLARE_ALLOCATOR(DocumentObserver); public: + [[nodiscard]] GC::Ptr> document_became_active() const { return m_document_became_active; } + void set_document_became_active(Function); + [[nodiscard]] GC::Ptr> document_became_inactive() const { return m_document_became_inactive; } void set_document_became_inactive(Function); @@ -42,6 +45,7 @@ private: virtual void finalize() override; GC::Ref m_document; + GC::Ptr> m_document_became_active; GC::Ptr> m_document_became_inactive; GC::Ptr> m_document_completely_loaded; GC::Ptr> m_document_readiness_observer;