DocumentObserver.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. GC_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_active);
  22. visitor.visit(m_document_became_inactive);
  23. visitor.visit(m_document_completely_loaded);
  24. visitor.visit(m_document_readiness_observer);
  25. visitor.visit(m_document_visibility_state_observer);
  26. visitor.visit(m_document_page_showing_observer);
  27. }
  28. void DocumentObserver::finalize()
  29. {
  30. Base::finalize();
  31. m_document->unregister_document_observer({}, *this);
  32. }
  33. void DocumentObserver::set_document_became_active(Function<void()> callback)
  34. {
  35. if (callback)
  36. m_document_became_active = GC::create_function(vm().heap(), move(callback));
  37. else
  38. m_document_became_active = nullptr;
  39. }
  40. void DocumentObserver::set_document_became_inactive(Function<void()> callback)
  41. {
  42. if (callback)
  43. m_document_became_inactive = GC::create_function(vm().heap(), move(callback));
  44. else
  45. m_document_became_inactive = nullptr;
  46. }
  47. void DocumentObserver::set_document_completely_loaded(Function<void()> callback)
  48. {
  49. if (callback)
  50. m_document_completely_loaded = GC::create_function(vm().heap(), move(callback));
  51. else
  52. m_document_completely_loaded = nullptr;
  53. }
  54. void DocumentObserver::set_document_readiness_observer(Function<void(HTML::DocumentReadyState)> callback)
  55. {
  56. if (callback)
  57. m_document_readiness_observer = GC::create_function(vm().heap(), move(callback));
  58. else
  59. m_document_readiness_observer = nullptr;
  60. }
  61. void DocumentObserver::set_document_visibility_state_observer(Function<void(HTML::VisibilityState)> callback)
  62. {
  63. if (callback)
  64. m_document_visibility_state_observer = GC::create_function(vm().heap(), move(callback));
  65. else
  66. m_document_visibility_state_observer = nullptr;
  67. }
  68. void DocumentObserver::set_document_page_showing_observer(Function<void(bool)> callback)
  69. {
  70. if (callback)
  71. m_document_page_showing_observer = GC::create_function(vm().heap(), move(callback));
  72. else
  73. m_document_page_showing_observer = nullptr;
  74. }
  75. }