| Index: Source/core/css/SelectorChecker.cpp
|
| diff --git a/Source/core/css/SelectorChecker.cpp b/Source/core/css/SelectorChecker.cpp
|
| index 4ab0cf1615c59d4c0a71cf53cb7624bec8292016..8a31b0ae2dd5025fb339a5e3b95ad6b70eee3aa1 100644
|
| --- a/Source/core/css/SelectorChecker.cpp
|
| +++ b/Source/core/css/SelectorChecker.cpp
|
| @@ -81,17 +81,13 @@ static bool matchesCustomPseudoElement(const Element* element, const CSSSelector
|
|
|
| static Element* parentElement(const SelectorChecker::SelectorCheckingContext& context)
|
| {
|
| - // If context.scope is a shadow root, we should walk up to its shadow host.
|
| - if (context.scope && context.scope == context.element->containingShadowRoot())
|
| + // - If context.scope is a shadow root, we should walk up to its shadow host.
|
| + // - If context.scope is some element in some shadow tree and querySelector initialized the context,
|
| + // e.g. shadowRoot.querySelector(':host *'),
|
| + // (a) context.element has the same treescope as context.scope, need to walk up to its shadow host.
|
| + // (b) Otherwise, should not walk up from a shadow root to a shadow host.
|
| + if (context.scope && (context.scope == context.element->containingShadowRoot() || context.scope->treeScope() == context.element->treeScope()))
|
| return context.element->parentOrShadowHostElement();
|
| -
|
| - // If context.scope is some element in some shadow tree and querySelector initialized the context,
|
| - // e.g. shadowRoot.querySelector(':host *'),
|
| - // (a) context.element has the same treescope as context.scope, need to walk up to its shadow host.
|
| - // (b) Otherwise, should not walk up from a shadow root to a shadow host.
|
| - if (context.scope && context.scope->treeScope() == context.element->treeScope())
|
| - return context.element->parentOrShadowHostElement();
|
| -
|
| return context.element->parentElement();
|
| }
|
|
|
|
|