DocumentObserver.cpp 2.3 KB

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