mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 12:48:10 +00:00
LibWeb: Support obsolete but required -webkit- CSS parsing quirk
As outlined in: https://www.w3.org/TR/selectors-4/#compat We now do not treat unknown webkit pseudo-elements as invalid at parse time, and also support serializing these elements. Fixes: #21959
This commit is contained in:
parent
83758d4cdd
commit
ed97946975
9 changed files with 76 additions and 6 deletions
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include <AK/Debug.h>
|
||||
#include <LibWeb/CSS/Parser/Parser.h>
|
||||
#include <LibWeb/Infra/Strings.h>
|
||||
|
||||
namespace Web::CSS::Parser {
|
||||
|
||||
|
@ -361,6 +362,19 @@ Parser::ParseErrorOr<Selector::SimpleSelector> Parser::parse_pseudo_simple_selec
|
|||
};
|
||||
}
|
||||
|
||||
// https://www.w3.org/TR/selectors-4/#compat
|
||||
// All other pseudo-elements whose names begin with the string “-webkit-” (matched ASCII case-insensitively)
|
||||
// and that are not functional notations must be treated as valid at parse time. (That is, ::-webkit-asdf is
|
||||
// valid at parse time, but ::-webkit-jkl() is not.) If they’re not otherwise recognized and supported, they
|
||||
// must be treated as matching nothing, and are unknown -webkit- pseudo-elements.
|
||||
if (pseudo_name.starts_with_bytes("-webkit-"sv, CaseSensitivity::CaseInsensitive)) {
|
||||
return Selector::SimpleSelector {
|
||||
.type = Selector::SimpleSelector::Type::PseudoElement,
|
||||
// Unknown -webkit- pseudo-elements must be serialized in ASCII lowercase.
|
||||
.value = Selector::PseudoElement { Selector::PseudoElement::Type::UnknownWebKit, MUST(Infra::to_ascii_lowercase(pseudo_name.to_string())) },
|
||||
};
|
||||
}
|
||||
|
||||
if (has_ignored_vendor_prefix(pseudo_name))
|
||||
return ParseError::IncludesIgnoredVendorPrefix;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue