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

Side by Side Diff: Source/core/css/SelectorChecker.cpp

Issue 138023007: Renamed :host to :ancestor and made :host to match only shadow host. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
(...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 return true; 841 return true;
842 break; 842 break;
843 } 843 }
844 844
845 case CSSSelector::PseudoUnresolved: 845 case CSSSelector::PseudoUnresolved:
846 if (element.isUnresolvedCustomElement()) 846 if (element.isUnresolvedCustomElement())
847 return true; 847 return true;
848 break; 848 break;
849 849
850 case CSSSelector::PseudoHost: 850 case CSSSelector::PseudoHost:
851 case CSSSelector::PseudoAncestor:
851 { 852 {
852 // :host only matches a shadow host when :host is in a shadow tr ee of the shadow host. 853 // :host only matches a shadow host when :host is in a shadow tr ee of the shadow host.
853 if (!context.scope || !(context.behaviorAtBoundary & ScopeIsShad owHost) || context.scope != element) 854 if (!context.scope || !(context.behaviorAtBoundary & ScopeIsShad owHost) || context.scope != element)
854 return false; 855 return false;
855 ASSERT(element.shadow()); 856 ASSERT(element.shadow());
856 857
857 // For empty parameter case, i.e. just :host or :host(). 858 // For empty parameter case, i.e. just :host or :host().
858 if (!selector->selectorList()) // Use *'s specificity. So just 0 . 859 if (!selector->selectorList()) // Use *'s specificity. So just 0 .
859 return true; 860 return true;
860 861
861 SelectorCheckingContext subContext(context); 862 SelectorCheckingContext subContext(context);
862 subContext.isSubSelector = true; 863 subContext.isSubSelector = true;
863 864
864 bool matched = false; 865 bool matched = false;
865 unsigned maxSpecificity = 0; 866 unsigned maxSpecificity = 0;
866 867
867 // If one of simple selectors matches an element, returns Select orMatches. Just "OR". 868 // If one of simple selectors matches an element, returns Select orMatches. Just "OR".
868 for (subContext.selector = selector->selectorList()->first(); su bContext.selector; subContext.selector = CSSSelectorList::next(subContext.select or)) { 869 for (subContext.selector = selector->selectorList()->first(); su bContext.selector; subContext.selector = CSSSelectorList::next(subContext.select or)) {
869 subContext.behaviorAtBoundary = ScopeIsShadowHostInPseudoHos tParameter; 870 subContext.behaviorAtBoundary = ScopeIsShadowHostInPseudoHos tParameter;
870 subContext.scope = context.scope; 871 subContext.scope = context.scope;
871 // Use NodeRenderingTraversal to traverse a composed ancesto r list of a given element. 872 // Use NodeRenderingTraversal to traverse a composed ancesto r list of a given element.
872 for (Element* nextElement = &element; nextElement; nextEleme nt = NodeRenderingTraversal::parentElement(nextElement)) { 873 Element* nextElement = &element;
874 do {
873 MatchResult subResult; 875 MatchResult subResult;
874 subContext.element = nextElement; 876 subContext.element = nextElement;
875 if (match(subContext, siblingTraversalStrategy, &subResu lt) == SelectorMatches) { 877 if (match(subContext, siblingTraversalStrategy, &subResu lt) == SelectorMatches) {
876 matched = true; 878 matched = true;
877 // Consider div:host(div:host(div:host(div:host...)) ). 879 // Consider div:host(div:host(div:host(div:host...)) ).
878 maxSpecificity = std::max(maxSpecificity, subContext .selector->specificity() + subResult.specificity); 880 maxSpecificity = std::max(maxSpecificity, subContext .selector->specificity() + subResult.specificity);
879 break; 881 break;
880 } 882 }
881 subContext.behaviorAtBoundary = DoesNotCrossBoundary; 883 subContext.behaviorAtBoundary = DoesNotCrossBoundary;
882 subContext.scope = 0; 884 subContext.scope = 0;
883 } 885
886 if (selector->pseudoType() == CSSSelector::PseudoHost)
887 break;
888
889 nextElement = NodeRenderingTraversal::parentElement(next Element);
890 } while (nextElement);
884 } 891 }
885 if (matched) { 892 if (matched) {
886 if (specificity) 893 if (specificity)
887 *specificity = maxSpecificity; 894 *specificity = maxSpecificity;
888 return true; 895 return true;
889 } 896 }
890 } 897 }
891 break; 898 break;
892 899
893 case CSSSelector::PseudoHorizontal: 900 case CSSSelector::PseudoHorizontal:
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 return element.focused() && isFrameFocused(element); 1068 return element.focused() && isFrameFocused(element);
1062 } 1069 }
1063 1070
1064 template 1071 template
1065 SelectorChecker::Match SelectorChecker::match(const SelectorCheckingContext&, co nst DOMSiblingTraversalStrategy&, MatchResult*) const; 1072 SelectorChecker::Match SelectorChecker::match(const SelectorCheckingContext&, co nst DOMSiblingTraversalStrategy&, MatchResult*) const;
1066 1073
1067 template 1074 template
1068 SelectorChecker::Match SelectorChecker::match(const SelectorCheckingContext&, co nst ShadowDOMSiblingTraversalStrategy&, MatchResult*) const; 1075 SelectorChecker::Match SelectorChecker::match(const SelectorCheckingContext&, co nst ShadowDOMSiblingTraversalStrategy&, MatchResult*) const;
1069 1076
1070 } 1077 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698