From 96fc1741b5218cea816f79ade686fdcd63efaffc Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sat, 11 Nov 2023 09:27:43 +1300 Subject: [PATCH] LibWeb: Return an Optional from HTMLToken::attribute Move away from using a nullable StringView. --- Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp | 9 +++------ Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.h | 4 ++-- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp b/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp index 5f2168f098..7d86153fb7 100644 --- a/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp +++ b/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp @@ -665,10 +665,7 @@ JS::NonnullGCPtr HTMLParser::create_element_for(HTMLToken const& t auto const& local_name = token.tag_name(); // 5. Let is be the value of the "is" attribute in the given token, if such an attribute exists, or null otherwise. - auto is_value_deprecated_string = token.attribute(AttributeNames::is); - Optional is_value; - if (!is_value_deprecated_string.is_null()) - is_value = String::from_utf8(is_value_deprecated_string).release_value_but_fixme_should_propagate_errors(); + auto is_value = token.attribute(AttributeNames::is); // 6. Let definition be the result of looking up a custom element definition given document, given namespace, local name, and is. auto definition = document->lookup_custom_element_definition(namespace_, local_name, is_value); @@ -2286,7 +2283,7 @@ void HTMLParser::handle_in_body(HTMLToken& token) // If the token does not have an attribute with the name "type", or if it does, but that attribute's value is not an ASCII case-insensitive match for the string "hidden", then: set the frameset-ok flag to "not ok". auto type_attribute = token.attribute(HTML::AttributeNames::type); - if (type_attribute.is_null() || !type_attribute.equals_ignoring_ascii_case("hidden"sv)) { + if (!type_attribute.has_value() || !type_attribute->equals_ignoring_ascii_case("hidden"sv)) { m_frameset_ok = false; } return; @@ -3285,7 +3282,7 @@ void HTMLParser::handle_in_table(HTMLToken& token) // or if it does, but that attribute's value is not an ASCII case-insensitive match for the string "hidden", // then: act as described in the "anything else" entry below. auto type_attribute = token.attribute(HTML::AttributeNames::type); - if (type_attribute.is_null() || !type_attribute.equals_ignoring_ascii_case("hidden"sv)) { + if (!type_attribute.has_value() || !type_attribute->equals_ignoring_ascii_case("hidden"sv)) { goto AnythingElse; } diff --git a/Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.h b/Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.h index 2b1c23779e..07341831b2 100644 --- a/Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.h +++ b/Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.h @@ -245,7 +245,7 @@ public: } } - StringView attribute(FlyString const& attribute_name) const + Optional attribute(FlyString const& attribute_name) const { if (auto result = raw_attribute(attribute_name); result.has_value()) return result->value; @@ -268,7 +268,7 @@ public: bool has_attribute(FlyString const& attribute_name) const { - return !attribute(attribute_name).is_null(); + return attribute(attribute_name).has_value(); } void adjust_tag_name(FlyString const& old_name, FlyString const& new_name)