| 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 "core/css/parser/CSSParserImpl.h" | 5 #include "core/css/parser/CSSParserImpl.h" |
| 6 | 6 |
| 7 #include "core/css/CSSCustomIdentValue.h" | 7 #include "core/css/CSSCustomIdentValue.h" |
| 8 #include "core/css/CSSCustomPropertyDeclaration.h" | 8 #include "core/css/CSSCustomPropertyDeclaration.h" |
| 9 #include "core/css/CSSKeyframesRule.h" | 9 #include "core/css/CSSKeyframesRule.h" |
| 10 #include "core/css/CSSStyleSheet.h" | 10 #include "core/css/CSSStyleSheet.h" |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 return CSSSelectorList(); | 271 return CSSSelectorList(); |
| 272 } | 272 } |
| 273 if (!typeSelector.isNull()) { | 273 if (!typeSelector.isNull()) { |
| 274 selector->prependTagSelector(QualifiedName( | 274 selector->prependTagSelector(QualifiedName( |
| 275 nullAtom, typeSelector, styleSheet->defaultNamespace())); | 275 nullAtom, typeSelector, styleSheet->defaultNamespace())); |
| 276 } | 276 } |
| 277 } | 277 } |
| 278 | 278 |
| 279 selector->setForPage(); | 279 selector->setForPage(); |
| 280 Vector<std::unique_ptr<CSSParserSelector>> selectorVector; | 280 Vector<std::unique_ptr<CSSParserSelector>> selectorVector; |
| 281 selectorVector.append(std::move(selector)); | 281 selectorVector.push_back(std::move(selector)); |
| 282 CSSSelectorList selectorList = | 282 CSSSelectorList selectorList = |
| 283 CSSSelectorList::adoptSelectorVector(selectorVector); | 283 CSSSelectorList::adoptSelectorVector(selectorVector); |
| 284 return selectorList; | 284 return selectorList; |
| 285 } | 285 } |
| 286 | 286 |
| 287 ImmutableStylePropertySet* CSSParserImpl::parseCustomPropertySet( | 287 ImmutableStylePropertySet* CSSParserImpl::parseCustomPropertySet( |
| 288 CSSParserTokenRange range) { | 288 CSSParserTokenRange range) { |
| 289 range.consumeWhitespace(); | 289 range.consumeWhitespace(); |
| 290 if (range.peek().type() != LeftBraceToken) | 290 if (range.peek().type() != LeftBraceToken) |
| 291 return nullptr; | 291 return nullptr; |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 575 m_observerWrapper->observer().endRuleHeader( | 575 m_observerWrapper->observer().endRuleHeader( |
| 576 m_observerWrapper->endOffset(prelude)); | 576 m_observerWrapper->endOffset(prelude)); |
| 577 m_observerWrapper->observer().startRuleBody( | 577 m_observerWrapper->observer().startRuleBody( |
| 578 m_observerWrapper->previousTokenStartOffset(block)); | 578 m_observerWrapper->previousTokenStartOffset(block)); |
| 579 } | 579 } |
| 580 | 580 |
| 581 if (m_styleSheet) | 581 if (m_styleSheet) |
| 582 m_styleSheet->setHasMediaQueries(); | 582 m_styleSheet->setHasMediaQueries(); |
| 583 | 583 |
| 584 consumeRuleList(block, RegularRuleList, | 584 consumeRuleList(block, RegularRuleList, |
| 585 [&rules](StyleRuleBase* rule) { rules.append(rule); }); | 585 [&rules](StyleRuleBase* rule) { rules.push_back(rule); }); |
| 586 | 586 |
| 587 if (m_observerWrapper) | 587 if (m_observerWrapper) |
| 588 m_observerWrapper->observer().endRuleBody( | 588 m_observerWrapper->observer().endRuleBody( |
| 589 m_observerWrapper->endOffset(block)); | 589 m_observerWrapper->endOffset(block)); |
| 590 | 590 |
| 591 return StyleRuleMedia::create(MediaQueryParser::parseMediaQuerySet(prelude), | 591 return StyleRuleMedia::create(MediaQueryParser::parseMediaQuerySet(prelude), |
| 592 rules); | 592 rules); |
| 593 } | 593 } |
| 594 | 594 |
| 595 StyleRuleSupports* CSSParserImpl::consumeSupportsRule( | 595 StyleRuleSupports* CSSParserImpl::consumeSupportsRule( |
| 596 CSSParserTokenRange prelude, | 596 CSSParserTokenRange prelude, |
| 597 CSSParserTokenRange block) { | 597 CSSParserTokenRange block) { |
| 598 CSSSupportsParser::SupportsResult supported = | 598 CSSSupportsParser::SupportsResult supported = |
| 599 CSSSupportsParser::supportsCondition(prelude, *this); | 599 CSSSupportsParser::supportsCondition(prelude, *this); |
| 600 if (supported == CSSSupportsParser::Invalid) | 600 if (supported == CSSSupportsParser::Invalid) |
| 601 return nullptr; // Parse error, invalid @supports condition | 601 return nullptr; // Parse error, invalid @supports condition |
| 602 | 602 |
| 603 if (m_observerWrapper) { | 603 if (m_observerWrapper) { |
| 604 m_observerWrapper->observer().startRuleHeader( | 604 m_observerWrapper->observer().startRuleHeader( |
| 605 StyleRule::Supports, m_observerWrapper->startOffset(prelude)); | 605 StyleRule::Supports, m_observerWrapper->startOffset(prelude)); |
| 606 m_observerWrapper->observer().endRuleHeader( | 606 m_observerWrapper->observer().endRuleHeader( |
| 607 m_observerWrapper->endOffset(prelude)); | 607 m_observerWrapper->endOffset(prelude)); |
| 608 m_observerWrapper->observer().startRuleBody( | 608 m_observerWrapper->observer().startRuleBody( |
| 609 m_observerWrapper->previousTokenStartOffset(block)); | 609 m_observerWrapper->previousTokenStartOffset(block)); |
| 610 } | 610 } |
| 611 | 611 |
| 612 HeapVector<Member<StyleRuleBase>> rules; | 612 HeapVector<Member<StyleRuleBase>> rules; |
| 613 consumeRuleList(block, RegularRuleList, | 613 consumeRuleList(block, RegularRuleList, |
| 614 [&rules](StyleRuleBase* rule) { rules.append(rule); }); | 614 [&rules](StyleRuleBase* rule) { rules.push_back(rule); }); |
| 615 | 615 |
| 616 if (m_observerWrapper) | 616 if (m_observerWrapper) |
| 617 m_observerWrapper->observer().endRuleBody( | 617 m_observerWrapper->observer().endRuleBody( |
| 618 m_observerWrapper->endOffset(block)); | 618 m_observerWrapper->endOffset(block)); |
| 619 | 619 |
| 620 return StyleRuleSupports::create(prelude.serialize().stripWhiteSpace(), | 620 return StyleRuleSupports::create(prelude.serialize().stripWhiteSpace(), |
| 621 supported, rules); | 621 supported, rules); |
| 622 } | 622 } |
| 623 | 623 |
| 624 StyleRuleViewport* CSSParserImpl::consumeViewportRule( | 624 StyleRuleViewport* CSSParserImpl::consumeViewportRule( |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 std::move(selectorList), | 733 std::move(selectorList), |
| 734 createStylePropertySet(m_parsedProperties, m_context.mode())); | 734 createStylePropertySet(m_parsedProperties, m_context.mode())); |
| 735 } | 735 } |
| 736 | 736 |
| 737 void CSSParserImpl::consumeApplyRule(CSSParserTokenRange prelude) { | 737 void CSSParserImpl::consumeApplyRule(CSSParserTokenRange prelude) { |
| 738 ASSERT(RuntimeEnabledFeatures::cssApplyAtRulesEnabled()); | 738 ASSERT(RuntimeEnabledFeatures::cssApplyAtRulesEnabled()); |
| 739 | 739 |
| 740 const CSSParserToken& ident = prelude.consumeIncludingWhitespace(); | 740 const CSSParserToken& ident = prelude.consumeIncludingWhitespace(); |
| 741 if (!prelude.atEnd() || !CSSVariableParser::isValidVariableName(ident)) | 741 if (!prelude.atEnd() || !CSSVariableParser::isValidVariableName(ident)) |
| 742 return; // Parse error, expected a single custom property name | 742 return; // Parse error, expected a single custom property name |
| 743 m_parsedProperties.append(CSSProperty( | 743 m_parsedProperties.push_back(CSSProperty( |
| 744 CSSPropertyApplyAtRule, | 744 CSSPropertyApplyAtRule, |
| 745 *CSSCustomIdentValue::create(ident.value().toAtomicString()))); | 745 *CSSCustomIdentValue::create(ident.value().toAtomicString()))); |
| 746 } | 746 } |
| 747 | 747 |
| 748 StyleRuleKeyframe* CSSParserImpl::consumeKeyframeStyleRule( | 748 StyleRuleKeyframe* CSSParserImpl::consumeKeyframeStyleRule( |
| 749 CSSParserTokenRange prelude, | 749 CSSParserTokenRange prelude, |
| 750 CSSParserTokenRange block) { | 750 CSSParserTokenRange block) { |
| 751 std::unique_ptr<Vector<double>> keyList = consumeKeyframeKeyList(prelude); | 751 std::unique_ptr<Vector<double>> keyList = consumeKeyframeKeyList(prelude); |
| 752 if (!keyList) | 752 if (!keyList) |
| 753 return nullptr; | 753 return nullptr; |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 927 } | 927 } |
| 928 } | 928 } |
| 929 | 929 |
| 930 void CSSParserImpl::consumeVariableValue(CSSParserTokenRange range, | 930 void CSSParserImpl::consumeVariableValue(CSSParserTokenRange range, |
| 931 const AtomicString& variableName, | 931 const AtomicString& variableName, |
| 932 bool important, | 932 bool important, |
| 933 bool isAnimationTainted) { | 933 bool isAnimationTainted) { |
| 934 if (CSSCustomPropertyDeclaration* value = | 934 if (CSSCustomPropertyDeclaration* value = |
| 935 CSSVariableParser::parseDeclarationValue(variableName, range, | 935 CSSVariableParser::parseDeclarationValue(variableName, range, |
| 936 isAnimationTainted)) | 936 isAnimationTainted)) |
| 937 m_parsedProperties.append( | 937 m_parsedProperties.push_back( |
| 938 CSSProperty(CSSPropertyVariable, *value, important)); | 938 CSSProperty(CSSPropertyVariable, *value, important)); |
| 939 } | 939 } |
| 940 | 940 |
| 941 void CSSParserImpl::consumeDeclarationValue(CSSParserTokenRange range, | 941 void CSSParserImpl::consumeDeclarationValue(CSSParserTokenRange range, |
| 942 CSSPropertyID unresolvedProperty, | 942 CSSPropertyID unresolvedProperty, |
| 943 bool important, | 943 bool important, |
| 944 StyleRule::RuleType ruleType) { | 944 StyleRule::RuleType ruleType) { |
| 945 CSSPropertyParser::parseValue(unresolvedProperty, important, range, m_context, | 945 CSSPropertyParser::parseValue(unresolvedProperty, important, range, m_context, |
| 946 m_parsedProperties, ruleType); | 946 m_parsedProperties, ruleType); |
| 947 } | 947 } |
| 948 | 948 |
| 949 std::unique_ptr<Vector<double>> CSSParserImpl::consumeKeyframeKeyList( | 949 std::unique_ptr<Vector<double>> CSSParserImpl::consumeKeyframeKeyList( |
| 950 CSSParserTokenRange range) { | 950 CSSParserTokenRange range) { |
| 951 std::unique_ptr<Vector<double>> result = WTF::wrapUnique(new Vector<double>); | 951 std::unique_ptr<Vector<double>> result = WTF::wrapUnique(new Vector<double>); |
| 952 while (true) { | 952 while (true) { |
| 953 range.consumeWhitespace(); | 953 range.consumeWhitespace(); |
| 954 const CSSParserToken& token = range.consumeIncludingWhitespace(); | 954 const CSSParserToken& token = range.consumeIncludingWhitespace(); |
| 955 if (token.type() == PercentageToken && token.numericValue() >= 0 && | 955 if (token.type() == PercentageToken && token.numericValue() >= 0 && |
| 956 token.numericValue() <= 100) | 956 token.numericValue() <= 100) |
| 957 result->append(token.numericValue() / 100); | 957 result->push_back(token.numericValue() / 100); |
| 958 else if (token.type() == IdentToken && | 958 else if (token.type() == IdentToken && |
| 959 equalIgnoringASCIICase(token.value(), "from")) | 959 equalIgnoringASCIICase(token.value(), "from")) |
| 960 result->append(0); | 960 result->push_back(0); |
| 961 else if (token.type() == IdentToken && | 961 else if (token.type() == IdentToken && |
| 962 equalIgnoringASCIICase(token.value(), "to")) | 962 equalIgnoringASCIICase(token.value(), "to")) |
| 963 result->append(1); | 963 result->push_back(1); |
| 964 else | 964 else |
| 965 return nullptr; // Parser error, invalid value in keyframe selector | 965 return nullptr; // Parser error, invalid value in keyframe selector |
| 966 if (range.atEnd()) | 966 if (range.atEnd()) |
| 967 return result; | 967 return result; |
| 968 if (range.consume().type() != CommaToken) | 968 if (range.consume().type() != CommaToken) |
| 969 return nullptr; // Parser error | 969 return nullptr; // Parser error |
| 970 } | 970 } |
| 971 } | 971 } |
| 972 | 972 |
| 973 } // namespace blink | 973 } // namespace blink |
| OLD | NEW |