| 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 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 "tokenCount", scope.tokenCount(), | 183 "tokenCount", scope.tokenCount(), |
| 184 "length", string.length()); | 184 "length", string.length()); |
| 185 } | 185 } |
| 186 | 186 |
| 187 CSSSelectorList CSSParserImpl::parsePageSelector(CSSParserTokenRange range, Styl
eSheetContents* styleSheet) | 187 CSSSelectorList CSSParserImpl::parsePageSelector(CSSParserTokenRange range, Styl
eSheetContents* styleSheet) |
| 188 { | 188 { |
| 189 // We only support a small subset of the css-page spec. | 189 // We only support a small subset of the css-page spec. |
| 190 range.consumeWhitespace(); | 190 range.consumeWhitespace(); |
| 191 AtomicString typeSelector; | 191 AtomicString typeSelector; |
| 192 if (range.peek().type() == IdentToken) | 192 if (range.peek().type() == IdentToken) |
| 193 typeSelector = AtomicString(range.consume().value().toString()); | 193 typeSelector = range.consume().value().toAtomicString(); |
| 194 | 194 |
| 195 AtomicString pseudo; | 195 AtomicString pseudo; |
| 196 if (range.peek().type() == ColonToken) { | 196 if (range.peek().type() == ColonToken) { |
| 197 range.consume(); | 197 range.consume(); |
| 198 if (range.peek().type() != IdentToken) | 198 if (range.peek().type() != IdentToken) |
| 199 return CSSSelectorList(); | 199 return CSSSelectorList(); |
| 200 pseudo = AtomicString(range.consume().value().toString()); | 200 pseudo = range.consume().value().toAtomicString(); |
| 201 } | 201 } |
| 202 | 202 |
| 203 range.consumeWhitespace(); | 203 range.consumeWhitespace(); |
| 204 if (!range.atEnd()) | 204 if (!range.atEnd()) |
| 205 return CSSSelectorList(); // Parse error; extra tokens in @page selector | 205 return CSSSelectorList(); // Parse error; extra tokens in @page selector |
| 206 | 206 |
| 207 OwnPtr<CSSParserSelector> selector; | 207 OwnPtr<CSSParserSelector> selector; |
| 208 if (!typeSelector.isNull() && pseudo.isNull()) { | 208 if (!typeSelector.isNull() && pseudo.isNull()) { |
| 209 selector = CSSParserSelector::create(QualifiedName(nullAtom, typeSelecto
r, styleSheet->defaultNamespace())); | 209 selector = CSSParserSelector::create(QualifiedName(nullAtom, typeSelecto
r, styleSheet->defaultNamespace())); |
| 210 } else { | 210 } else { |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 ASSERT_NOT_REACHED(); | 429 ASSERT_NOT_REACHED(); |
| 430 return nullptr; | 430 return nullptr; |
| 431 } | 431 } |
| 432 | 432 |
| 433 // This may still consume tokens if it fails | 433 // This may still consume tokens if it fails |
| 434 static AtomicString consumeStringOrURI(CSSParserTokenRange& range) | 434 static AtomicString consumeStringOrURI(CSSParserTokenRange& range) |
| 435 { | 435 { |
| 436 const CSSParserToken& token = range.peek(); | 436 const CSSParserToken& token = range.peek(); |
| 437 | 437 |
| 438 if (token.type() == StringToken || token.type() == UrlToken) | 438 if (token.type() == StringToken || token.type() == UrlToken) |
| 439 return AtomicString(range.consumeIncludingWhitespace().value().toString(
)); | 439 return range.consumeIncludingWhitespace().value().toAtomicString(); |
| 440 | 440 |
| 441 if (token.type() != FunctionToken || !token.valueEqualsIgnoringASCIICase("ur
l")) | 441 if (token.type() != FunctionToken || !token.valueEqualsIgnoringASCIICase("ur
l")) |
| 442 return AtomicString(); | 442 return AtomicString(); |
| 443 | 443 |
| 444 CSSParserTokenRange contents = range.consumeBlock(); | 444 CSSParserTokenRange contents = range.consumeBlock(); |
| 445 const CSSParserToken& uri = contents.consumeIncludingWhitespace(); | 445 const CSSParserToken& uri = contents.consumeIncludingWhitespace(); |
| 446 ASSERT(uri.type() == StringToken); | 446 ASSERT(uri.type() == StringToken); |
| 447 if (!contents.atEnd()) | 447 if (!contents.atEnd()) |
| 448 return AtomicString(); | 448 return AtomicString(); |
| 449 return AtomicString(uri.value().toString()); | 449 return uri.value().toAtomicString(); |
| 450 } | 450 } |
| 451 | 451 |
| 452 StyleRuleCharset* CSSParserImpl::consumeCharsetRule(CSSParserTokenRange prelude) | 452 StyleRuleCharset* CSSParserImpl::consumeCharsetRule(CSSParserTokenRange prelude) |
| 453 { | 453 { |
| 454 prelude.consumeWhitespace(); | 454 prelude.consumeWhitespace(); |
| 455 const CSSParserToken& string = prelude.consumeIncludingWhitespace(); | 455 const CSSParserToken& string = prelude.consumeIncludingWhitespace(); |
| 456 if (string.type() != StringToken || !prelude.atEnd()) | 456 if (string.type() != StringToken || !prelude.atEnd()) |
| 457 return nullptr; // Parse error, expected a single string | 457 return nullptr; // Parse error, expected a single string |
| 458 return StyleRuleCharset::create(); | 458 return StyleRuleCharset::create(); |
| 459 } | 459 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 474 } | 474 } |
| 475 | 475 |
| 476 return StyleRuleImport::create(uri, MediaQueryParser::parseMediaQuerySet(pre
lude)); | 476 return StyleRuleImport::create(uri, MediaQueryParser::parseMediaQuerySet(pre
lude)); |
| 477 } | 477 } |
| 478 | 478 |
| 479 StyleRuleNamespace* CSSParserImpl::consumeNamespaceRule(CSSParserTokenRange prel
ude) | 479 StyleRuleNamespace* CSSParserImpl::consumeNamespaceRule(CSSParserTokenRange prel
ude) |
| 480 { | 480 { |
| 481 prelude.consumeWhitespace(); | 481 prelude.consumeWhitespace(); |
| 482 AtomicString namespacePrefix; | 482 AtomicString namespacePrefix; |
| 483 if (prelude.peek().type() == IdentToken) | 483 if (prelude.peek().type() == IdentToken) |
| 484 namespacePrefix = AtomicString(prelude.consumeIncludingWhitespace().valu
e().toString()); | 484 namespacePrefix = prelude.consumeIncludingWhitespace().value().toAtomicS
tring(); |
| 485 | 485 |
| 486 AtomicString uri(consumeStringOrURI(prelude)); | 486 AtomicString uri(consumeStringOrURI(prelude)); |
| 487 prelude.consumeWhitespace(); | 487 prelude.consumeWhitespace(); |
| 488 if (uri.isNull() || !prelude.atEnd()) | 488 if (uri.isNull() || !prelude.atEnd()) |
| 489 return nullptr; // Parse error, expected string or URI | 489 return nullptr; // Parse error, expected string or URI |
| 490 | 490 |
| 491 return StyleRuleNamespace::create(namespacePrefix, uri); | 491 return StyleRuleNamespace::create(namespacePrefix, uri); |
| 492 } | 492 } |
| 493 | 493 |
| 494 StyleRuleMedia* CSSParserImpl::consumeMediaRule(CSSParserTokenRange prelude, CSS
ParserTokenRange block) | 494 StyleRuleMedia* CSSParserImpl::consumeMediaRule(CSSParserTokenRange prelude, CSS
ParserTokenRange block) |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 while (last->type() == WhitespaceToken) | 765 while (last->type() == WhitespaceToken) |
| 766 --last; | 766 --last; |
| 767 if (last->type() == DelimiterToken && last->delimiter() == '!') { | 767 if (last->type() == DelimiterToken && last->delimiter() == '!') { |
| 768 important = true; | 768 important = true; |
| 769 declarationValueEnd = last; | 769 declarationValueEnd = last; |
| 770 } | 770 } |
| 771 } | 771 } |
| 772 | 772 |
| 773 size_t propertiesCount = m_parsedProperties.size(); | 773 size_t propertiesCount = m_parsedProperties.size(); |
| 774 if (RuntimeEnabledFeatures::cssVariablesEnabled() && unresolvedProperty == C
SSPropertyInvalid && CSSVariableParser::isValidVariableName(token)) { | 774 if (RuntimeEnabledFeatures::cssVariablesEnabled() && unresolvedProperty == C
SSPropertyInvalid && CSSVariableParser::isValidVariableName(token)) { |
| 775 AtomicString variableName = AtomicString(token.value().toString()); | 775 AtomicString variableName = token.value().toAtomicString(); |
| 776 consumeVariableValue(range.makeSubRange(&range.peek(), declarationValueE
nd), variableName, important); | 776 consumeVariableValue(range.makeSubRange(&range.peek(), declarationValueE
nd), variableName, important); |
| 777 } | 777 } |
| 778 | 778 |
| 779 if (important && (ruleType == StyleRule::FontFace || ruleType == StyleRule::
Keyframe)) | 779 if (important && (ruleType == StyleRule::FontFace || ruleType == StyleRule::
Keyframe)) |
| 780 return; | 780 return; |
| 781 | 781 |
| 782 if (unresolvedProperty != CSSPropertyInvalid) { | 782 if (unresolvedProperty != CSSPropertyInvalid) { |
| 783 if (m_styleSheet && m_styleSheet->singleOwnerDocument()) | 783 if (m_styleSheet && m_styleSheet->singleOwnerDocument()) |
| 784 Deprecation::warnOnDeprecatedProperties(m_styleSheet->singleOwnerDoc
ument()->frame(), unresolvedProperty); | 784 Deprecation::warnOnDeprecatedProperties(m_styleSheet->singleOwnerDoc
ument()->frame(), unresolvedProperty); |
| 785 consumeDeclarationValue(range.makeSubRange(&range.peek(), declarationVal
ueEnd), unresolvedProperty, important, ruleType); | 785 consumeDeclarationValue(range.makeSubRange(&range.peek(), declarationVal
ueEnd), unresolvedProperty, important, ruleType); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 else | 818 else |
| 819 return nullptr; // Parser error, invalid value in keyframe selector | 819 return nullptr; // Parser error, invalid value in keyframe selector |
| 820 if (range.atEnd()) | 820 if (range.atEnd()) |
| 821 return result; | 821 return result; |
| 822 if (range.consume().type() != CommaToken) | 822 if (range.consume().type() != CommaToken) |
| 823 return nullptr; // Parser error | 823 return nullptr; // Parser error |
| 824 } | 824 } |
| 825 } | 825 } |
| 826 | 826 |
| 827 } // namespace blink | 827 } // namespace blink |
| OLD | NEW |