Chromium Code Reviews| Index: Source/core/svg/SVGLengthTearOff.cpp |
| diff --git a/Source/core/svg/SVGLengthTearOff.cpp b/Source/core/svg/SVGLengthTearOff.cpp |
| index bf29952cee2d56b5a17dbf0eaaf5fdd9b13ef7bb..26bc58013a5bb8e59a4fa9e07c3036a6c0358067 100644 |
| --- a/Source/core/svg/SVGLengthTearOff.cpp |
| +++ b/Source/core/svg/SVGLengthTearOff.cpp |
| @@ -40,22 +40,51 @@ namespace blink { |
| namespace { |
| -inline SVGLengthType toSVGLengthType(unsigned short type) |
| +inline bool canResolveRelativeUnits(const SVGElement* contextElement) |
| { |
| - ASSERT(type >= LengthTypeUnknown && type <= LengthTypePC); |
| - return static_cast<SVGLengthType>(type); |
| + return contextElement && contextElement->inDocument(); |
| } |
| -inline bool canResolveRelativeUnits(const SVGElement* contextElement) |
| +inline CSSPrimitiveValue::UnitType toCSSUnitType(unsigned short type) |
| { |
| - return contextElement && contextElement->inDocument(); |
| + ASSERT(type >= CSSPrimitiveValue::CSS_UNKNOWN && type <= CSSPrimitiveValue::CSS_PC); |
| + return static_cast<CSSPrimitiveValue::UnitType>(type); |
| } |
| +inline SVGLengthType toSVGLengthType(CSSPrimitiveValue::UnitType type) |
| +{ |
| + switch (type) { |
| + case CSSPrimitiveValue::UnitType::CSS_UNKNOWN: |
| + return LengthTypeUnknown; |
| + case CSSPrimitiveValue::UnitType::CSS_NUMBER: |
| + return LengthTypeNumber; |
| + case CSSPrimitiveValue::UnitType::CSS_PERCENTAGE: |
| + return LengthTypePercentage; |
| + case CSSPrimitiveValue::UnitType::CSS_EMS: |
| + return LengthTypeEMS; |
| + case CSSPrimitiveValue::UnitType::CSS_EXS: |
| + return LengthTypeEXS; |
| + case CSSPrimitiveValue::UnitType::CSS_PX: |
| + return LengthTypePX; |
| + case CSSPrimitiveValue::UnitType::CSS_CM: |
| + return LengthTypeCM; |
| + case CSSPrimitiveValue::UnitType::CSS_MM: |
| + return LengthTypeMM; |
| + case CSSPrimitiveValue::UnitType::CSS_IN: |
| + return LengthTypeIN; |
| + case CSSPrimitiveValue::UnitType::CSS_PT: |
| + return LengthTypePT; |
| + case CSSPrimitiveValue::UnitType::CSS_PC: |
| + return LengthTypePC; |
| + default: |
| + return LengthTypeUnknown; |
| + } |
| +} |
| } // namespace |
| SVGLengthType SVGLengthTearOff::unitType() |
| { |
| - return hasExposedLengthUnit() ? target()->unitType() : LengthTypeUnknown; |
| + return hasExposedLengthUnit() ? toSVGLengthType(target()->primitiveType()) : LengthTypeUnknown; |
| } |
| SVGLengthMode SVGLengthTearOff::unitMode() |
| @@ -139,12 +168,12 @@ void SVGLengthTearOff::newValueSpecifiedUnits(unsigned short unitType, float val |
| return; |
| } |
| - if (unitType == LengthTypeUnknown || unitType > LengthTypePC) { |
| + if (unitType == CSSPrimitiveValue::CSS_UNKNOWN || unitType > CSSPrimitiveValue::CSS_PC) { |
|
fs
2015/06/02 18:20:08
This is a bit theoretical perhaps, but this should
Erik Dahlström
2015/06/03 14:51:30
The unknown unit is a "valid" unit, however one is
fs
2015/06/03 15:15:10
More to check against what is considered the "exte
|
| exceptionState.throwDOMException(NotSupportedError, "Cannot set value with unknown or invalid units (" + String::number(unitType) + ")."); |
| return; |
| } |
| - target()->newValueSpecifiedUnits(toSVGLengthType(unitType), valueInSpecifiedUnits); |
| + target()->newValueSpecifiedUnits(toCSSUnitType(unitType), valueInSpecifiedUnits); |
| commitChange(); |
| } |
| @@ -155,19 +184,19 @@ void SVGLengthTearOff::convertToSpecifiedUnits(unsigned short unitType, Exceptio |
| return; |
| } |
| - if (unitType == LengthTypeUnknown || unitType > LengthTypePC) { |
| + if (unitType == CSSPrimitiveValue::CSS_UNKNOWN || unitType > CSSPrimitiveValue::CSS_PC) { |
| exceptionState.throwDOMException(NotSupportedError, "Cannot convert to unknown or invalid units (" + String::number(unitType) + ")."); |
| return; |
| } |
| - if ((target()->isRelative() || SVGLength::isRelativeUnit(toSVGLengthType(unitType))) |
| + if ((target()->isRelative() || SVGLength::isRelativeUnit(toCSSUnitType(unitType))) |
| && !canResolveRelativeUnits(contextElement())) { |
| exceptionState.throwDOMException(NotSupportedError, "Could not resolve relative length."); |
| return; |
| } |
| SVGLengthContext lengthContext(contextElement()); |
| - target()->convertToSpecifiedUnits(toSVGLengthType(unitType), lengthContext); |
| + target()->convertToSpecifiedUnits(toCSSUnitType(unitType), lengthContext); |
| commitChange(); |
| } |