diff --git a/Libraries/LibWeb/DOM/Element.cpp b/Libraries/LibWeb/DOM/Element.cpp index 6cccaeaf3bd..292e91b2cf6 100644 --- a/Libraries/LibWeb/DOM/Element.cpp +++ b/Libraries/LibWeb/DOM/Element.cpp @@ -90,7 +90,6 @@ Element::Element(Document& document, DOM::QualifiedName qualified_name) : ParentNode(document, NodeType::ELEMENT_NODE) , m_qualified_name(move(qualified_name)) { - make_html_uppercased_qualified_name(); } Element::~Element() = default; @@ -952,13 +951,12 @@ void Element::set_inline_style(GC::Ptr style) } // https://dom.spec.whatwg.org/#element-html-uppercased-qualified-name -void Element::make_html_uppercased_qualified_name() +FlyString Element::make_html_uppercased_qualified_name() const { // This is allowed by the spec: "User agents could optimize qualified name and HTML-uppercased qualified name by storing them in internal slots." if (namespace_uri() == Namespace::HTML && document().document_type() == Document::Type::HTML) - m_html_uppercased_qualified_name = qualified_name().to_ascii_uppercase(); - else - m_html_uppercased_qualified_name = qualified_name(); + return qualified_name().to_ascii_uppercase(); + return qualified_name(); } // https://html.spec.whatwg.org/multipage/webappapis.html#queue-an-element-task @@ -3853,4 +3851,11 @@ GC::Ptr Element::attributes() const return const_cast(*this).attributes(); } +FlyString const& Element::html_uppercased_qualified_name() const +{ + if (!m_html_uppercased_qualified_name.has_value()) + m_html_uppercased_qualified_name = make_html_uppercased_qualified_name(); + return m_html_uppercased_qualified_name.value(); +} + } diff --git a/Libraries/LibWeb/DOM/Element.h b/Libraries/LibWeb/DOM/Element.h index 5bf5e5a7ac8..715599de439 100644 --- a/Libraries/LibWeb/DOM/Element.h +++ b/Libraries/LibWeb/DOM/Element.h @@ -110,7 +110,7 @@ public: virtual ~Element() override; FlyString const& qualified_name() const { return m_qualified_name.as_string(); } - FlyString const& html_uppercased_qualified_name() const { return m_html_uppercased_qualified_name; } + FlyString const& html_uppercased_qualified_name() const; virtual FlyString node_name() const final { return html_uppercased_qualified_name(); } FlyString const& local_name() const { return m_qualified_name.local_name(); } @@ -497,7 +497,7 @@ protected: CustomElementState custom_element_state() const { return m_custom_element_state; } private: - void make_html_uppercased_qualified_name(); + FlyString make_html_uppercased_qualified_name() const; void invalidate_style_after_attribute_change(FlyString const& attribute_name, Optional const& old_value, Optional const& new_value); @@ -511,7 +511,7 @@ private: bool is_auto_directionality_form_associated_element() const; QualifiedName m_qualified_name; - FlyString m_html_uppercased_qualified_name; + mutable Optional m_html_uppercased_qualified_name; GC::Ptr m_attributes; GC::Ptr m_inline_style;