| Index: third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp
|
| diff --git a/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp
|
| index 6b8666c9a652d7051fa2fcda9017de5d41d25fbe..4d12e5759fc253124c19cf35e982edffc3d22c86 100644
|
| --- a/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp
|
| +++ b/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp
|
| @@ -606,13 +606,32 @@ CSSSelector::RelationType CSSSelectorParser::consumeCombinator(
|
|
|
| UChar delimiter = range.peek().delimiter();
|
|
|
| - if (delimiter == '+' || delimiter == '~' || delimiter == '>') {
|
| + if (delimiter == '+' || delimiter == '~') {
|
| range.consumeIncludingWhitespace();
|
| if (delimiter == '+')
|
| return CSSSelector::DirectAdjacent;
|
| - if (delimiter == '~')
|
| - return CSSSelector::IndirectAdjacent;
|
| - return CSSSelector::Child;
|
| + return CSSSelector::IndirectAdjacent;
|
| + }
|
| +
|
| + if (delimiter == '>') {
|
| + if (!RuntimeEnabledFeatures::shadowPiercingDescendantCombinatorEnabled() ||
|
| + m_context.isDynamicProfile() ||
|
| + range.peek(1).type() != DelimiterToken ||
|
| + range.peek(1).delimiter() != '>') {
|
| + range.consumeIncludingWhitespace();
|
| + return CSSSelector::Child;
|
| + }
|
| + range.consume();
|
| +
|
| + // Check the 3rd '>'.
|
| + if (range.peek(1).type() != DelimiterToken ||
|
| + range.peek(1).delimiter() != '>') {
|
| + // TODO: Treat '>>' as a CSSSelector::Descendant here.
|
| + return CSSSelector::Child;
|
| + }
|
| + range.consume();
|
| + range.consumeIncludingWhitespace();
|
| + return CSSSelector::ShadowPiercingDescendant;
|
| }
|
|
|
| // Match /deep/
|
|
|