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(); |
} |