diff --git a/Libraries/LibWeb/DOM/DocumentObserver.cpp b/Libraries/LibWeb/DOM/DocumentObserver.cpp index d5cee5da4f2..d38a17cecf3 100644 --- a/Libraries/LibWeb/DOM/DocumentObserver.cpp +++ b/Libraries/LibWeb/DOM/DocumentObserver.cpp @@ -12,7 +12,7 @@ namespace Web::DOM { GC_DEFINE_ALLOCATOR(DocumentObserver); -DocumentObserver::DocumentObserver(JS::Realm& realm, DOM::Document& document) +DocumentObserver::DocumentObserver(JS::Realm& realm, Document& document) : Bindings::PlatformObject(realm) , m_document(document) { @@ -37,6 +37,14 @@ void DocumentObserver::finalize() m_document->unregister_document_observer({}, *this); } +void DocumentObserver::set_document(GC::Ref document) +{ + VERIFY(document != m_document); + m_document->unregister_document_observer({}, *this); + m_document = document; + document->register_document_observer({}, *this); +} + void DocumentObserver::set_document_became_active(Function callback) { if (callback) diff --git a/Libraries/LibWeb/DOM/DocumentObserver.h b/Libraries/LibWeb/DOM/DocumentObserver.h index 9ba4ca2faeb..32187d08e3d 100644 --- a/Libraries/LibWeb/DOM/DocumentObserver.h +++ b/Libraries/LibWeb/DOM/DocumentObserver.h @@ -38,13 +38,16 @@ public: [[nodiscard]] GC::Ptr> document_page_showing_observer() const { return m_document_page_showing_observer; } void set_document_page_showing_observer(Function); + GC::Ref document() { return m_document; } + void set_document(GC::Ref); + private: - explicit DocumentObserver(JS::Realm&, DOM::Document&); + explicit DocumentObserver(JS::Realm&, Document&); virtual void visit_edges(Cell::Visitor&) override; virtual void finalize() override; - GC::Ref m_document; + GC::Ref m_document; GC::Ptr> m_document_became_active; GC::Ptr> m_document_became_inactive; GC::Ptr> m_document_completely_loaded;