Chromium Code Reviews| Index: Source/core/svg/SVGEnumeration.h |
| diff --git a/Source/core/svg/SVGEnumeration.h b/Source/core/svg/SVGEnumeration.h |
| index 44cacbc5212413fff8d5741bfe1209d139782bb3..f2f9461cfb062f45d28b889aca6a56069eaeefa8 100644 |
| --- a/Source/core/svg/SVGEnumeration.h |
| +++ b/Source/core/svg/SVGEnumeration.h |
| @@ -46,12 +46,9 @@ public: |
| virtual ~SVGEnumerationBase(); |
| - unsigned short value() const { return m_value; } |
| + unsigned short value() const { return m_value <= maxExposedEnumValue() ? m_value : 0; } |
| void setValue(unsigned short, ExceptionState&); |
| - // This assumes that |m_entries| are sorted. |
| - unsigned short maxEnumValue() const { return m_entries.last().first; } |
| - |
| // SVGPropertyBase: |
| virtual PassRefPtr<SVGEnumerationBase> clone() const = 0; |
| virtual PassRefPtr<SVGPropertyBase> cloneForAnimation(const String&) const OVERRIDE; |
| @@ -68,23 +65,38 @@ public: |
| // Ensure that |SVGAnimatedEnumerationBase::setBaseVal| is used instead of |SVGAnimatedProperty<SVGEnumerationBase>::setBaseVal|. |
| void setValue(unsigned short) { ASSERT_NOT_REACHED(); } |
| + static unsigned short valueOfLastEnum(const StringEntries& entries) { return entries.last().first; } |
|
pdr.
2014/08/01 21:58:22
Should this be private?
|
| + |
| protected: |
| - SVGEnumerationBase(unsigned short value, const StringEntries& entries) |
| + SVGEnumerationBase(unsigned short value, const StringEntries& entries, unsigned short maxExposed) |
| : SVGPropertyBase(classType()) |
| , m_value(value) |
| + , m_maxExposed(maxExposed) |
| , m_entries(entries) |
| { |
| } |
| + // This is the maximum value of all the internal enumeration values. |
| + // This assumes that |m_entries| are sorted. |
| + unsigned short maxInternalEnumValue() const { return valueOfLastEnum(m_entries); } |
| + |
| + // This is the maximum value that is exposed as an IDL constant on the relevant interface. |
| + unsigned short maxExposedEnumValue() const { return m_maxExposed; } |
| + |
| // Used by SVGMarkerOrientEnumeration. |
| virtual void notifyChange() { } |
| unsigned short m_value; |
| + const unsigned short m_maxExposed; |
| const StringEntries& m_entries; |
| }; |
| typedef SVGEnumerationBase::StringEntries SVGEnumerationStringEntries; |
| template<typename Enum> const SVGEnumerationStringEntries& getStaticStringEntries(); |
| +template<typename Enum> unsigned short getMaxExposedEnumValue() |
| +{ |
| + return SVGEnumerationBase::valueOfLastEnum(getStaticStringEntries<Enum>()); |
| +} |
| template<typename Enum> |
| class SVGEnumeration : public SVGEnumerationBase { |
| @@ -105,7 +117,7 @@ public: |
| Enum enumValue() const |
| { |
| - ASSERT(m_value <= maxEnumValue()); |
| + ASSERT(m_value <= maxInternalEnumValue()); |
| return static_cast<Enum>(m_value); |
| } |
| @@ -117,7 +129,7 @@ public: |
| protected: |
| explicit SVGEnumeration(Enum newValue) |
| - : SVGEnumerationBase(newValue, getStaticStringEntries<Enum>()) |
| + : SVGEnumerationBase(newValue, getStaticStringEntries<Enum>(), getMaxExposedEnumValue<Enum>()) |
| { |
| } |
| }; |