Chromium Code Reviews| Index: Source/core/css/SelectorChecker.cpp |
| diff --git a/Source/core/css/SelectorChecker.cpp b/Source/core/css/SelectorChecker.cpp |
| index 45134f9de9d78959dbf1e6d710c414dcf91105de..e439e4743b447c03fa756386632d0b13bd6dfa05 100644 |
| --- a/Source/core/css/SelectorChecker.cpp |
| +++ b/Source/core/css/SelectorChecker.cpp |
| @@ -432,12 +432,23 @@ SelectorChecker::Match SelectorChecker::matchForRelation(const SelectorCheckingC |
| nextContext.isSubSelector = false; |
| nextContext.inRightmostCompound = false; |
| - for (nextContext.element = context.element->parentOrShadowHostElement(); nextContext.element; nextContext.element = nextContext.element->parentOrShadowHostElement()) { |
| + |
| + Element* element = context.element; |
|
hayato
2015/08/20 03:47:11
I'm afraid that it would be difficult to read what
kochi
2015/08/20 06:04:26
Done.
|
| + while (true) { |
| + if (element->parentNode() && element->parentNode()->isShadowRoot()) { |
| + if (!toShadowRoot(element->parentNode())->isOpen()) |
| + break; |
| + } |
| + element = element->parentOrShadowHostElement(); |
| + if (!element) |
| + break; |
| + |
| + nextContext.element = element; |
| Match match = matchSelector(nextContext, result); |
| if (match == SelectorMatches || match == SelectorFailsCompletely) |
| return match; |
| if (nextSelectorExceedsScope(nextContext)) |
| - return SelectorFailsCompletely; |
| + break; |
| } |
| return SelectorFailsCompletely; |
| } |