Commit 8c5a6e67 authored by sashab@chromium.org's avatar sashab@chromium.org

Split out Attribute from CSSPrimitiveValue

Remove Attributes from CSSPrimitiveValue and updated callsites to
instead create CSSFunctionValues. This only affects the 'content'
property (no other properties currently support CSS attributes).

BUG=523893

Review URL: https://codereview.chromium.org/1312543003

git-svn-id: svn://svn.chromium.org/blink/trunk@201534 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 0921bd55
......@@ -123,7 +123,6 @@ static bool hasDoubleValue(CSSPrimitiveValue::UnitType type)
case CSSPrimitiveValue::UnitType::CustomIdentifier:
case CSSPrimitiveValue::UnitType::String:
case CSSPrimitiveValue::UnitType::URI:
case CSSPrimitiveValue::UnitType::Attribute:
case CSSPrimitiveValue::UnitType::RGBColor:
case CSSPrimitiveValue::UnitType::Shape:
case CSSPrimitiveValue::UnitType::Calc:
......
......@@ -351,7 +351,6 @@ void CSSPrimitiveValue::cleanup()
case UnitType::CustomIdentifier:
case UnitType::String:
case UnitType::URI:
case UnitType::Attribute:
if (m_value.string)
m_value.string->deref();
break;
......@@ -745,7 +744,6 @@ String CSSPrimitiveValue::getStringValue() const
switch (type()) {
case UnitType::CustomIdentifier:
case UnitType::String:
case UnitType::Attribute:
case UnitType::URI:
return m_value.string;
default:
......@@ -846,7 +844,6 @@ const char* CSSPrimitiveValue::unitTypeToString(UnitType type)
case UnitType::URI:
case UnitType::ValueID:
case UnitType::PropertyID:
case UnitType::Attribute:
case UnitType::RGBColor:
case UnitType::Calc:
case UnitType::Shape:
......@@ -920,16 +917,6 @@ String CSSPrimitiveValue::customCSSText() const
case UnitType::PropertyID:
text = propertyName(m_value.propertyID);
break;
case UnitType::Attribute: {
StringBuilder result;
result.reserveCapacity(6 + m_value.string->length());
result.appendLiteral("attr(");
result.append(m_value.string);
result.append(')');
text = result.toString();
break;
}
case UnitType::RGBColor: {
text = Color(m_value.rgbcolor).serializedAsCSSComponentValue();
break;
......@@ -996,7 +983,6 @@ bool CSSPrimitiveValue::equals(const CSSPrimitiveValue& other) const
case UnitType::CustomIdentifier:
case UnitType::String:
case UnitType::URI:
case UnitType::Attribute:
return equal(m_value.string, other.m_value.string);
case UnitType::RGBColor:
return m_value.rgbcolor == other.m_value.rgbcolor;
......
......@@ -89,7 +89,6 @@ public:
Kilohertz,
CustomIdentifier,
URI,
Attribute,
RGBColor,
ViewportWidth,
ViewportHeight,
......@@ -158,7 +157,6 @@ public:
|| type() == UnitType::Gradians
|| type() == UnitType::Turns;
}
bool isAttr() const { return type() == UnitType::Attribute; }
bool isCustomIdent() const { return type() == UnitType::CustomIdentifier; }
bool isFontRelativeLength() const
{
......
......@@ -30,6 +30,7 @@
#include "core/css/RuleFeature.h"
#include "core/HTMLNames.h"
#include "core/css/CSSFunctionValue.h"
#include "core/css/CSSSelector.h"
#include "core/css/CSSSelectorList.h"
#include "core/css/CSSValueList.h"
......@@ -310,12 +311,12 @@ void RuleFeatureSet::updateInvalidationSetsForContentAttribute(const RuleData& r
return;
for (auto& item : toCSSValueList(*contentValue)) {
if (!item->isPrimitiveValue())
if (!item->isFunctionValue())
continue;
CSSPrimitiveValue* primitiveItem = toCSSPrimitiveValue(item.get());
if (!primitiveItem->isAttr())
CSSFunctionValue* functionValue = toCSSFunctionValue(item.get());
if (functionValue->functionType() != CSSValueAttr)
continue;
ensureAttributeInvalidationSet(AtomicString(primitiveItem->getStringValue()));
ensureAttributeInvalidationSet(AtomicString(toCSSPrimitiveValue(functionValue->item(0))->getStringValue()));
}
}
......
......@@ -2267,7 +2267,9 @@ PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAttr(CSSParserValueList
if (m_context.isHTMLDocument())
attrName = attrName.lower();
return cssValuePool().createValue(attrName, CSSPrimitiveValue::UnitType::Attribute);
RefPtrWillBeRawPtr<CSSFunctionValue> attrValue = CSSFunctionValue::create(CSSValueAttr);
attrValue->append(CSSPrimitiveValue::create(attrName, CSSPrimitiveValue::UnitType::CustomIdentifier));
return attrValue.release();
}
bool CSSPropertyParser::acceptQuirkyColors(CSSPropertyID propertyId) const
......
......@@ -45,6 +45,7 @@
#include "core/css/BasicShapeFunctions.h"
#include "core/css/CSSCounterValue.h"
#include "core/css/CSSCursorImageValue.h"
#include "core/css/CSSFunctionValue.h"
#include "core/css/CSSGradientValue.h"
#include "core/css/CSSGridTemplateAreasValue.h"
#include "core/css/CSSHelper.h"
......@@ -728,24 +729,28 @@ void StyleBuilderFunctions::applyValueCSSPropertyContent(StyleResolverState& sta
didSet = true;
}
if (!item->isPrimitiveValue())
continue;
CSSPrimitiveValue* contentValue = toCSSPrimitiveValue(item.get());
if (contentValue->isString()) {
state.style()->setContent(contentValue->getStringValue().impl(), didSet);
didSet = true;
} else if (contentValue->isAttr()) {
if (item->isFunctionValue()) {
CSSFunctionValue* functionValue = toCSSFunctionValue(item.get());
ASSERT(functionValue->functionType() == CSSValueAttr);
// FIXME: Can a namespace be specified for an attr(foo)?
if (state.style()->styleType() == NOPSEUDO)
state.style()->setUnique();
else
state.parentStyle()->setUnique();
QualifiedName attr(nullAtom, AtomicString(contentValue->getStringValue()), nullAtom);
QualifiedName attr(nullAtom, AtomicString(toCSSPrimitiveValue(functionValue->item(0))->getStringValue()), nullAtom);
const AtomicString& value = state.element()->getAttribute(attr);
state.style()->setContent(value.isNull() ? emptyString() : value.string(), didSet);
didSet = true;
}
if (!item->isPrimitiveValue())
continue;
CSSPrimitiveValue* contentValue = toCSSPrimitiveValue(item.get());
if (contentValue->isString()) {
state.style()->setContent(contentValue->getStringValue().impl(), didSet);
didSet = true;
} else {
switch (contentValue->getValueID()) {
case CSSValueOpenQuote:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment