| 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 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 "blink,blink_style", "CSSParserImpl::parseStyleSheet", | 165 "blink,blink_style", "CSSParserImpl::parseStyleSheet", |
| 166 "baseUrl", context.baseURL().getString().utf8(), | 166 "baseUrl", context.baseURL().getString().utf8(), |
| 167 "mode", context.mode()); | 167 "mode", context.mode()); |
| 168 | 168 |
| 169 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.toke
nize"); | 169 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.toke
nize"); |
| 170 CSSTokenizer::Scope scope(string); | 170 CSSTokenizer::Scope scope(string); |
| 171 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.tokeni
ze"); | 171 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.tokeni
ze"); |
| 172 | 172 |
| 173 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.pars
e"); | 173 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.pars
e"); |
| 174 CSSParserImpl parser(context, styleSheet); | 174 CSSParserImpl parser(context, styleSheet); |
| 175 parser.enableLazyParsing(); |
| 175 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul
eList, [&styleSheet](StyleRuleBase* rule) { | 176 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul
eList, [&styleSheet](StyleRuleBase* rule) { |
| 176 if (rule->isCharsetRule()) | 177 if (rule->isCharsetRule()) |
| 177 return; | 178 return; |
| 178 styleSheet->parserAppendRule(rule); | 179 styleSheet->parserAppendRule(rule); |
| 179 }); | 180 }); |
| 180 styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid); | 181 styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid); |
| 182 styleSheet->populateStringPool(scope.stringPool()); |
| 181 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.parse"
); | 183 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.parse"
); |
| 182 | 184 |
| 183 TRACE_EVENT_END2( | 185 TRACE_EVENT_END2( |
| 184 "blink,blink_style", "CSSParserImpl::parseStyleSheet", | 186 "blink,blink_style", "CSSParserImpl::parseStyleSheet", |
| 185 "tokenCount", scope.tokenCount(), | 187 "tokenCount", scope.tokenCount(), |
| 186 "length", string.length()); | 188 "length", string.length()); |
| 187 } | 189 } |
| 188 | 190 |
| 189 CSSSelectorList CSSParserImpl::parsePageSelector(CSSParserTokenRange range, Styl
eSheetContents* styleSheet) | 191 CSSSelectorList CSSParserImpl::parsePageSelector(CSSParserTokenRange range, Styl
eSheetContents* styleSheet) |
| 190 { | 192 { |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 { | 271 { |
| 270 CSSParserImpl parser(context); | 272 CSSParserImpl parser(context); |
| 271 CSSParserObserverWrapper wrapper(observer); | 273 CSSParserObserverWrapper wrapper(observer); |
| 272 parser.m_observerWrapper = &wrapper; | 274 parser.m_observerWrapper = &wrapper; |
| 273 CSSTokenizer::Scope scope(declaration, wrapper); | 275 CSSTokenizer::Scope scope(declaration, wrapper); |
| 274 observer.startRuleHeader(StyleRule::Style, 0); | 276 observer.startRuleHeader(StyleRule::Style, 0); |
| 275 observer.endRuleHeader(1); | 277 observer.endRuleHeader(1); |
| 276 parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style); | 278 parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style); |
| 277 } | 279 } |
| 278 | 280 |
| 281 ImmutableStylePropertySet* CSSParserImpl::parseDeclarationListForLazyStyle(CSSPa
rserTokenRange block, const CSSParserContext& context) |
| 282 { |
| 283 CSSParserImpl parser(context); |
| 284 parser.consumeDeclarationList(block, StyleRule::Style); |
| 285 return createStylePropertySet(parser.m_parsedProperties, context.mode()); |
| 286 } |
| 287 |
| 279 void CSSParserImpl::parseStyleSheetForInspector(const String& string, const CSSP
arserContext& context, StyleSheetContents* styleSheet, CSSParserObserver& observ
er) | 288 void CSSParserImpl::parseStyleSheetForInspector(const String& string, const CSSP
arserContext& context, StyleSheetContents* styleSheet, CSSParserObserver& observ
er) |
| 280 { | 289 { |
| 281 CSSParserImpl parser(context, styleSheet); | 290 CSSParserImpl parser(context, styleSheet); |
| 282 CSSParserObserverWrapper wrapper(observer); | 291 CSSParserObserverWrapper wrapper(observer); |
| 283 parser.m_observerWrapper = &wrapper; | 292 parser.m_observerWrapper = &wrapper; |
| 284 CSSTokenizer::Scope scope(string, wrapper); | 293 CSSTokenizer::Scope scope(string, wrapper); |
| 285 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul
eList, [&styleSheet](StyleRuleBase* rule) { | 294 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul
eList, [&styleSheet](StyleRuleBase* rule) { |
| 286 if (rule->isCharsetRule()) | 295 if (rule->isCharsetRule()) |
| 287 return; | 296 return; |
| 288 styleSheet->parserAppendRule(rule); | 297 styleSheet->parserAppendRule(rule); |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 677 | 686 |
| 678 StyleRule* CSSParserImpl::consumeStyleRule(CSSParserTokenRange prelude, CSSParse
rTokenRange block) | 687 StyleRule* CSSParserImpl::consumeStyleRule(CSSParserTokenRange prelude, CSSParse
rTokenRange block) |
| 679 { | 688 { |
| 680 CSSSelectorList selectorList = CSSSelectorParser::parseSelector(prelude, m_c
ontext, m_styleSheet); | 689 CSSSelectorList selectorList = CSSSelectorParser::parseSelector(prelude, m_c
ontext, m_styleSheet); |
| 681 if (!selectorList.isValid()) | 690 if (!selectorList.isValid()) |
| 682 return nullptr; // Parse error, invalid selector list | 691 return nullptr; // Parse error, invalid selector list |
| 683 | 692 |
| 684 if (m_observerWrapper) | 693 if (m_observerWrapper) |
| 685 observeSelectors(*m_observerWrapper, prelude); | 694 observeSelectors(*m_observerWrapper, prelude); |
| 686 | 695 |
| 696 // TODO(csharrison): How should we lazily parse css that needs the observer? |
| 697 if (m_shouldUseLazyParsing && !m_observerWrapper) { |
| 698 return StyleRule::createLazy(std::move(selectorList), block, &m_context)
; |
| 699 } |
| 687 consumeDeclarationList(block, StyleRule::Style); | 700 consumeDeclarationList(block, StyleRule::Style); |
| 688 | |
| 689 return StyleRule::create(std::move(selectorList), createStylePropertySet(m_p
arsedProperties, m_context.mode())); | 701 return StyleRule::create(std::move(selectorList), createStylePropertySet(m_p
arsedProperties, m_context.mode())); |
| 690 } | 702 } |
| 691 | 703 |
| 692 void CSSParserImpl::consumeDeclarationList(CSSParserTokenRange range, StyleRule:
:RuleType ruleType) | 704 void CSSParserImpl::consumeDeclarationList(CSSParserTokenRange range, StyleRule:
:RuleType ruleType) |
| 693 { | 705 { |
| 694 ASSERT(m_parsedProperties.isEmpty()); | 706 ASSERT(m_parsedProperties.isEmpty()); |
| 695 | 707 |
| 696 bool useObserver = m_observerWrapper && (ruleType == StyleRule::Style || rul
eType == StyleRule::Keyframe); | 708 bool useObserver = m_observerWrapper && (ruleType == StyleRule::Style || rul
eType == StyleRule::Keyframe); |
| 697 if (useObserver) { | 709 if (useObserver) { |
| 698 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT
okenStartOffset(range)); | 710 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT
okenStartOffset(range)); |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 813 else | 825 else |
| 814 return nullptr; // Parser error, invalid value in keyframe selector | 826 return nullptr; // Parser error, invalid value in keyframe selector |
| 815 if (range.atEnd()) | 827 if (range.atEnd()) |
| 816 return result; | 828 return result; |
| 817 if (range.consume().type() != CommaToken) | 829 if (range.consume().type() != CommaToken) |
| 818 return nullptr; // Parser error | 830 return nullptr; // Parser error |
| 819 } | 831 } |
| 820 } | 832 } |
| 821 | 833 |
| 822 } // namespace blink | 834 } // namespace blink |
| OLD | NEW |