| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "core/css/parser/CSSSelectorParser.h" | 6 #include "core/css/parser/CSSSelectorParser.h" |
| 7 | 7 |
| 8 #include "core/css/CSSSelectorList.h" | 8 #include "core/css/CSSSelectorList.h" |
| 9 #include "core/css/StyleSheetContents.h" | 9 #include "core/css/StyleSheetContents.h" |
| 10 #include "core/frame/UseCounter.h" | 10 #include "core/frame/UseCounter.h" |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 output.adoptSelectorVector(selectorList); | 122 output.adoptSelectorVector(selectorList); |
| 123 } | 123 } |
| 124 | 124 |
| 125 PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeComplexSelector(CSSParse
rTokenRange& range) | 125 PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeComplexSelector(CSSParse
rTokenRange& range) |
| 126 { | 126 { |
| 127 OwnPtr<CSSParserSelector> selector = consumeCompoundSelector(range); | 127 OwnPtr<CSSParserSelector> selector = consumeCompoundSelector(range); |
| 128 if (!selector) | 128 if (!selector) |
| 129 return nullptr; | 129 return nullptr; |
| 130 while (CSSSelector::Relation combinator = consumeCombinator(range)) { | 130 while (CSSSelector::Relation combinator = consumeCombinator(range)) { |
| 131 OwnPtr<CSSParserSelector> nextSelector = consumeCompoundSelector(range); | 131 OwnPtr<CSSParserSelector> nextSelector = consumeCompoundSelector(range); |
| 132 if (!nextSelector) | 132 if (!nextSelector) { |
| 133 return combinator == CSSSelector::Descendant ? selector.release() :
nullptr; | 133 if (combinator != CSSSelector::Descendant) |
| 134 return nullptr; |
| 135 break; |
| 136 } |
| 134 CSSParserSelector* end = nextSelector.get(); | 137 CSSParserSelector* end = nextSelector.get(); |
| 135 while (end->tagHistory()) | 138 while (end->tagHistory()) |
| 136 end = end->tagHistory(); | 139 end = end->tagHistory(); |
| 137 end->setRelation(combinator); | 140 end->setRelation(combinator); |
| 138 if (selector->pseudoType() == CSSSelector::PseudoContent) | 141 if (selector->pseudoType() == CSSSelector::PseudoContent) |
| 139 end->setRelationIsAffectedByPseudoContent(); | 142 end->setRelationIsAffectedByPseudoContent(); |
| 140 end->setTagHistory(selector.release()); | 143 end->setTagHistory(selector.release()); |
| 141 | 144 |
| 142 selector = nextSelector.release(); | 145 selector = nextSelector.release(); |
| 143 } | 146 } |
| 144 | 147 |
| 148 selector->updateLinkMatchType(); |
| 145 return selector.release(); | 149 return selector.release(); |
| 146 } | 150 } |
| 147 | 151 |
| 148 PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector(CSSPars
erTokenRange& range) | 152 PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector(CSSPars
erTokenRange& range) |
| 149 { | 153 { |
| 150 OwnPtr<CSSParserSelector> compoundSelector; | 154 OwnPtr<CSSParserSelector> compoundSelector; |
| 151 | 155 |
| 152 AtomicString namespacePrefix; | 156 AtomicString namespacePrefix; |
| 153 AtomicString elementName; | 157 AtomicString elementName; |
| 154 bool hasNamespace; | 158 bool hasNamespace; |
| (...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 compoundSelector->insertTagHistory(CSSSelector::SubSelector, simpleSelec
tor, relation); | 666 compoundSelector->insertTagHistory(CSSSelector::SubSelector, simpleSelec
tor, relation); |
| 663 return compoundSelector; | 667 return compoundSelector; |
| 664 } | 668 } |
| 665 | 669 |
| 666 // All other simple selectors are added to the end of the compound. | 670 // All other simple selectors are added to the end of the compound. |
| 667 compoundSelector->appendTagHistory(CSSSelector::SubSelector, simpleSelector)
; | 671 compoundSelector->appendTagHistory(CSSSelector::SubSelector, simpleSelector)
; |
| 668 return compoundSelector; | 672 return compoundSelector; |
| 669 } | 673 } |
| 670 | 674 |
| 671 } // namespace blink | 675 } // namespace blink |
| OLD | NEW |