DocumentObserver.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*
  2. * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.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. }
  24. void DocumentObserver::finalize()
  25. {
  26. Base::finalize();
  27. m_document->unregister_document_observer({}, *this);
  28. }
  29. void DocumentObserver::set_document_became_inactive(Function<void()> callback)
  30. {
  31. m_document_became_inactive = JS::create_heap_function(vm().heap(), move(callback));
  32. }
  33. void DocumentObserver::set_document_completely_loaded(Function<void()> callback)
  34. {
  35. m_document_completely_loaded = JS::create_heap_function(vm().heap(), move(callback));
  36. }
  37. }