8000 [:has() pseudo-class] Use unforgiving parsing for selector list · WebKit/WebKit@2eca427 · GitHub
[go: up one dir, main page]

Skip to content

Commit 2eca427

Browse files
committed
[:has() pseudo-class] Use unforgiving parsing for selector list
https://bugs.webkit.org/show_bug.cgi?id=249914 rdar://103733208 Reviewed by Antti Koivisto. Following CSSWG resolution: w3c/csswg-drafts#7676 (comment) In order to unbreak jQuery. * LayoutTests/imported/w3c/web-platform-tests/css/selectors/parsing/parse-has-expected.txt: * Source/WebCore/css/parser/CSSSelectorParser.cpp: (WebCore::CSSSelectorParser::consumeRelativeSelectorList): (WebCore::CSSSelectorParser::consumePseudo): (WebCore::CSSSelectorParser::consumeForgivingRelativeSelectorList): Deleted. * Source/WebCore/css/parser/CSSSelectorParser.h: Canonical link: https://commits.webkit.org/258712@main
1 parent f0f68a8 commit 2eca427

File tree

3 files changed

+10
-10
lines changed

3 files changed

+10
-10
lines changed

LayoutTests/imported/w3c/web-platform-tests/css/selectors/parsing/parse-has-expected.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ PASS ".a:has" should be an invalid selector
2727
PASS ".a:has b" should be an invalid selector
2828
PASS ":has()" should be an invalid selector
2929
PASS ":has(123)" should be an invalid selector
30-
FAIL ":has(.a, 123)" should be an invalid selector assert_throws_dom: ":has(.a, 123)" should throw in querySelector function "() => document.querySelector(selector)" did not throw
30+
PASS ":has(.a, 123)" should be an invalid selector
3131
PASS ":has(:is(.a, 123))" should be a valid selector
3232

Source/WebCore/css/parser/CSSSelectorParser.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,13 @@ CSSSelectorList CSSSelectorParser::consumeComplexSelectorList(CSSParserTokenRang
9696
});
9797
}
9898

99+
CSSSelectorList CSSSelectorParser::consumeRelativeSelectorList(CSSParserTokenRange& range)
100+
{
101+
return consumeSelectorList(range, [&](CSSParserTokenRange& range) {
102+
return consumeRelativeScopeSelector(range);
103+
});
104+
}
105+
99106
CSSSelectorList CSSSelectorParser::consumeNestedSelectorList(CSSParserTokenRange& range)
100107
{
101108
return consumeSelectorList(range, [&] (CSSParserTokenRange& range) {
@@ -155,13 +162,6 @@ CSSSelectorList CSSSelectorParser::consumeForgivingComplexSelectorList(CSSParser
155162
});
156163
}
157164

158-
CSSSelectorList CSSSelectorParser::consumeForgivingRelativeSelectorList(CSSParserTokenRange& range)
159-
{
160-
return consumeForgivingSelectorList(range, [&](CSSParserTokenRange& range) {
161-
return consumeRelativeScopeSelector(range);
162-
});
163-
}
164-
165165
bool CSSSelectorParser::supportsComplexSelector(CSSParserTokenRange range, const CSSParserContext& context)
166166
{
167167
range.consumeWhitespace();
@@ -830,7 +830,7 @@ std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumePseudo(CSSParserTok
830830
SetForScope resistDefaultNamespace(m_resistDefaultNamespace, true);
831831
SetForScope disallowNestedHas(m_disallowHasPseudoClass, true);
832832
auto selectorList = makeUnique<CSSSelectorList>();
833-
*selectorList = consumeForgivingRelativeSelectorList(block);
833+
*selectorList = consumeRelativeSelectorList(block);
834834
if (selectorList->isEmpty() || !block.atEnd())
835835
return nullptr;
836836
selector->setSelectorList(WTFMove(selectorList));

Source/WebCore/css/parser/CSSSelectorParser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ class CSSSelectorParser {
6464
template<typename ConsumeSelector> CSSSelectorList consumeForgivingSelectorList(CSSParserTokenRange&, ConsumeSelector&&);
6565

6666
CSSSelectorList consumeForgivingComplexSelectorList(CSSParserTokenRange&);
67-
CSSSelectorList consumeForgivingRelativeSelectorList(CSSParserTokenRange&);
6867
CSSSelectorList consumeCompoundSelectorList(CSSParserTokenRange&);
68+
CSSSelectorList consumeRelativeSelectorList(CSSParserTokenRange&);
6969

7070
std::unique_ptr<CSSParserSelector> consumeComplexSelector(CSSParserTokenRange&);
7171
std::unique_ptr<CSSParserSelector> consumeCompoundSelector(CSSParserTokenRange&);

0 commit comments

Comments
 (0)
0