| Index: Source/core/svg/SVGLengthTearOff.cpp
|
| diff --git a/Source/core/svg/SVGLengthTearOff.cpp b/Source/core/svg/SVGLengthTearOff.cpp
|
| index bf29952cee2d56b5a17dbf0eaaf5fdd9b13ef7bb..fdc18e5f1baee2045a7295d540d8d0a7f0afeb71 100644
|
| --- a/Source/core/svg/SVGLengthTearOff.cpp
|
| +++ b/Source/core/svg/SVGLengthTearOff.cpp
|
| @@ -40,10 +40,9 @@ 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 != CSSPrimitiveValue::CSS_UNKNOWN && type <= CSSPrimitiveValue::CSS_PC;
|
| }
|
|
|
| inline bool canResolveRelativeUnits(const SVGElement* contextElement)
|
| @@ -51,11 +50,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::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 +173,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 +189,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();
|
| }
|
|
|
|
|