Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Unified Diff: third_party/WebKit/Source/core/css/parser/CSSParserImpl.h

Issue 2503683003: [WIP] Streaming CSS parser (Closed)
Patch Set: rebase Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/css/parser/CSSParserImpl.h
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserImpl.h b/third_party/WebKit/Source/core/css/parser/CSSParserImpl.h
index 219ab0dd541d54ac6655d770199319d75627f2f3..378ec9c8fc290248612408fb2632de04a2973a0a 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSParserImpl.h
+++ b/third_party/WebKit/Source/core/css/parser/CSSParserImpl.h
@@ -10,6 +10,7 @@
#include "core/css/CSSPropertySourceData.h"
#include "core/css/StylePropertySet.h"
#include "core/css/parser/CSSParserTokenRange.h"
+#include "core/css/parser/CSSParserTokenStream.h"
#include "platform/heap/Handle.h"
#include "wtf/Vector.h"
#include "wtf/text/WTFString.h"
@@ -20,7 +21,6 @@ namespace blink {
class CSSLazyParsingState;
class CSSParserContext;
class CSSParserObserver;
-class CSSParserObserverWrapper;
class StyleRule;
class StyleRuleBase;
class StyleRuleCharset;
@@ -88,6 +88,10 @@ class CSSParserImpl {
StyleSheetContents*);
static ImmutableStylePropertySet* parseCustomPropertySet(CSSParserTokenRange);
+ // This will be removed when crbug.com/661854 is fixed. We need to use a
+ // stream for parsing @apply blocks so we can correctly store custom
+ // property values.
+ void consumeDeclarationListForAtApply(CSSParserTokenRange);
static std::unique_ptr<Vector<double>> parseKeyframeKeyList(const String&);
@@ -102,7 +106,8 @@ class CSSParserImpl {
CSSParserObserver&);
static StylePropertySet* parseDeclarationListForLazyStyle(
- CSSParserTokenRange block,
+ const String&,
+ size_t startOffset,
const CSSParserContext&);
private:
@@ -110,38 +115,55 @@ class CSSParserImpl {
// Returns whether the first encountered rule was valid
template <typename T>
- bool consumeRuleList(CSSParserTokenRange, RuleListType, T callback);
+ bool consumeRuleList(CSSParserTokenStream&, RuleListType, T callback);
- // These two functions update the range they're given
- StyleRuleBase* consumeAtRule(CSSParserTokenRange&, AllowedRulesType);
- StyleRuleBase* consumeQualifiedRule(CSSParserTokenRange&, AllowedRulesType);
+ StyleRuleBase* consumeAtRule(CSSParserTokenStream&, AllowedRulesType);
+ // The start offset is needed when we use a CSSParserObserver
+ StyleRuleBase* consumeQualifiedRule(CSSParserTokenStream&,
+ AllowedRulesType,
+ size_t startOffset = 0);
static StyleRuleCharset* consumeCharsetRule(CSSParserTokenRange prelude);
- StyleRuleImport* consumeImportRule(CSSParserTokenRange prelude);
+ StyleRuleImport* consumeImportRule(CSSParserTokenRange prelude,
+ size_t startOffset,
+ size_t endOffset);
StyleRuleNamespace* consumeNamespaceRule(CSSParserTokenRange prelude);
+ // The prelude runs from preludeStartOffset to block.offset() - 1
StyleRuleMedia* consumeMediaRule(CSSParserTokenRange prelude,
- CSSParserTokenRange block);
+ CSSParserTokenStream& block,
+ size_t preludeStartOffset);
StyleRuleSupports* consumeSupportsRule(CSSParserTokenRange prelude,
- CSSParserTokenRange block);
+ CSSParserTokenStream& block,
+ size_t preludeStartOffset);
StyleRuleViewport* consumeViewportRule(CSSParserTokenRange prelude,
- CSSParserTokenRange block);
+ CSSParserTokenStream& block,
+ size_t preludeStartOffset);
StyleRuleFontFace* consumeFontFaceRule(CSSParserTokenRange prelude,
- CSSParserTokenRange block);
+ CSSParserTokenStream& block,
+ size_t preludeStartOffset);
StyleRuleKeyframes* consumeKeyframesRule(bool webkitPrefixed,
CSSParserTokenRange prelude,
- CSSParserTokenRange block);
+ CSSParserTokenStream& block,
+ size_t preludeStartOffset);
StyleRulePage* consumePageRule(CSSParserTokenRange prelude,
- CSSParserTokenRange block);
+ CSSParserTokenStream& block,
+ size_t preludeStartOffset);
// Updates m_parsedProperties
void consumeApplyRule(CSSParserTokenRange prelude);
StyleRuleKeyframe* consumeKeyframeStyleRule(CSSParserTokenRange prelude,
- CSSParserTokenRange block);
- StyleRule* consumeStyleRule(CSSParserTokenRange prelude,
- CSSParserTokenRange block);
-
- void consumeDeclarationList(CSSParserTokenRange, StyleRule::RuleType);
- void consumeDeclaration(CSSParserTokenRange, StyleRule::RuleType);
+ CSSParserTokenStream& block,
+ size_t preludeStartOffset);
+ StyleRule* consumeStyleRule(CSSParserTokenStream&, size_t startOffset);
+
+ void consumeDeclarationList(CSSParserTokenStream&, StyleRule::RuleType);
+ void consumeDeclaration(CSSParserTokenStream&,
+ StyleRule::RuleType,
+ size_t declarationStartOffset);
+ void consumeDeclaration(CSSParserTokenRange,
+ StyleRule::RuleType,
+ size_t declarationStartOffset,
+ size_t declarationEndOffset);
void consumeDeclarationValue(CSSParserTokenRange,
CSSPropertyID,
bool important,
@@ -161,10 +183,9 @@ class CSSParserImpl {
Member<StyleSheetContents> m_styleSheet;
- // For the inspector
- CSSParserObserverWrapper* m_observerWrapper;
-
Member<CSSLazyParsingState> m_lazyState;
+
+ CSSParserObserver* m_observer = nullptr;
};
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698