Serenity Operating System
1/*
2 * Copyright (c) 2022, Jonah Shafran <jonahshafran@gmail.com>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/JsonObjectSerializer.h>
10#include <AK/Vector.h>
11#include <LibJS/Heap/Cell.h>
12#include <LibWeb/DOM/Node.h>
13#include <LibWeb/Forward.h>
14
15namespace Web::DOM {
16
17class AccessibilityTreeNode final : public JS::Cell {
18 JS_CELL(AccessibilityTreeNode, JS::Cell)
19public:
20 static WebIDL::ExceptionOr<JS::NonnullGCPtr<AccessibilityTreeNode>> create(Document*, DOM::Node const*);
21 virtual ~AccessibilityTreeNode() override = default;
22
23 JS::GCPtr<DOM::Node const> value() const { return m_value; }
24 void set_value(JS::GCPtr<DOM::Node const> value) { m_value = value; }
25 Vector<AccessibilityTreeNode*> children() const { return m_children; }
26 void append_child(AccessibilityTreeNode* child) { m_children.append(child); }
27
28 void serialize_tree_as_json(JsonObjectSerializer<StringBuilder>& object, Document const&) const;
29
30protected:
31 virtual void visit_edges(Visitor&) override;
32
33private:
34 explicit AccessibilityTreeNode(JS::GCPtr<DOM::Node const>);
35
36 JS::GCPtr<DOM::Node const> m_value;
37 Vector<AccessibilityTreeNode*> m_children;
38};
39
40}