DocumentObserver.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. visitor.visit(m_document_visibility_state_observer);
  25. }
  26. void DocumentObserver::finalize()
  27. {
  28. Base::finalize();
  29. m_document->unregister_document_observer({}, *this);
  30. }
  31. void DocumentObserver::set_document_became_inactive(Function<void()> callback)
  32. {
  33. if (callback)
  34. m_document_became_inactive = JS::create_heap_function(vm().heap(), move(callback));
  35. else
  36. m_document_became_inactive = nullptr;
  37. }
  38. void DocumentObserver::set_document_completely_loaded(Function<void()> callback)
  39. {
  40. if (callback)
  41. m_document_completely_loaded = JS::create_heap_function(vm().heap(), move(callback));
  42. else
  43. m_document_completely_loaded = nullptr;
  44. }
  45. void DocumentObserver::set_document_readiness_observer(Function<void(HTML::DocumentReadyState)> callback)
  46. {
  47. if (callback)
  48. m_document_readiness_observer = JS::create_heap_function(vm().heap(), move(callback));
  49. else
  50. m_document_readiness_observer = nullptr;
  51. }
  52. void DocumentObserver::set_document_visibility_state_observer(Function<void(HTML::VisibilityState)> callback)
  53. {
  54. if (callback)
  55. m_document_visibility_state_observer = JS::create_heap_function(vm().heap(), move(callback));
  56. else
  57. m_document_visibility_state_observer = nullptr;
  58. }
  59. }