| 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/CSSParserImpl.h" | 6 #include "core/css/parser/CSSParserImpl.h" |
| 7 | 7 |
| 8 #include "core/css/CSSKeyframesRule.h" | 8 #include "core/css/CSSKeyframesRule.h" |
| 9 #include "core/css/CSSStyleSheet.h" | 9 #include "core/css/CSSStyleSheet.h" |
| 10 #include "core/css/StylePropertySet.h" | 10 #include "core/css/StylePropertySet.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "core/dom/Document.h" | 23 #include "core/dom/Document.h" |
| 24 #include "core/dom/Element.h" | 24 #include "core/dom/Element.h" |
| 25 #include "core/frame/UseCounter.h" | 25 #include "core/frame/UseCounter.h" |
| 26 #include "platform/TraceEvent.h" | 26 #include "platform/TraceEvent.h" |
| 27 #include "wtf/BitArray.h" | 27 #include "wtf/BitArray.h" |
| 28 | 28 |
| 29 namespace blink { | 29 namespace blink { |
| 30 | 30 |
| 31 CSSParserImpl::CSSParserImpl(const CSSParserContext& context, StyleSheetContents
* styleSheet) | 31 CSSParserImpl::CSSParserImpl(const CSSParserContext& context, StyleSheetContents
* styleSheet) |
| 32 : m_context(context) | 32 : m_context(context) |
| 33 , m_defaultNamespace(starAtom) | |
| 34 , m_styleSheet(styleSheet) | 33 , m_styleSheet(styleSheet) |
| 35 , m_observerWrapper(nullptr) | 34 , m_observerWrapper(nullptr) |
| 36 { | 35 { |
| 37 } | 36 } |
| 38 | 37 |
| 39 bool CSSParserImpl::parseValue(MutableStylePropertySet* declaration, CSSProperty
ID unresolvedProperty, const String& string, bool important, const CSSParserCont
ext& context) | 38 bool CSSParserImpl::parseValue(MutableStylePropertySet* declaration, CSSProperty
ID unresolvedProperty, const String& string, bool important, const CSSParserCont
ext& context) |
| 40 { | 39 { |
| 41 CSSParserImpl parser(context); | 40 CSSParserImpl parser(context); |
| 42 StyleRule::Type ruleType = StyleRule::Style; | 41 StyleRule::Type ruleType = StyleRule::Style; |
| 43 if (declaration->cssParserMode() == CSSViewportRuleMode) | 42 if (declaration->cssParserMode() == CSSViewportRuleMode) |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 prelude.consumeWhitespace(); | 380 prelude.consumeWhitespace(); |
| 382 AtomicString namespacePrefix; | 381 AtomicString namespacePrefix; |
| 383 if (prelude.peek().type() == IdentToken) | 382 if (prelude.peek().type() == IdentToken) |
| 384 namespacePrefix = prelude.consumeIncludingWhitespace().value(); | 383 namespacePrefix = prelude.consumeIncludingWhitespace().value(); |
| 385 | 384 |
| 386 AtomicString uri(consumeStringOrURI(prelude)); | 385 AtomicString uri(consumeStringOrURI(prelude)); |
| 387 prelude.consumeWhitespace(); | 386 prelude.consumeWhitespace(); |
| 388 if (uri.isNull() || !prelude.atEnd()) | 387 if (uri.isNull() || !prelude.atEnd()) |
| 389 return nullptr; // Parse error, expected string or URI | 388 return nullptr; // Parse error, expected string or URI |
| 390 | 389 |
| 391 if (namespacePrefix.isNull()) | |
| 392 m_defaultNamespace = uri; | |
| 393 return StyleRuleNamespace::create(namespacePrefix, uri); | 390 return StyleRuleNamespace::create(namespacePrefix, uri); |
| 394 } | 391 } |
| 395 | 392 |
| 396 PassRefPtrWillBeRawPtr<StyleRuleMedia> CSSParserImpl::consumeMediaRule(CSSParser
TokenRange prelude, CSSParserTokenRange block) | 393 PassRefPtrWillBeRawPtr<StyleRuleMedia> CSSParserImpl::consumeMediaRule(CSSParser
TokenRange prelude, CSSParserTokenRange block) |
| 397 { | 394 { |
| 398 WillBeHeapVector<RefPtrWillBeMember<StyleRuleBase>> rules; | 395 WillBeHeapVector<RefPtrWillBeMember<StyleRuleBase>> rules; |
| 399 | 396 |
| 400 if (m_observerWrapper) { | 397 if (m_observerWrapper) { |
| 401 CSSParserTokenRange preludeWithoutWhitespace = prelude; | 398 CSSParserTokenRange preludeWithoutWhitespace = prelude; |
| 402 preludeWithoutWhitespace.consumeWhitespace(); | 399 preludeWithoutWhitespace.consumeWhitespace(); |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 return nullptr; // Parse error; expected ident token following colon
in @page header | 528 return nullptr; // Parse error; expected ident token following colon
in @page header |
| 532 pseudo = prelude.consume().value(); | 529 pseudo = prelude.consume().value(); |
| 533 } | 530 } |
| 534 | 531 |
| 535 prelude.consumeWhitespace(); | 532 prelude.consumeWhitespace(); |
| 536 if (!prelude.atEnd()) | 533 if (!prelude.atEnd()) |
| 537 return nullptr; // Parse error; extra tokens in @page header | 534 return nullptr; // Parse error; extra tokens in @page header |
| 538 | 535 |
| 539 OwnPtr<CSSParserSelector> selector; | 536 OwnPtr<CSSParserSelector> selector; |
| 540 if (!typeSelector.isNull() && pseudo.isNull()) { | 537 if (!typeSelector.isNull() && pseudo.isNull()) { |
| 541 selector = CSSParserSelector::create(QualifiedName(nullAtom, typeSelecto
r, m_defaultNamespace)); | 538 selector = CSSParserSelector::create(QualifiedName(nullAtom, typeSelecto
r, m_styleSheet->defaultNamespace())); |
| 542 } else { | 539 } else { |
| 543 selector = CSSParserSelector::create(); | 540 selector = CSSParserSelector::create(); |
| 544 if (!pseudo.isNull()) { | 541 if (!pseudo.isNull()) { |
| 545 selector->setMatch(CSSSelector::PagePseudoClass); | 542 selector->setMatch(CSSSelector::PagePseudoClass); |
| 546 selector->updatePseudoType(pseudo.lower()); | 543 selector->updatePseudoType(pseudo.lower()); |
| 547 if (selector->pseudoType() == CSSSelector::PseudoUnknown) | 544 if (selector->pseudoType() == CSSSelector::PseudoUnknown) |
| 548 return nullptr; // Parse error; unknown page pseudo-class | 545 return nullptr; // Parse error; unknown page pseudo-class |
| 549 } | 546 } |
| 550 if (!typeSelector.isNull()) | 547 if (!typeSelector.isNull()) |
| 551 selector->prependTagSelector(QualifiedName(nullAtom, typeSelector, m
_defaultNamespace)); | 548 selector->prependTagSelector(QualifiedName(nullAtom, typeSelector, m
_styleSheet->defaultNamespace())); |
| 552 } | 549 } |
| 553 | 550 |
| 554 if (m_observerWrapper) { | 551 if (m_observerWrapper) { |
| 555 unsigned endOffset = m_observerWrapper->endOffset(prelude); | 552 unsigned endOffset = m_observerWrapper->endOffset(prelude); |
| 556 m_observerWrapper->observer().startRuleHeader(StyleRule::Page, m_observe
rWrapper->startOffset(prelude)); | 553 m_observerWrapper->observer().startRuleHeader(StyleRule::Page, m_observe
rWrapper->startOffset(prelude)); |
| 557 m_observerWrapper->observer().endRuleHeader(endOffset); | 554 m_observerWrapper->observer().endRuleHeader(endOffset); |
| 558 } | 555 } |
| 559 | 556 |
| 560 selector->setForPage(); | 557 selector->setForPage(); |
| 561 Vector<OwnPtr<CSSParserSelector>> selectorVector; | 558 Vector<OwnPtr<CSSParserSelector>> selectorVector; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 594 wrapper.observer().observeSelector(wrapper.startOffset(selector), wrappe
r.endOffset(selector)); | 591 wrapper.observer().observeSelector(wrapper.startOffset(selector), wrappe
r.endOffset(selector)); |
| 595 } | 592 } |
| 596 | 593 |
| 597 wrapper.observer().endRuleHeader(wrapper.endOffset(originalRange)); | 594 wrapper.observer().endRuleHeader(wrapper.endOffset(originalRange)); |
| 598 } | 595 } |
| 599 | 596 |
| 600 | 597 |
| 601 PassRefPtrWillBeRawPtr<StyleRule> CSSParserImpl::consumeStyleRule(CSSParserToken
Range prelude, CSSParserTokenRange block) | 598 PassRefPtrWillBeRawPtr<StyleRule> CSSParserImpl::consumeStyleRule(CSSParserToken
Range prelude, CSSParserTokenRange block) |
| 602 { | 599 { |
| 603 CSSSelectorList selectorList; | 600 CSSSelectorList selectorList; |
| 604 CSSSelectorParser::parseSelector(prelude, m_context, m_defaultNamespace, m_s
tyleSheet, selectorList); | 601 CSSSelectorParser::parseSelector(prelude, m_context, m_styleSheet, selectorL
ist); |
| 605 if (!selectorList.isValid()) | 602 if (!selectorList.isValid()) |
| 606 return nullptr; // Parse error, invalid selector list | 603 return nullptr; // Parse error, invalid selector list |
| 607 | 604 |
| 608 if (m_observerWrapper) | 605 if (m_observerWrapper) |
| 609 observeSelectors(*m_observerWrapper, prelude); | 606 observeSelectors(*m_observerWrapper, prelude); |
| 610 | 607 |
| 611 consumeDeclarationList(block, StyleRule::Style); | 608 consumeDeclarationList(block, StyleRule::Style); |
| 612 | 609 |
| 613 return StyleRule::create(selectorList, createStylePropertySet(m_parsedProper
ties, m_context.mode())); | 610 return StyleRule::create(selectorList, createStylePropertySet(m_parsedProper
ties, m_context.mode())); |
| 614 } | 611 } |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 else | 726 else |
| 730 return nullptr; // Parser error, invalid value in keyframe selector | 727 return nullptr; // Parser error, invalid value in keyframe selector |
| 731 if (range.atEnd()) | 728 if (range.atEnd()) |
| 732 return result.release(); | 729 return result.release(); |
| 733 if (range.consume().type() != CommaToken) | 730 if (range.consume().type() != CommaToken) |
| 734 return nullptr; // Parser error | 731 return nullptr; // Parser error |
| 735 } | 732 } |
| 736 } | 733 } |
| 737 | 734 |
| 738 } // namespace blink | 735 } // namespace blink |
| OLD | NEW |