Chromium Code Reviews| Index: third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp |
| diff --git a/third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp b/third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp |
| index bf29952cee2d56b5a17dbf0eaaf5fdd9b13ef7bb..477f3bd838c449293cf52cc52e503c948c229f89 100644 |
| --- a/third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp |
| +++ b/third_party/WebKit/Source/core/svg/SVGLengthTearOff.cpp |
| @@ -40,10 +40,10 @@ namespace blink { |
| namespace { |
| -inline SVGLengthType toSVGLengthType(unsigned short type) |
| +inline bool isValidLengthUnit(unsigned short type) |
| { |
| - ASSERT(type >= LengthTypeUnknown && type <= LengthTypePC); |
| - return static_cast<SVGLengthType>(type); |
| + return type != (unsigned short)CSSPrimitiveValue::UnitType::Unknown |
| + && type <= (unsigned short)CSSPrimitiveValue::UnitType::Picas; |
|
fs
2015/10/23 20:28:59
Nit: Use static_cast
|
| } |
| inline bool canResolveRelativeUnits(const SVGElement* contextElement) |
| @@ -51,11 +51,46 @@ inline bool canResolveRelativeUnits(const SVGElement* contextElement) |
| return contextElement && contextElement->inDocument(); |
| } |
| +inline CSSPrimitiveValue::UnitType toCSSUnitType(unsigned short type) |
| +{ |
| + ASSERT(isValidLengthUnit(type)); |
| + return static_cast<CSSPrimitiveValue::UnitType>(type); |
| +} |
| + |
| +inline SVGLengthType toSVGLengthType(CSSPrimitiveValue::UnitType type) |
| +{ |
| + switch (type) { |
| + case CSSPrimitiveValue::UnitType::Unknown: |
| + return LengthTypeUnknown; |
| + case CSSPrimitiveValue::UnitType::Number: |
| + return LengthTypeNumber; |
| + case CSSPrimitiveValue::UnitType::Percentage: |
| + return LengthTypePercentage; |
| + case CSSPrimitiveValue::UnitType::Ems: |
| + return LengthTypeEMS; |
| + case CSSPrimitiveValue::UnitType::Exs: |
| + return LengthTypeEXS; |
| + case CSSPrimitiveValue::UnitType::Pixels: |
| + return LengthTypePX; |
| + case CSSPrimitiveValue::UnitType::Centimeters: |
| + return LengthTypeCM; |
| + case CSSPrimitiveValue::UnitType::Millimeters: |
| + return LengthTypeMM; |
| + case CSSPrimitiveValue::UnitType::Inches: |
| + return LengthTypeIN; |
| + case CSSPrimitiveValue::UnitType::Points: |
| + return LengthTypePT; |
| + case CSSPrimitiveValue::UnitType::Picas: |
| + return LengthTypePC; |
| + default: |
| + return LengthTypeUnknown; |
| + } |
| +} |
| } // namespace |
| SVGLengthType SVGLengthTearOff::unitType() |
| { |
| - return hasExposedLengthUnit() ? target()->unitType() : LengthTypeUnknown; |
| + return hasExposedLengthUnit() ? toSVGLengthType(target()->typeWithCalcResolved()) : LengthTypeUnknown; |
| } |
| SVGLengthMode SVGLengthTearOff::unitMode() |
| @@ -139,12 +174,12 @@ void SVGLengthTearOff::newValueSpecifiedUnits(unsigned short unitType, float val |
| return; |
| } |
| - if (unitType == LengthTypeUnknown || unitType > LengthTypePC) { |
| + if (!isValidLengthUnit(unitType)) { |
| 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 +190,19 @@ void SVGLengthTearOff::convertToSpecifiedUnits(unsigned short unitType, Exceptio |
| return; |
| } |
| - if (unitType == LengthTypeUnknown || unitType > LengthTypePC) { |
| + if (!isValidLengthUnit(unitType)) { |
| 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(); |
| } |