Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(342)

Unified Diff: Source/core/css/SelectorChecker.cpp

Issue 1270313002: Handle closed mode shadow for /deep/ and ::shadow selectors (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: add a layout test for 2 /deep/s Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698