From b30e95eb27bfe6849590600f7f674129a5ada5e6 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 3 Sep 2022 18:47:33 +0200 Subject: [PATCH] LibWeb: Don't allocate NamedNodeMap in Element constructor Allocations should happen in the initialize() virtual, so move it there. --- Userland/Libraries/LibWeb/DOM/Element.cpp | 7 ++++++- Userland/Libraries/LibWeb/DOM/Element.h | 6 ++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp index 52a26c928a..b289ad903c 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.cpp +++ b/Userland/Libraries/LibWeb/DOM/Element.cpp @@ -45,7 +45,6 @@ namespace Web::DOM { Element::Element(Document& document, DOM::QualifiedName qualified_name) : ParentNode(document, NodeType::ELEMENT_NODE) , m_qualified_name(move(qualified_name)) - , m_attributes(NamedNodeMap::create(*this)) { set_prototype(&window().cached_web_prototype("Element")); make_html_uppercased_qualified_name(); @@ -53,6 +52,12 @@ Element::Element(Document& document, DOM::QualifiedName qualified_name) Element::~Element() = default; +void Element::initialize(JS::Realm& realm) +{ + Base::initialize(realm); + m_attributes = NamedNodeMap::create(*this); +} + void Element::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); diff --git a/Userland/Libraries/LibWeb/DOM/Element.h b/Userland/Libraries/LibWeb/DOM/Element.h index 0c64a6ceff..ed2cc60219 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.h +++ b/Userland/Libraries/LibWeb/DOM/Element.h @@ -32,7 +32,6 @@ class Element WEB_PLATFORM_OBJECT(Element, ParentNode); public: - Element(Document&, DOM::QualifiedName); virtual ~Element() override; String const& qualified_name() const { return m_qualified_name.as_string(); } @@ -142,6 +141,9 @@ public: void serialize_pseudo_elements_as_json(JsonArraySerializer& children_array) const; protected: + Element(Document&, DOM::QualifiedName); + virtual void initialize(JS::Realm&) override; + virtual void children_changed() override; virtual void visit_edges(Cell::Visitor&) override; @@ -152,7 +154,7 @@ private: QualifiedName m_qualified_name; String m_html_uppercased_qualified_name; - JS::NonnullGCPtr m_attributes; + JS::GCPtr m_attributes; JS::GCPtr m_inline_style; JS::GCPtr m_class_list; JS::GCPtr m_shadow_root;