| Index: Source/core/css/CSSPrimitiveValue.cpp
 | 
| diff --git a/Source/core/css/CSSPrimitiveValue.cpp b/Source/core/css/CSSPrimitiveValue.cpp
 | 
| index 13db75eba85c249d59a5a4e575c96cc1484b51b4..ddcf81afac82148472227faa66ed9b702cd1e016 100644
 | 
| --- a/Source/core/css/CSSPrimitiveValue.cpp
 | 
| +++ b/Source/core/css/CSSPrimitiveValue.cpp
 | 
| @@ -93,6 +93,8 @@ static inline bool isValidCSSUnitTypeForDoubleConversion(CSSPrimitiveValue::Unit
 | 
|      case CSSPrimitiveValue::CSS_COUNTER:
 | 
|      case CSSPrimitiveValue::CSS_COUNTER_NAME:
 | 
|      case CSSPrimitiveValue::CSS_IDENT:
 | 
| +    case CSSPrimitiveValue::CSS_PROPERTY_ID:
 | 
| +    case CSSPrimitiveValue::CSS_VALUE_ID:
 | 
|      case CSSPrimitiveValue::CSS_PAIR:
 | 
|      case CSSPrimitiveValue::CSS_PARSER_HEXCOLOR:
 | 
|      case CSSPrimitiveValue::CSS_PARSER_IDENTIFIER:
 | 
| @@ -164,6 +166,9 @@ static CSSTextCache& cssTextCache()
 | 
|  
 | 
|  unsigned short CSSPrimitiveValue::primitiveType() const 
 | 
|  {
 | 
| +    if (m_primitiveUnitType == CSS_PROPERTY_ID || m_primitiveUnitType == CSS_VALUE_ID)
 | 
| +        return CSS_IDENT;
 | 
| +
 | 
|      if (m_primitiveUnitType != CSSPrimitiveValue::CSS_CALC)
 | 
|          return m_primitiveUnitType; 
 | 
|      
 | 
| @@ -186,30 +191,51 @@ unsigned short CSSPrimitiveValue::primitiveType() const
 | 
|      return CSSPrimitiveValue::CSS_UNKNOWN;
 | 
|  }
 | 
|  
 | 
| -static const AtomicString& valueOrPropertyName(int valueOrPropertyID)
 | 
| +static const AtomicString& propertyName(CSSPropertyID propertyID)
 | 
|  {
 | 
| -    ASSERT_ARG(valueOrPropertyID, valueOrPropertyID >= 0);
 | 
| -    ASSERT_ARG(valueOrPropertyID, valueOrPropertyID < numCSSValueKeywords || (valueOrPropertyID >= firstCSSProperty && valueOrPropertyID < firstCSSProperty + numCSSProperties));
 | 
| +    ASSERT_ARG(propertyID, propertyID >= 0);
 | 
| +    ASSERT_ARG(propertyID, (propertyID >= firstCSSProperty && propertyID < firstCSSProperty + numCSSProperties));
 | 
|  
 | 
| -    if (valueOrPropertyID < 0)
 | 
| +    if (propertyID < 0)
 | 
|          return nullAtom;
 | 
|  
 | 
| -    if (valueOrPropertyID < numCSSValueKeywords) {
 | 
| -        static AtomicString* keywordStrings = new AtomicString[numCSSValueKeywords]; // Leaked intentionally.
 | 
| -        AtomicString& keywordString = keywordStrings[valueOrPropertyID];
 | 
| -        if (keywordString.isNull())
 | 
| -            keywordString = getValueName(valueOrPropertyID);
 | 
| -        return keywordString;
 | 
| -    }
 | 
| +    return getPropertyNameAtomicString(propertyID);
 | 
| +}
 | 
| +
 | 
| +static const AtomicString& valueName(CSSValueID valueID)
 | 
| +{
 | 
| +    ASSERT_ARG(valueID, valueID >= 0);
 | 
| +    ASSERT_ARG(valueID, valueID < numCSSValueKeywords);
 | 
|  
 | 
| -    return getPropertyNameAtomicString(static_cast<CSSPropertyID>(valueOrPropertyID));
 | 
| +    if (valueID < 0)
 | 
| +        return nullAtom;
 | 
| +
 | 
| +    static AtomicString* keywordStrings = new AtomicString[numCSSValueKeywords]; // Leaked intentionally.
 | 
| +    AtomicString& keywordString = keywordStrings[valueID];
 | 
| +    if (keywordString.isNull())
 | 
| +        keywordString = getValueName(valueID);
 | 
| +    return keywordString;
 | 
|  }
 | 
|  
 | 
| -CSSPrimitiveValue::CSSPrimitiveValue(int ident)
 | 
| +CSSPrimitiveValue::CSSPrimitiveValue(CSSValueID valueID)
 | 
|      : CSSValue(PrimitiveClass)
 | 
|  {
 | 
| -    m_primitiveUnitType = CSS_IDENT;
 | 
| -    m_value.ident = ident;
 | 
| +    m_primitiveUnitType = CSS_VALUE_ID;
 | 
| +    m_value.valueID = valueID;
 | 
| +}
 | 
| +
 | 
| +CSSPrimitiveValue::CSSPrimitiveValue(CSSPropertyID propertyID)
 | 
| +    : CSSValue(PrimitiveClass)
 | 
| +{
 | 
| +    m_primitiveUnitType = CSS_PROPERTY_ID;
 | 
| +    m_value.propertyID = propertyID;
 | 
| +}
 | 
| +
 | 
| +CSSPrimitiveValue::CSSPrimitiveValue(int parserOperator)
 | 
| +    : CSSValue(PrimitiveClass)
 | 
| +{
 | 
| +    m_primitiveUnitType = CSS_PARSER_OPERATOR;
 | 
| +    m_value.parserOperator = parserOperator;
 | 
|  }
 | 
|  
 | 
|  CSSPrimitiveValue::CSSPrimitiveValue(double num, UnitTypes type)
 | 
| @@ -241,36 +267,36 @@ CSSPrimitiveValue::CSSPrimitiveValue(const Length& length)
 | 
|  {
 | 
|      switch (length.type()) {
 | 
|          case Auto:
 | 
| -            m_primitiveUnitType = CSS_IDENT;
 | 
| -            m_value.ident = CSSValueAuto;
 | 
| +            m_primitiveUnitType = CSS_VALUE_ID;
 | 
| +            m_value.valueID = CSSValueAuto;
 | 
|              break;
 | 
|          case WebCore::Fixed:
 | 
|              m_primitiveUnitType = CSS_PX;
 | 
|              m_value.num = length.value();
 | 
|              break;
 | 
|          case Intrinsic:
 | 
| -            m_primitiveUnitType = CSS_IDENT;
 | 
| -            m_value.ident = CSSValueIntrinsic;
 | 
| +            m_primitiveUnitType = CSS_VALUE_ID;
 | 
| +            m_value.valueID = CSSValueIntrinsic;
 | 
|              break;
 | 
|          case MinIntrinsic:
 | 
| -            m_primitiveUnitType = CSS_IDENT;
 | 
| -            m_value.ident = CSSValueMinIntrinsic;
 | 
| +            m_primitiveUnitType = CSS_VALUE_ID;
 | 
| +            m_value.valueID = CSSValueMinIntrinsic;
 | 
|              break;
 | 
|          case MinContent:
 | 
| -            m_primitiveUnitType = CSS_IDENT;
 | 
| -            m_value.ident = CSSValueWebkitMinContent;
 | 
| +            m_primitiveUnitType = CSS_VALUE_ID;
 | 
| +            m_value.valueID = CSSValueWebkitMinContent;
 | 
|              break;
 | 
|          case MaxContent:
 | 
| -            m_primitiveUnitType = CSS_IDENT;
 | 
| -            m_value.ident = CSSValueWebkitMaxContent;
 | 
| +            m_primitiveUnitType = CSS_VALUE_ID;
 | 
| +            m_value.valueID = CSSValueWebkitMaxContent;
 | 
|              break;
 | 
|          case FillAvailable:
 | 
| -            m_primitiveUnitType = CSS_IDENT;
 | 
| -            m_value.ident = CSSValueWebkitFillAvailable;
 | 
| +            m_primitiveUnitType = CSS_VALUE_ID;
 | 
| +            m_value.valueID = CSSValueWebkitFillAvailable;
 | 
|              break;
 | 
|          case FitContent:
 | 
| -            m_primitiveUnitType = CSS_IDENT;
 | 
| -            m_value.ident = CSSValueWebkitFitContent;
 | 
| +            m_primitiveUnitType = CSS_VALUE_ID;
 | 
| +            m_value.valueID = CSSValueWebkitFitContent;
 | 
|              break;
 | 
|          case Percent:
 | 
|              m_primitiveUnitType = CSS_PERCENTAGE;
 | 
| @@ -418,6 +444,8 @@ void CSSPrimitiveValue::cleanup()
 | 
|      case CSS_UNICODE_RANGE:
 | 
|      case CSS_PARSER_OPERATOR:
 | 
|      case CSS_PARSER_IDENTIFIER:
 | 
| +    case CSS_PROPERTY_ID:
 | 
| +    case CSS_VALUE_ID:
 | 
|          break;
 | 
|      }
 | 
|      m_primitiveUnitType = 0;
 | 
| @@ -725,8 +753,10 @@ String CSSPrimitiveValue::getStringValue(ExceptionCode& ec) const
 | 
|          case CSS_URI:
 | 
|          case CSS_VARIABLE_NAME:
 | 
|              return m_value.string;
 | 
| -        case CSS_IDENT:
 | 
| -            return valueOrPropertyName(m_value.ident);
 | 
| +        case CSS_VALUE_ID:
 | 
| +            return valueName(m_value.valueID);
 | 
| +        case CSS_PROPERTY_ID:
 | 
| +            return propertyName(m_value.propertyID);
 | 
|          default:
 | 
|              ec = INVALID_ACCESS_ERR;
 | 
|              break;
 | 
| @@ -743,8 +773,10 @@ String CSSPrimitiveValue::getStringValue() const
 | 
|          case CSS_URI:
 | 
|          case CSS_VARIABLE_NAME:
 | 
|              return m_value.string;
 | 
| -        case CSS_IDENT:
 | 
| -            return valueOrPropertyName(m_value.ident);
 | 
| +        case CSS_VALUE_ID:
 | 
| +            return valueName(m_value.valueID);
 | 
| +        case CSS_PROPERTY_ID:
 | 
| +            return propertyName(m_value.propertyID);
 | 
|          default:
 | 
|              break;
 | 
|      }
 | 
| @@ -922,8 +954,11 @@ String CSSPrimitiveValue::customCssText() const
 | 
|          case CSS_URI:
 | 
|              text = "url(" + quoteCSSURLIfNeeded(m_value.string) + ")";
 | 
|              break;
 | 
| -        case CSS_IDENT:
 | 
| -            text = valueOrPropertyName(m_value.ident);
 | 
| +        case CSS_VALUE_ID:
 | 
| +            text = valueName(m_value.valueID);
 | 
| +            break;
 | 
| +        case CSS_PROPERTY_ID:
 | 
| +            text = propertyName(m_value.propertyID);
 | 
|              break;
 | 
|          case CSS_ATTR: {
 | 
|              StringBuilder result;
 | 
| @@ -1005,7 +1040,7 @@ String CSSPrimitiveValue::customCssText() const
 | 
|              text = getPairValue()->cssText();
 | 
|              break;
 | 
|          case CSS_PARSER_OPERATOR: {
 | 
| -            char c = static_cast<char>(m_value.ident);
 | 
| +            char c = static_cast<char>(m_value.parserOperator);
 | 
|              text = String(&c, 1U);
 | 
|              break;
 | 
|          }
 | 
| @@ -1164,8 +1199,11 @@ PassRefPtr<CSSPrimitiveValue> CSSPrimitiveValue::cloneForCSSOM() const
 | 
|      case CSS_DPCM:
 | 
|          result = CSSPrimitiveValue::create(m_value.num, static_cast<UnitTypes>(m_primitiveUnitType));
 | 
|          break;
 | 
| -    case CSS_IDENT:
 | 
| -        result = CSSPrimitiveValue::createIdentifier(m_value.ident);
 | 
| +    case CSS_PROPERTY_ID:
 | 
| +        result = CSSPrimitiveValue::createIdentifier(m_value.propertyID);
 | 
| +        break;
 | 
| +    case CSS_VALUE_ID:
 | 
| +        result = CSSPrimitiveValue::createIdentifier(m_value.valueID);
 | 
|          break;
 | 
|      case CSS_RGBCOLOR:
 | 
|          result = CSSPrimitiveValue::createColor(m_value.rgbcolor);
 | 
| @@ -1221,8 +1259,10 @@ bool CSSPrimitiveValue::equals(const CSSPrimitiveValue& other) const
 | 
|      case CSS_VMAX:
 | 
|      case CSS_DIMENSION:
 | 
|          return m_value.num == other.m_value.num;
 | 
| -    case CSS_IDENT:
 | 
| -        return valueOrPropertyName(m_value.ident) == valueOrPropertyName(other.m_value.ident);
 | 
| +    case CSS_PROPERTY_ID:
 | 
| +        return propertyName(m_value.propertyID) == propertyName(other.m_value.propertyID);
 | 
| +    case CSS_VALUE_ID:
 | 
| +        return valueName(m_value.valueID) == valueName(other.m_value.valueID);
 | 
|      case CSS_STRING:
 | 
|      case CSS_URI:
 | 
|      case CSS_ATTR:
 | 
| @@ -1242,7 +1282,7 @@ bool CSSPrimitiveValue::equals(const CSSPrimitiveValue& other) const
 | 
|      case CSS_PAIR:
 | 
|          return m_value.pair && other.m_value.pair && m_value.pair->equals(*other.m_value.pair);
 | 
|      case CSS_PARSER_OPERATOR:
 | 
| -        return m_value.ident == other.m_value.ident;
 | 
| +        return m_value.valueID == other.m_value.valueID;
 | 
|      case CSS_CALC:
 | 
|          return m_value.calc && other.m_value.calc && m_value.calc->equals(*other.m_value.calc);
 | 
|      case CSS_SHAPE:
 | 
| 
 |