Coverage Report

Created: 2026-06-07 07:41

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/serenity/Userland/Libraries/LibWeb/DOM/Attr.h
Line
Count
Source
1
/*
2
 * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
3
 *
4
 * SPDX-License-Identifier: BSD-2-Clause
5
 */
6
7
#pragma once
8
9
#include <AK/WeakPtr.h>
10
#include <LibWeb/DOM/Node.h>
11
#include <LibWeb/DOM/QualifiedName.h>
12
13
namespace Web::DOM {
14
15
// https://dom.spec.whatwg.org/#attr
16
class Attr final : public Node {
17
    WEB_PLATFORM_OBJECT(Attr, Node);
18
    JS_DECLARE_ALLOCATOR(Attr);
19
20
public:
21
    [[nodiscard]] static JS::NonnullGCPtr<Attr> create(Document&, QualifiedName, String value = {}, Element* = nullptr);
22
    [[nodiscard]] static JS::NonnullGCPtr<Attr> create(Document&, FlyString local_name, String value = {}, Element* = nullptr);
23
    JS::NonnullGCPtr<Attr> clone(Document&);
24
25
0
    virtual ~Attr() override = default;
26
27
0
    virtual FlyString node_name() const override { return name(); }
28
29
0
    Optional<FlyString> const& namespace_uri() const { return m_qualified_name.namespace_(); }
30
0
    Optional<FlyString> const& prefix() const { return m_qualified_name.prefix(); }
31
0
    FlyString const& local_name() const { return m_qualified_name.local_name(); }
32
0
    FlyString const& name() const { return m_qualified_name.as_string(); }
33
0
    FlyString const& lowercase_name() const { return m_lowercase_name; }
34
35
0
    String const& value() const { return m_value; }
36
    void set_value(String value);
37
    void change_attribute(String value);
38
39
    Element* owner_element();
40
    Element const* owner_element() const;
41
    void set_owner_element(Element* owner_element);
42
43
    // Always returns true: https://dom.spec.whatwg.org/#dom-attr-specified
44
0
    constexpr bool specified() const { return true; }
45
46
    void handle_attribute_changes(Element&, Optional<String> const& old_value, Optional<String> const& new_value);
47
48
private:
49
    Attr(Document&, QualifiedName, String value, Element*);
50
51
    virtual void initialize(JS::Realm&) override;
52
    virtual void visit_edges(Cell::Visitor&) override;
53
54
    QualifiedName m_qualified_name;
55
    FlyString m_lowercase_name;
56
    String m_value;
57
    JS::GCPtr<Element> m_owner_element;
58
};
59
60
template<>
61
0
inline bool Node::fast_is<Attr>() const { return is_attribute(); }
62
63
}