/src/serenity/Userland/Libraries/LibWeb/DOM/DocumentObserver.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2023-2024, Tim Flynn <trflynn89@ladybird.org> |
3 | | * |
4 | | * SPDX-License-Identifier: BSD-2-Clause |
5 | | */ |
6 | | |
7 | | #pragma once |
8 | | |
9 | | #include <LibJS/Forward.h> |
10 | | #include <LibJS/Heap/HeapFunction.h> |
11 | | #include <LibJS/SafeFunction.h> |
12 | | #include <LibWeb/Bindings/PlatformObject.h> |
13 | | #include <LibWeb/Forward.h> |
14 | | #include <LibWeb/HTML/DocumentReadyState.h> |
15 | | |
16 | | namespace Web::DOM { |
17 | | |
18 | | class DocumentObserver final : public Bindings::PlatformObject { |
19 | | WEB_PLATFORM_OBJECT(DocumentObserver, Bindings::PlatformObject); |
20 | | JS_DECLARE_ALLOCATOR(DocumentObserver); |
21 | | |
22 | | public: |
23 | 0 | [[nodiscard]] JS::GCPtr<JS::HeapFunction<void()>> document_became_inactive() const { return m_document_became_inactive; } |
24 | | void set_document_became_inactive(Function<void()>); |
25 | | |
26 | 0 | [[nodiscard]] JS::GCPtr<JS::HeapFunction<void()>> document_completely_loaded() const { return m_document_completely_loaded; } |
27 | | void set_document_completely_loaded(Function<void()>); |
28 | | |
29 | 0 | [[nodiscard]] JS::GCPtr<JS::HeapFunction<void(HTML::DocumentReadyState)>> document_readiness_observer() const { return m_document_readiness_observer; } |
30 | | void set_document_readiness_observer(Function<void(HTML::DocumentReadyState)>); |
31 | | |
32 | | private: |
33 | | explicit DocumentObserver(JS::Realm&, DOM::Document&); |
34 | | |
35 | | virtual void visit_edges(Cell::Visitor&) override; |
36 | | virtual void finalize() override; |
37 | | |
38 | | JS::NonnullGCPtr<DOM::Document> m_document; |
39 | | JS::GCPtr<JS::HeapFunction<void()>> m_document_became_inactive; |
40 | | JS::GCPtr<JS::HeapFunction<void()>> m_document_completely_loaded; |
41 | | JS::GCPtr<JS::HeapFunction<void(HTML::DocumentReadyState)>> m_document_readiness_observer; |
42 | | }; |
43 | | |
44 | | } |