| Index: third_party/WebKit/Source/core/editing/EditingStyle.cpp
 | 
| diff --git a/third_party/WebKit/Source/core/editing/EditingStyle.cpp b/third_party/WebKit/Source/core/editing/EditingStyle.cpp
 | 
| index 37c6177d142e6b33411b727cccb8dfc9a7f6e54c..0d2b4277b583517bbc8169105456167c1f6a22e7 100644
 | 
| --- a/third_party/WebKit/Source/core/editing/EditingStyle.cpp
 | 
| +++ b/third_party/WebKit/Source/core/editing/EditingStyle.cpp
 | 
| @@ -30,6 +30,7 @@
 | 
|  #include "core/HTMLNames.h"
 | 
|  #include "core/css/CSSColorValue.h"
 | 
|  #include "core/css/CSSComputedStyleDeclaration.h"
 | 
| +#include "core/css/CSSIdentifierValue.h"
 | 
|  #include "core/css/CSSPrimitiveValue.h"
 | 
|  #include "core/css/CSSPrimitiveValueMappings.h"
 | 
|  #include "core/css/CSSPropertyMetadata.h"
 | 
| @@ -159,7 +160,7 @@ static CSSComputedStyleDeclaration* ensureComputedStyle(const Position& position
 | 
|  
 | 
|  static MutableStylePropertySet* getPropertiesNotIn(StylePropertySet* styleWithRedundantProperties, CSSStyleDeclaration* baseStyle);
 | 
|  enum LegacyFontSizeMode { AlwaysUseLegacyFontSize, UseLegacyFontSizeOnlyIfPixelValuesMatch };
 | 
| -static int legacyFontSizeFromCSSValue(Document*, const CSSPrimitiveValue*, bool, LegacyFontSizeMode);
 | 
| +static int legacyFontSizeFromCSSValue(Document*, const CSSValue*, bool, LegacyFontSizeMode);
 | 
|  static bool isTransparentColorValue(const CSSValue*);
 | 
|  static bool hasTransparentBackgroundColor(CSSStyleDeclaration*);
 | 
|  static bool hasTransparentBackgroundColor(StylePropertySet*);
 | 
| @@ -179,14 +180,14 @@ public:
 | 
|      virtual bool valueIsPresentInStyle(HTMLElement*, StylePropertySet*) const;
 | 
|      virtual void addToStyle(Element*, EditingStyle*) const;
 | 
|  
 | 
| -    DEFINE_INLINE_VIRTUAL_TRACE() { visitor->trace(m_primitiveValue); }
 | 
| +    DEFINE_INLINE_VIRTUAL_TRACE() { visitor->trace(m_identifierValue); }
 | 
|  
 | 
|  protected:
 | 
|      HTMLElementEquivalent(CSSPropertyID);
 | 
|      HTMLElementEquivalent(CSSPropertyID, const HTMLQualifiedName& tagName);
 | 
|      HTMLElementEquivalent(CSSPropertyID, CSSValueID primitiveValue, const HTMLQualifiedName& tagName);
 | 
|      const CSSPropertyID m_propertyID;
 | 
| -    const Member<CSSPrimitiveValue> m_primitiveValue;
 | 
| +    const Member<CSSIdentifierValue> m_identifierValue;
 | 
|      const HTMLQualifiedName* m_tagName; // We can store a pointer because HTML tag names are const global.
 | 
|  };
 | 
|  
 | 
| @@ -202,23 +203,23 @@ HTMLElementEquivalent::HTMLElementEquivalent(CSSPropertyID id, const HTMLQualifi
 | 
|  {
 | 
|  }
 | 
|  
 | 
| -HTMLElementEquivalent::HTMLElementEquivalent(CSSPropertyID id, CSSValueID primitiveValue, const HTMLQualifiedName& tagName)
 | 
| +HTMLElementEquivalent::HTMLElementEquivalent(CSSPropertyID id, CSSValueID valueID, const HTMLQualifiedName& tagName)
 | 
|      : m_propertyID(id)
 | 
| -    , m_primitiveValue(CSSPrimitiveValue::createIdentifier(primitiveValue))
 | 
| +    , m_identifierValue(CSSIdentifierValue::create(valueID))
 | 
|      , m_tagName(&tagName)
 | 
|  {
 | 
| -    DCHECK_NE(primitiveValue, CSSValueInvalid);
 | 
| +    DCHECK_NE(valueID, CSSValueInvalid);
 | 
|  }
 | 
|  
 | 
|  bool HTMLElementEquivalent::valueIsPresentInStyle(HTMLElement* element, StylePropertySet* style) const
 | 
|  {
 | 
|      const CSSValue* value = style->getPropertyCSSValue(m_propertyID);
 | 
| -    return matches(element) && value && value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValueID() == m_primitiveValue->getValueID();
 | 
| +    return matches(element) && value && value->isIdentifierValue() && toCSSIdentifierValue(value)->getValueID() == m_identifierValue->getValueID();
 | 
|  }
 | 
|  
 | 
|  void HTMLElementEquivalent::addToStyle(Element*, EditingStyle* style) const
 | 
|  {
 | 
| -    style->setProperty(m_propertyID, m_primitiveValue->cssText());
 | 
| +    style->setProperty(m_propertyID, m_identifierValue->cssText());
 | 
|  }
 | 
|  
 | 
|  class HTMLTextDecorationEquivalent final : public HTMLElementEquivalent {
 | 
| @@ -253,7 +254,7 @@ bool HTMLTextDecorationEquivalent::valueIsPresentInStyle(HTMLElement* element, S
 | 
|      const CSSValue* styleValue = style->getPropertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect);
 | 
|      if (!styleValue)
 | 
|          styleValue = style->getPropertyCSSValue(textDecorationPropertyForEditing());
 | 
| -    return matches(element) && styleValue && styleValue->isValueList() && toCSSValueList(styleValue)->hasValue(*m_primitiveValue);
 | 
| +    return matches(element) && styleValue && styleValue->isValueList() && toCSSValueList(styleValue)->hasValue(*m_identifierValue);
 | 
|  }
 | 
|  
 | 
|  class HTMLAttributeEquivalent : public HTMLElementEquivalent {
 | 
| @@ -349,7 +350,7 @@ const CSSValue* HTMLFontSizeEquivalent::attributeValueAsCSSValue(Element* elemen
 | 
|      CSSValueID size;
 | 
|      if (!HTMLFontElement::cssValueFromFontSizeNumber(value, size))
 | 
|          return nullptr;
 | 
| -    return CSSPrimitiveValue::createIdentifier(size);
 | 
| +    return CSSIdentifierValue::create(size);
 | 
|  }
 | 
|  
 | 
|  float EditingStyle::NoFontDelta = 0.0f;
 | 
| @@ -379,7 +380,7 @@ EditingStyle::EditingStyle(CSSPropertyID propertyID, const String& value)
 | 
|  
 | 
|  static Color cssValueToColor(const CSSValue* colorValue)
 | 
|  {
 | 
| -    if (!colorValue || (!colorValue->isColorValue() && !colorValue->isPrimitiveValue()))
 | 
| +    if (!colorValue || (!colorValue->isColorValue() && !colorValue->isPrimitiveValue() && !colorValue->isIdentifierValue()))
 | 
|          return Color::transparent;
 | 
|  
 | 
|      if (colorValue->isColorValue())
 | 
| @@ -535,16 +536,16 @@ bool EditingStyle::textDirection(WritingDirection& writingDirection) const
 | 
|          return false;
 | 
|  
 | 
|      const CSSValue* unicodeBidi = m_mutableStyle->getPropertyCSSValue(CSSPropertyUnicodeBidi);
 | 
| -    if (!unicodeBidi || !unicodeBidi->isPrimitiveValue())
 | 
| +    if (!unicodeBidi || !unicodeBidi->isIdentifierValue())
 | 
|          return false;
 | 
|  
 | 
| -    CSSValueID unicodeBidiValue = toCSSPrimitiveValue(unicodeBidi)->getValueID();
 | 
| +    CSSValueID unicodeBidiValue = toCSSIdentifierValue(unicodeBidi)->getValueID();
 | 
|      if (isEmbedOrIsolate(unicodeBidiValue)) {
 | 
|          const CSSValue* direction = m_mutableStyle->getPropertyCSSValue(CSSPropertyDirection);
 | 
| -        if (!direction || !direction->isPrimitiveValue())
 | 
| +        if (!direction || !direction->isIdentifierValue())
 | 
|              return false;
 | 
|  
 | 
| -        writingDirection = toCSSPrimitiveValue(direction)->getValueID() == CSSValueLtr ? LeftToRightWritingDirection : RightToLeftWritingDirection;
 | 
| +        writingDirection = toCSSIdentifierValue(direction)->getValueID() == CSSValueLtr ? LeftToRightWritingDirection : RightToLeftWritingDirection;
 | 
|  
 | 
|          return true;
 | 
|      }
 | 
| @@ -754,7 +755,7 @@ TriState EditingStyle::triStateOfStyle(const VisibleSelection& selection) const
 | 
|                  // style(vertical-align) to it so that document.queryCommandState() works with the style.
 | 
|                  // See bug http://crbug.com/582225.
 | 
|                  if (m_isVerticalAlign && getIdentifierValue(nodeStyle, CSSPropertyVerticalAlign) == CSSValueBaseline) {
 | 
| -                    const CSSPrimitiveValue* verticalAlign = toCSSPrimitiveValue(m_mutableStyle->getPropertyCSSValue(CSSPropertyVerticalAlign));
 | 
| +                    const CSSIdentifierValue* verticalAlign = toCSSIdentifierValue(m_mutableStyle->getPropertyCSSValue(CSSPropertyVerticalAlign));
 | 
|                      if (hasAncestorVerticalAlignStyle(node, verticalAlign->getValueID()))
 | 
|                          node.mutableComputedStyle()->setVerticalAlign(verticalAlign->convertTo<EVerticalAlign>());
 | 
|                  }
 | 
| @@ -1019,10 +1020,10 @@ void EditingStyle::prepareToApplyAt(const Position& position, ShouldPreserveWrit
 | 
|          || cssValueToColor(m_mutableStyle->getPropertyCSSValue(CSSPropertyBackgroundColor)) == backgroundColorInEffect(position.computeContainerNode()))
 | 
|          m_mutableStyle->removeProperty(CSSPropertyBackgroundColor);
 | 
|  
 | 
| -    if (unicodeBidi && unicodeBidi->isPrimitiveValue()) {
 | 
| -        m_mutableStyle->setProperty(CSSPropertyUnicodeBidi, toCSSPrimitiveValue(unicodeBidi)->getValueID());
 | 
| -        if (direction && direction->isPrimitiveValue())
 | 
| -            m_mutableStyle->setProperty(CSSPropertyDirection, toCSSPrimitiveValue(direction)->getValueID());
 | 
| +    if (unicodeBidi && unicodeBidi->isIdentifierValue()) {
 | 
| +        m_mutableStyle->setProperty(CSSPropertyUnicodeBidi, toCSSIdentifierValue(unicodeBidi)->getValueID());
 | 
| +        if (direction && direction->isIdentifierValue())
 | 
| +            m_mutableStyle->setProperty(CSSPropertyDirection, toCSSIdentifierValue(direction)->getValueID());
 | 
|      }
 | 
|  }
 | 
|  
 | 
| @@ -1142,8 +1143,8 @@ EditingStyle* EditingStyle::wrappingStyleForSerialization(ContainerNode* context
 | 
|  
 | 
|  static const CSSValueList& mergeTextDecorationValues(const CSSValueList& mergedValue, const CSSValueList& valueToMerge)
 | 
|  {
 | 
| -    DEFINE_STATIC_LOCAL(CSSPrimitiveValue, underline, (CSSPrimitiveValue::createIdentifier(CSSValueUnderline)));
 | 
| -    DEFINE_STATIC_LOCAL(CSSPrimitiveValue, lineThrough, (CSSPrimitiveValue::createIdentifier(CSSValueLineThrough)));
 | 
| +    DEFINE_STATIC_LOCAL(CSSIdentifierValue, underline, (CSSIdentifierValue::create(CSSValueUnderline)));
 | 
| +    DEFINE_STATIC_LOCAL(CSSIdentifierValue, lineThrough, (CSSIdentifierValue::create(CSSValueLineThrough)));
 | 
|      CSSValueList& result = *mergedValue.copy();
 | 
|      if (valueToMerge.hasValue(underline) && !mergedValue.hasValue(underline))
 | 
|          result.append(underline);
 | 
| @@ -1324,10 +1325,9 @@ void EditingStyle::forceInline()
 | 
|  int EditingStyle::legacyFontSize(Document* document) const
 | 
|  {
 | 
|      const CSSValue* cssValue = m_mutableStyle->getPropertyCSSValue(CSSPropertyFontSize);
 | 
| -    if (!cssValue || !cssValue->isPrimitiveValue())
 | 
| +    if (!cssValue || !(cssValue->isPrimitiveValue() || cssValue->isIdentifierValue()))
 | 
|          return 0;
 | 
| -    return legacyFontSizeFromCSSValue(document, toCSSPrimitiveValue(cssValue),
 | 
| -        m_isMonospaceFont, AlwaysUseLegacyFontSize);
 | 
| +    return legacyFontSizeFromCSSValue(document, cssValue, m_isMonospaceFont, AlwaysUseLegacyFontSize);
 | 
|  }
 | 
|  
 | 
|  EditingStyle* EditingStyle::styleAtSelectionStart(const VisibleSelection& selection, bool shouldUseBackgroundColorInEffect, MutableStylePropertySet* styleToCheck)
 | 
| @@ -1415,10 +1415,10 @@ WritingDirection EditingStyle::textDirectionForSelection(const VisibleSelection&
 | 
|  
 | 
|              CSSComputedStyleDeclaration* style = CSSComputedStyleDeclaration::create(&n);
 | 
|              const CSSValue* unicodeBidi = style->getPropertyCSSValue(CSSPropertyUnicodeBidi);
 | 
| -            if (!unicodeBidi || !unicodeBidi->isPrimitiveValue())
 | 
| +            if (!unicodeBidi || !unicodeBidi->isIdentifierValue())
 | 
|                  continue;
 | 
|  
 | 
| -            CSSValueID unicodeBidiValue = toCSSPrimitiveValue(unicodeBidi)->getValueID();
 | 
| +            CSSValueID unicodeBidiValue = toCSSIdentifierValue(unicodeBidi)->getValueID();
 | 
|              if (isUnicodeBidiNestedOrMultipleEmbeddings(unicodeBidiValue))
 | 
|                  return NaturalWritingDirection;
 | 
|          }
 | 
| @@ -1448,10 +1448,10 @@ WritingDirection EditingStyle::textDirectionForSelection(const VisibleSelection&
 | 
|          Element* element = &toElement(runner);
 | 
|          CSSComputedStyleDeclaration* style = CSSComputedStyleDeclaration::create(element);
 | 
|          const CSSValue* unicodeBidi = style->getPropertyCSSValue(CSSPropertyUnicodeBidi);
 | 
| -        if (!unicodeBidi || !unicodeBidi->isPrimitiveValue())
 | 
| +        if (!unicodeBidi || !unicodeBidi->isIdentifierValue())
 | 
|              continue;
 | 
|  
 | 
| -        CSSValueID unicodeBidiValue = toCSSPrimitiveValue(unicodeBidi)->getValueID();
 | 
| +        CSSValueID unicodeBidiValue = toCSSIdentifierValue(unicodeBidi)->getValueID();
 | 
|          if (unicodeBidiValue == CSSValueNormal)
 | 
|              continue;
 | 
|  
 | 
| @@ -1460,10 +1460,10 @@ WritingDirection EditingStyle::textDirectionForSelection(const VisibleSelection&
 | 
|  
 | 
|          DCHECK(isEmbedOrIsolate(unicodeBidiValue)) << unicodeBidiValue;
 | 
|          const CSSValue* direction = style->getPropertyCSSValue(CSSPropertyDirection);
 | 
| -        if (!direction || !direction->isPrimitiveValue())
 | 
| +        if (!direction || !direction->isIdentifierValue())
 | 
|              continue;
 | 
|  
 | 
| -        int directionValue = toCSSPrimitiveValue(direction)->getValueID();
 | 
| +        int directionValue = toCSSIdentifierValue(direction)->getValueID();
 | 
|          if (directionValue != CSSValueLtr && directionValue != CSSValueRtl)
 | 
|              continue;
 | 
|  
 | 
| @@ -1566,8 +1566,8 @@ void StyleChange::extractTextStyles(Document* document, MutableStylePropertySet*
 | 
|      // Furthermore, text-decoration: none has been trimmed so that text-decoration property is always a CSSValueList.
 | 
|      const CSSValue* textDecoration = style->getPropertyCSSValue(textDecorationPropertyForEditing());
 | 
|      if (textDecoration && textDecoration->isValueList()) {
 | 
| -        DEFINE_STATIC_LOCAL(CSSPrimitiveValue, underline, (CSSPrimitiveValue::createIdentifier(CSSValueUnderline)));
 | 
| -        DEFINE_STATIC_LOCAL(CSSPrimitiveValue, lineThrough, (CSSPrimitiveValue::createIdentifier(CSSValueLineThrough)));
 | 
| +        DEFINE_STATIC_LOCAL(CSSIdentifierValue, underline, (CSSIdentifierValue::create(CSSValueUnderline)));
 | 
| +        DEFINE_STATIC_LOCAL(CSSIdentifierValue, lineThrough, (CSSIdentifierValue::create(CSSValueLineThrough)));
 | 
|          CSSValueList* newTextDecoration = toCSSValueList(textDecoration)->copy();
 | 
|          if (newTextDecoration->removeAll(underline))
 | 
|              m_applyUnderline = true;
 | 
| @@ -1601,9 +1601,9 @@ void StyleChange::extractTextStyles(Document* document, MutableStylePropertySet*
 | 
|      style->removeProperty(CSSPropertyFontFamily);
 | 
|  
 | 
|      if (const CSSValue* fontSize = style->getPropertyCSSValue(CSSPropertyFontSize)) {
 | 
| -        if (!fontSize->isPrimitiveValue()) {
 | 
| +        if (!fontSize->isPrimitiveValue() && !fontSize->isIdentifierValue()) {
 | 
|              style->removeProperty(CSSPropertyFontSize); // Can't make sense of the number. Put no font size.
 | 
| -        } else if (int legacyFontSize = legacyFontSizeFromCSSValue(document, toCSSPrimitiveValue(fontSize), isMonospaceFont, UseLegacyFontSizeOnlyIfPixelValuesMatch)) {
 | 
| +        } else if (int legacyFontSize = legacyFontSizeFromCSSValue(document, fontSize, isMonospaceFont, UseLegacyFontSizeOnlyIfPixelValuesMatch)) {
 | 
|              m_applyFontSize = String::number(legacyFontSize);
 | 
|              style->removeProperty(CSSPropertyFontSize);
 | 
|          }
 | 
| @@ -1627,12 +1627,12 @@ static void diffTextDecorations(MutableStylePropertySet* style, CSSPropertyID pr
 | 
|  
 | 
|  static bool fontWeightIsBold(const CSSValue* fontWeight)
 | 
|  {
 | 
| -    if (!fontWeight->isPrimitiveValue())
 | 
| +    if (!fontWeight->isIdentifierValue())
 | 
|          return false;
 | 
|  
 | 
|      // Because b tag can only bold text, there are only two states in plain html: bold and not bold.
 | 
|      // Collapse all other values to either one of these two states for editing purposes.
 | 
| -    switch (toCSSPrimitiveValue(fontWeight)->getValueID()) {
 | 
| +    switch (toCSSIdentifierValue(fontWeight)->getValueID()) {
 | 
|      case CSSValue100:
 | 
|      case CSSValue200:
 | 
|      case CSSValue300:
 | 
| @@ -1656,10 +1656,10 @@ static bool fontWeightIsBold(const CSSValue* fontWeight)
 | 
|  
 | 
|  static bool fontWeightNeedsResolving(const CSSValue* fontWeight)
 | 
|  {
 | 
| -    if (!fontWeight->isPrimitiveValue())
 | 
| +    if (!fontWeight->isIdentifierValue())
 | 
|          return true;
 | 
|  
 | 
| -    const CSSValueID value = toCSSPrimitiveValue(fontWeight)->getValueID();
 | 
| +    const CSSValueID value = toCSSIdentifierValue(fontWeight)->getValueID();
 | 
|      return value == CSSValueLighter || value == CSSValueBolder;
 | 
|  }
 | 
|  
 | 
| @@ -1701,9 +1701,9 @@ CSSValueID getIdentifierValue(StylePropertySet* style, CSSPropertyID propertyID)
 | 
|      if (!style)
 | 
|          return CSSValueInvalid;
 | 
|      const CSSValue* value = style->getPropertyCSSValue(propertyID);
 | 
| -    if (!value || !value->isPrimitiveValue())
 | 
| +    if (!value || !value->isIdentifierValue())
 | 
|          return CSSValueInvalid;
 | 
| -    return toCSSPrimitiveValue(value)->getValueID();
 | 
| +    return toCSSIdentifierValue(value)->getValueID();
 | 
|  }
 | 
|  
 | 
|  CSSValueID getIdentifierValue(CSSStyleDeclaration* style, CSSPropertyID propertyID)
 | 
| @@ -1711,28 +1711,34 @@ CSSValueID getIdentifierValue(CSSStyleDeclaration* style, CSSPropertyID property
 | 
|      if (!style)
 | 
|          return CSSValueInvalid;
 | 
|      const CSSValue* value = style->getPropertyCSSValueInternal(propertyID);
 | 
| -    if (!value || !value->isPrimitiveValue())
 | 
| +    if (!value || !value->isIdentifierValue())
 | 
|          return CSSValueInvalid;
 | 
| -    return toCSSPrimitiveValue(value)->getValueID();
 | 
| +    return toCSSIdentifierValue(value)->getValueID();
 | 
|  }
 | 
|  
 | 
| -int legacyFontSizeFromCSSValue(Document* document, const CSSPrimitiveValue* value, bool isMonospaceFont, LegacyFontSizeMode mode)
 | 
| +int legacyFontSizeFromCSSValue(Document* document, const CSSValue* value, bool isMonospaceFont, LegacyFontSizeMode mode)
 | 
|  {
 | 
| -    CSSPrimitiveValue::LengthUnitType lengthType;
 | 
| -    if (CSSPrimitiveValue::unitTypeToLengthUnitType(value->typeWithCalcResolved(), lengthType)
 | 
| -        && lengthType == CSSPrimitiveValue::UnitTypePixels) {
 | 
| -        double conversion = CSSPrimitiveValue::conversionToCanonicalUnitsScaleFactor(value->typeWithCalcResolved());
 | 
| -        int pixelFontSize = clampTo<int>(value->getDoubleValue() * conversion);
 | 
| -        int legacyFontSize = FontSize::legacyFontSize(document, pixelFontSize, isMonospaceFont);
 | 
| -        // Use legacy font size only if pixel value matches exactly to that of legacy font size.
 | 
| -        if (mode == AlwaysUseLegacyFontSize || FontSize::fontSizeForKeyword(document, legacyFontSize, isMonospaceFont) == pixelFontSize)
 | 
| -            return legacyFontSize;
 | 
| +    if (value->isPrimitiveValue()) {
 | 
| +        const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(*value);
 | 
| +        CSSPrimitiveValue::LengthUnitType lengthType;
 | 
| +        if (CSSPrimitiveValue::unitTypeToLengthUnitType(primitiveValue.typeWithCalcResolved(), lengthType)
 | 
| +            && lengthType == CSSPrimitiveValue::UnitTypePixels) {
 | 
| +            double conversion = CSSPrimitiveValue::conversionToCanonicalUnitsScaleFactor(primitiveValue.typeWithCalcResolved());
 | 
| +            int pixelFontSize = clampTo<int>(primitiveValue.getDoubleValue() * conversion);
 | 
| +            int legacyFontSize = FontSize::legacyFontSize(document, pixelFontSize, isMonospaceFont);
 | 
| +            // Use legacy font size only if pixel value matches exactly to that of legacy font size.
 | 
| +            if (mode == AlwaysUseLegacyFontSize || FontSize::fontSizeForKeyword(document, legacyFontSize, isMonospaceFont) == pixelFontSize)
 | 
| +                return legacyFontSize;
 | 
|  
 | 
| -        return 0;
 | 
| +            return 0;
 | 
| +        }
 | 
|      }
 | 
|  
 | 
| -    if (CSSValueXSmall <= value->getValueID() && value->getValueID() <= CSSValueWebkitXxxLarge)
 | 
| -        return value->getValueID() - CSSValueXSmall + 1;
 | 
| +    if (value->isIdentifierValue()) {
 | 
| +        const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(*value);
 | 
| +        if (CSSValueXSmall <= identifierValue.getValueID() && identifierValue.getValueID() <= CSSValueWebkitXxxLarge)
 | 
| +            return identifierValue.getValueID() - CSSValueXSmall + 1;
 | 
| +    }
 | 
|  
 | 
|      return 0;
 | 
|  }
 | 
| @@ -1743,10 +1749,9 @@ bool isTransparentColorValue(const CSSValue* cssValue)
 | 
|          return true;
 | 
|      if (cssValue->isColorValue())
 | 
|          return !toCSSColorValue(cssValue)->value().alpha();
 | 
| -    if (!cssValue->isPrimitiveValue())
 | 
| +    if (!cssValue->isIdentifierValue())
 | 
|          return false;
 | 
| -    const CSSPrimitiveValue* value = toCSSPrimitiveValue(cssValue);
 | 
| -    return value->getValueID() == CSSValueTransparent;
 | 
| +    return toCSSIdentifierValue(cssValue)->getValueID() == CSSValueTransparent;
 | 
|  }
 | 
|  
 | 
|  bool hasTransparentBackgroundColor(CSSStyleDeclaration* style)
 | 
| 
 |