mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
style: Disallow :has selector nesting
Unlike the `ParseRelative` flag, which turns on relative selector parsing for that parsing level only, the newly added `DISALLOW_RELATIVE_SELECTOR` flag propagates through nested parsing calls. Differential Revision: https://phabricator.services.mozilla.com/D176807
This commit is contained in:
parent
9c7e0930c3
commit
9c58f0c635
1 changed files with 12 additions and 1 deletions
|
@ -119,6 +119,9 @@ bitflags! {
|
||||||
|
|
||||||
/// Whether we explicitly disallow pseudo-element-like things.
|
/// Whether we explicitly disallow pseudo-element-like things.
|
||||||
const DISALLOW_PSEUDOS = 1 << 6;
|
const DISALLOW_PSEUDOS = 1 << 6;
|
||||||
|
|
||||||
|
/// Whether we explicitly disallow relative selectors (i.e. `:has()`).
|
||||||
|
const DISALLOW_RELATIVE_SELECTOR = 1 << 7;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2942,12 +2945,20 @@ where
|
||||||
Impl: SelectorImpl,
|
Impl: SelectorImpl,
|
||||||
{
|
{
|
||||||
debug_assert!(parser.parse_has());
|
debug_assert!(parser.parse_has());
|
||||||
|
if state.intersects(SelectorParsingState::DISALLOW_RELATIVE_SELECTOR) {
|
||||||
|
return Err(input.new_custom_error(SelectorParseErrorKind::InvalidState));
|
||||||
|
}
|
||||||
|
// Nested `:has()` is disallowed, mark it as such.
|
||||||
|
// Note: The spec defines ":has-allowed pseudo-element," but there's no
|
||||||
|
// pseudo-element defined as such at the moment.
|
||||||
|
// https://w3c.github.io/csswg-drafts/selectors-4/#has-allowed-pseudo-element
|
||||||
let inner = SelectorList::parse_with_state(
|
let inner = SelectorList::parse_with_state(
|
||||||
parser,
|
parser,
|
||||||
input,
|
input,
|
||||||
state |
|
state |
|
||||||
SelectorParsingState::SKIP_DEFAULT_NAMESPACE |
|
SelectorParsingState::SKIP_DEFAULT_NAMESPACE |
|
||||||
SelectorParsingState::DISALLOW_PSEUDOS,
|
SelectorParsingState::DISALLOW_PSEUDOS |
|
||||||
|
SelectorParsingState::DISALLOW_RELATIVE_SELECTOR,
|
||||||
ForgivingParsing::No,
|
ForgivingParsing::No,
|
||||||
ParseRelative::Yes,
|
ParseRelative::Yes,
|
||||||
)?;
|
)?;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue