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

Unified Diff: third_party/WebKit/Source/core/css/resolver/CSSVariableResolver.cpp

Issue 1406993009: Revert "CSS Custom Properties (Variables)" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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/resolver/CSSVariableResolver.cpp
diff --git a/third_party/WebKit/Source/core/css/resolver/CSSVariableResolver.cpp b/third_party/WebKit/Source/core/css/resolver/CSSVariableResolver.cpp
deleted file mode 100644
index 2a63bf0e540968e70f1f39d17efe28f23c2ff03a..0000000000000000000000000000000000000000
--- a/third_party/WebKit/Source/core/css/resolver/CSSVariableResolver.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "config.h"
-#include "core/css/resolver/CSSVariableResolver.h"
-
-#include "core/CSSPropertyNames.h"
-#include "core/CSSValueKeywords.h"
-#include "core/StyleBuilderFunctions.h"
-#include "core/css/CSSVariableData.h"
-#include "core/css/CSSVariableReferenceValue.h"
-#include "core/css/parser/CSSParserToken.h"
-#include "core/css/parser/CSSParserTokenRange.h"
-#include "core/css/parser/CSSParserValues.h"
-#include "core/css/parser/CSSPropertyParser.h"
-#include "core/css/resolver/StyleBuilder.h"
-#include "core/css/resolver/StyleResolverState.h"
-#include "core/style/StyleVariableData.h"
-#include "wtf/Vector.h"
-
-namespace blink {
-
-// TODO(leviw): This should take a CSSParserTokenRange
-static void findEndIndexOfVariableReference(const Vector<CSSParserToken>& resolvedTokens, unsigned startIndex, unsigned& endIndex, unsigned& commaIndex, bool& hasClosingBracket)
-{
- endIndex = 0;
- commaIndex = 0;
- unsigned bracketCount = 1;
- for (unsigned i = startIndex; i < resolvedTokens.size(); ++i) {
- CSSParserTokenType type = resolvedTokens[i].type();
-
- if (type == CommaToken && !commaIndex) {
- commaIndex = i;
- } else if (type == LeftParenthesisToken || type == FunctionToken) {
- bracketCount++;
- } else if (type == RightParenthesisToken) {
- if (bracketCount == 1) {
- hasClosingBracket = true;
- endIndex = i;
- return;
- }
- bracketCount--;
- }
- }
- hasClosingBracket = false;
- endIndex = resolvedTokens.size() - 1;
-}
-
-unsigned CSSVariableResolver::resolveVariableTokensRecursive(Vector<CSSParserToken>& resolvedTokens, unsigned startIndex)
-{
- unsigned variableLocation = startIndex;
- while (resolvedTokens[variableLocation].type() != IdentToken)
- variableLocation++;
-
- unsigned commaIndex;
- unsigned endIndex;
- bool hasClosingBracket;
- // Find default value and match braces
- findEndIndexOfVariableReference(resolvedTokens, variableLocation + 1, endIndex, commaIndex, hasClosingBracket);
-
- unsigned length = endIndex - startIndex + 1;
- unsigned varFunctionPosition = startIndex;
-
- AtomicString variableName = resolvedTokens[variableLocation].value();
-
- if (m_variablesSeen.contains(variableName)) {
- m_cycleDetected = true;
- resolvedTokens.clear();
- return 0;
- }
-
- CSSVariableData* variableData = m_styleVariableData ? m_styleVariableData->getVariable(variableName) : nullptr;
- if (variableData) {
- Vector<CSSParserToken> tokens(variableData->tokens());
- if (variableData->needsVariableResolution()) {
- m_variablesSeen.add(variableName);
- resolveVariableReferencesFromTokens(tokens);
- m_variablesSeen.remove(variableName);
-
- // The old variable data holds onto the backing string the new resolved CSSVariableData
- // relies on. Ensure it will live beyond us overwriting the RefPtr in StyleVariableData.
- ASSERT(variableData->refCount() > 1);
-
- m_styleVariableData->setVariable(variableName, CSSVariableData::createResolved(tokens));
- }
- if (tokens.size()) {
- resolvedTokens.remove(startIndex, length);
- resolvedTokens.insert(startIndex, tokens);
- return tokens.size();
- }
- }
-
- // Fallback on default value if present
- if (!commaIndex || m_cycleDetected) {
- resolvedTokens.clear();
- return 0;
- }
-
- // Move the tokens to the beginning of the variable reference
- unsigned defaultValueStart = commaIndex + 1;
- unsigned defaultValueLength = endIndex - commaIndex - (hasClosingBracket ? 1 : 0);
- for (unsigned i = 0; i < defaultValueLength; ++i)
- resolvedTokens[varFunctionPosition + i] = resolvedTokens[defaultValueStart + i];
- resolvedTokens.remove(varFunctionPosition + defaultValueLength, length - defaultValueLength);
-
- resolveVariableReferencesFromTokens(resolvedTokens);
-
- return resolvedTokens.size();
-}
-
-void CSSVariableResolver::resolveVariableReferencesFromTokens(Vector<CSSParserToken>& tokens)
-{
- for (unsigned i = 0; i < tokens.size(); ++i) {
- if (tokens[i].functionId() == CSSValueVar) {
- unsigned validTokens = resolveVariableTokensRecursive(tokens, i);
- if (validTokens < 1 || m_cycleDetected) {
- tokens.clear();
- break;
- }
- i += validTokens - 1;
- }
- }
-}
-
-void CSSVariableResolver::resolveAndApplyVariableReferences(StyleResolverState& state, CSSPropertyID id, const CSSVariableReferenceValue& value)
-{
- // TODO(leviw): This should be a stack
- Vector<CSSParserToken> tokens = value.variableDataValue()->tokens();
-
- CSSVariableResolver resolver(state.style()->variables());
-
- resolver.resolveVariableReferencesFromTokens(tokens);
-
- if (!tokens.size())
- return;
-
- CSSParserContext context(HTMLStandardMode, 0);
-
- WillBeHeapVector<CSSProperty, 256> parsedProperties;
-
- CSSPropertyParser::parseValue(id, false, CSSParserTokenRange(tokens), context, parsedProperties, StyleRule::Type::Style);
-
- unsigned parsedPropertiesCount = parsedProperties.size();
- for (unsigned i = 0; i < parsedPropertiesCount; ++i)
- StyleBuilder::applyProperty(parsedProperties[i].id(), state, parsedProperties[i].value());
-}
-
-void CSSVariableResolver::resolveVariableDefinitions(StyleVariableData* variables)
-{
- if (!variables)
- return;
-
- for (auto& variable : variables->m_data) {
- if (!variable.value->needsVariableResolution())
- continue;
- Vector<CSSParserToken> resolvedTokens(variable.value->tokens());
-
- CSSVariableResolver resolver(variables, variable.key);
- resolver.resolveVariableReferencesFromTokens(resolvedTokens);
-
- variable.value = CSSVariableData::createResolved(resolvedTokens);
- }
-}
-
-CSSVariableResolver::CSSVariableResolver(StyleVariableData* styleVariableData)
- : m_styleVariableData(styleVariableData)
- , m_cycleDetected(false)
-{
-}
-
-CSSVariableResolver::CSSVariableResolver(StyleVariableData* styleVariableData, AtomicString& variable)
- : m_styleVariableData(styleVariableData)
- , m_cycleDetected(false)
-{
- m_variablesSeen.add(variable);
-}
-
-} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698