LibWeb: Handle empty string namespaces in selector matching

Per the CSS Namespaces spec, an empty string declared in an
@namespace rule represents no namespace.

Fixes WPT:
- css/css-namespaces/prefix-002.xml
- css/css-namespaces/prefix-003.xml
This commit is contained in:
mikiubo 2025-11-13 21:01:14 +01:00 committed by Sam Atkins
parent 6951ef4ee3
commit 88e19ebc11
Notes: github-actions[bot] 2025-11-14 08:18:27 +00:00
4 changed files with 50 additions and 0 deletions

View file

@ -1085,6 +1085,13 @@ static ALWAYS_INLINE bool matches_namespace(
return false;
auto selector_namespace = style_sheet_for_rule->namespace_uri(qualified_name.namespace_);
// https://www.w3.org/TR/css-namespaces-3/#terminology
// In CSS Namespaces a namespace name consisting of the empty string is taken to represent the null namespace
// or lack of a namespace.
if (selector_namespace.has_value() && selector_namespace.value().is_empty())
return !element.namespace_uri().has_value();
return selector_namespace.has_value() && selector_namespace.value() == element.namespace_uri();
}
VERIFY_NOT_REACHED();