DocumentObserver.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * Copyright (c) 2023-2024, Tim Flynn <trflynn89@ladybird.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibJS/Runtime/Realm.h>
  7. #include <LibWeb/DOM/Document.h>
  8. #include <LibWeb/DOM/DocumentObserver.h>
  9. namespace Web::DOM {
  10. JS_DEFINE_ALLOCATOR(DocumentObserver);
  11. DocumentObserver::DocumentObserver(JS::Realm& realm, DOM::Document& document)
  12. : Bindings::PlatformObject(realm)
  13. , m_document(document)
  14. {
  15. m_document->register_document_observer({}, *this);
  16. }
  17. void DocumentObserver::visit_edges(Cell::Visitor& visitor)
  18. {
  19. Base::visit_edges(visitor);
  20. visitor.visit(m_document);
  21. visitor.visit(m_document_became_inactive);
  22. visitor.visit(m_document_completely_loaded);
  23. visitor.visit(m_document_readiness_observer);
  24. }
  25. void DocumentObserver::finalize()
  26. {
  27. Base::finalize();
  28. m_document->unregister_document_observer({}, *this);
  29. }
  30. void DocumentObserver::set_document_became_inactive(Function<void()> callback)
  31. {
  32. m_document_became_inactive = JS::create_heap_function(vm().heap(), move(callback));
  33. }
  34. void DocumentObserver::set_document_completely_loaded(Function<void()> callback)
  35. {
  36. m_document_completely_loaded = JS::create_heap_function(vm().heap(), move(callback));
  37. }
  38. void DocumentObserver::set_document_readiness_observer(Function<void(HTML::DocumentReadyState)> callback)
  39. {
  40. m_document_readiness_observer = JS::create_heap_function(vm().heap(), move(callback));
  41. }
  42. }