| Index: Source/core/svg/SVGTests.cpp
|
| diff --git a/Source/core/svg/SVGTests.cpp b/Source/core/svg/SVGTests.cpp
|
| index add25eb087d2ae7ba3dd8657a670434573148f7b..11a8e75874e73d1ed587b6c530fa1c20a26b797c 100644
|
| --- a/Source/core/svg/SVGTests.cpp
|
| +++ b/Source/core/svg/SVGTests.cpp
|
| @@ -29,67 +29,16 @@
|
|
|
| namespace WebCore {
|
|
|
| -// Define custom non-animated property 'requiredFeatures'.
|
| -const SVGPropertyInfo* SVGTests::requiredFeaturesPropertyInfo()
|
| +SVGTests::SVGTests(SVGElement* contextElement)
|
| + : m_requiredFeatures(SVGStaticStringList::create(contextElement, SVGNames::requiredFeaturesAttr))
|
| + , m_requiredExtensions(SVGStaticStringList::create(contextElement, SVGNames::requiredExtensionsAttr))
|
| + , m_systemLanguage(SVGStaticStringList::create(contextElement, SVGNames::systemLanguageAttr))
|
| {
|
| - static const SVGPropertyInfo* s_propertyInfo = 0;
|
| - if (!s_propertyInfo) {
|
| - s_propertyInfo = new SVGPropertyInfo(AnimatedUnknown,
|
| - PropertyIsReadWrite,
|
| - SVGNames::requiredFeaturesAttr,
|
| - SVGNames::requiredFeaturesAttr.localName(),
|
| - &SVGElement::synchronizeRequiredFeatures,
|
| - 0);
|
| - }
|
| - return s_propertyInfo;
|
| -}
|
| -
|
| -// Define custom non-animated property 'requiredExtensions'.
|
| -const SVGPropertyInfo* SVGTests::requiredExtensionsPropertyInfo()
|
| -{
|
| - static const SVGPropertyInfo* s_propertyInfo = 0;
|
| - if (!s_propertyInfo) {
|
| - s_propertyInfo = new SVGPropertyInfo(AnimatedUnknown,
|
| - PropertyIsReadWrite,
|
| - SVGNames::requiredExtensionsAttr,
|
| - SVGNames::requiredExtensionsAttr.localName(),
|
| - &SVGElement::synchronizeRequiredExtensions,
|
| - 0);
|
| - }
|
| - return s_propertyInfo;
|
| -}
|
| -
|
| -// Define custom non-animated property 'systemLanguage'.
|
| -const SVGPropertyInfo* SVGTests::systemLanguagePropertyInfo()
|
| -{
|
| - static const SVGPropertyInfo* s_propertyInfo = 0;
|
| - if (!s_propertyInfo) {
|
| - s_propertyInfo = new SVGPropertyInfo(AnimatedUnknown,
|
| - PropertyIsReadWrite,
|
| - SVGNames::systemLanguageAttr,
|
| - SVGNames::systemLanguageAttr.localName(),
|
| - &SVGElement::synchronizeSystemLanguage,
|
| - 0);
|
| - }
|
| - return s_propertyInfo;
|
| -}
|
| -
|
| -SVGTests::SVGTests()
|
| - : m_requiredFeatures(SVGNames::requiredFeaturesAttr)
|
| - , m_requiredExtensions(SVGNames::requiredExtensionsAttr)
|
| - , m_systemLanguage(SVGNames::systemLanguageAttr)
|
| -{
|
| -}
|
| + ASSERT(contextElement);
|
|
|
| -SVGAttributeToPropertyMap& SVGTests::attributeToPropertyMap()
|
| -{
|
| - DEFINE_STATIC_LOCAL(SVGAttributeToPropertyMap, map, ());
|
| - if (!map.isEmpty())
|
| - return map;
|
| - map.addProperty(requiredFeaturesPropertyInfo());
|
| - map.addProperty(requiredExtensionsPropertyInfo());
|
| - map.addProperty(systemLanguagePropertyInfo());
|
| - return map;
|
| + contextElement->addToPropertyMap(m_requiredFeatures);
|
| + contextElement->addToPropertyMap(m_requiredExtensions);
|
| + contextElement->addToPropertyMap(m_systemLanguage);
|
| }
|
|
|
| bool SVGTests::hasExtension(const String&) const
|
| @@ -100,21 +49,34 @@ bool SVGTests::hasExtension(const String&) const
|
|
|
| bool SVGTests::isValid() const
|
| {
|
| - unsigned featuresSize = m_requiredFeatures.value.size();
|
| - for (unsigned i = 0; i < featuresSize; ++i) {
|
| - String value = m_requiredFeatures.value.at(i);
|
| - if (value.isEmpty() || !DOMImplementation::hasFeature(value, String()))
|
| - return false;
|
| + if (m_requiredFeatures->isSpecified()) {
|
| + const Vector<String>& requiredFeatures = m_requiredFeatures->value()->values();
|
| + Vector<String>::const_iterator it = requiredFeatures.begin();
|
| + Vector<String>::const_iterator itEnd = requiredFeatures.end();
|
| + for (; it != itEnd; ++it) {
|
| + if (it->isEmpty() || !DOMImplementation::hasFeature(*it, String()))
|
| + return false;
|
| + }
|
| }
|
|
|
| - unsigned systemLanguageSize = m_systemLanguage.value.size();
|
| - for (unsigned i = 0; i < systemLanguageSize; ++i) {
|
| - String value = m_systemLanguage.value.at(i);
|
| - if (value != defaultLanguage().string().substring(0, 2))
|
| + if (m_systemLanguage->isSpecified()) {
|
| + bool matchFound = false;
|
| +
|
| + const Vector<String>& systemLanguage = m_systemLanguage->value()->values();
|
| + Vector<String>::const_iterator it = systemLanguage.begin();
|
| + Vector<String>::const_iterator itEnd = systemLanguage.end();
|
| + for (; it != itEnd; ++it) {
|
| + if (*it == defaultLanguage().string().substring(0, 2)) {
|
| + matchFound = true;
|
| + break;
|
| + }
|
| + }
|
| +
|
| + if (!matchFound)
|
| return false;
|
| }
|
|
|
| - if (!m_requiredExtensions.value.isEmpty())
|
| + if (!m_requiredExtensions->value()->values().isEmpty())
|
| return false;
|
|
|
| return true;
|
| @@ -122,20 +84,22 @@ bool SVGTests::isValid() const
|
|
|
| bool SVGTests::parseAttribute(const QualifiedName& name, const AtomicString& value)
|
| {
|
| - if (name == SVGNames::requiredFeaturesAttr) {
|
| - m_requiredFeatures.value.reset(value);
|
| - return true;
|
| - }
|
| - if (name == SVGNames::requiredExtensionsAttr) {
|
| - m_requiredExtensions.value.reset(value);
|
| - return true;
|
| - }
|
| - if (name == SVGNames::systemLanguageAttr) {
|
| - m_systemLanguage.value.reset(value);
|
| - return true;
|
| - }
|
| + // FIXME: Should handle exceptions here.
|
| + // This is safe as of now, as the current impl of SVGStringList::setValueAsString never fails.
|
| + SVGParsingError parseError = NoError;
|
| +
|
| + if (name == SVGNames::requiredFeaturesAttr)
|
| + m_requiredFeatures->setBaseValueAsString(value, parseError);
|
| + else if (name == SVGNames::requiredExtensionsAttr)
|
| + m_requiredExtensions->setBaseValueAsString(value, parseError);
|
| + else if (name == SVGNames::systemLanguageAttr)
|
| + m_systemLanguage->setBaseValueAsString(value, parseError);
|
| + else
|
| + return false;
|
|
|
| - return false;
|
| + ASSERT(parseError == NoError);
|
| +
|
| + return true;
|
| }
|
|
|
| bool SVGTests::isKnownAttribute(const QualifiedName& attrName)
|
| @@ -152,49 +116,4 @@ void SVGTests::addSupportedAttributes(HashSet<QualifiedName>& supportedAttribute
|
| supportedAttributes.add(SVGNames::systemLanguageAttr);
|
| }
|
|
|
| -void SVGTests::synchronizeRequiredFeatures(SVGElement* contextElement)
|
| -{
|
| - ASSERT(contextElement);
|
| - if (!m_requiredFeatures.shouldSynchronize)
|
| - return;
|
| - AtomicString value(m_requiredFeatures.value.valueAsString());
|
| - m_requiredFeatures.synchronize(contextElement, requiredFeaturesPropertyInfo()->attributeName, value);
|
| -}
|
| -
|
| -void SVGTests::synchronizeRequiredExtensions(SVGElement* contextElement)
|
| -{
|
| - ASSERT(contextElement);
|
| - if (!m_requiredExtensions.shouldSynchronize)
|
| - return;
|
| - AtomicString value(m_requiredExtensions.value.valueAsString());
|
| - m_requiredExtensions.synchronize(contextElement, requiredExtensionsPropertyInfo()->attributeName, value);
|
| -}
|
| -
|
| -void SVGTests::synchronizeSystemLanguage(SVGElement* contextElement)
|
| -{
|
| - ASSERT(contextElement);
|
| - if (!m_systemLanguage.shouldSynchronize)
|
| - return;
|
| - AtomicString value(m_systemLanguage.value.valueAsString());
|
| - m_systemLanguage.synchronize(contextElement, systemLanguagePropertyInfo()->attributeName, value);
|
| -}
|
| -
|
| -SVGStringList& SVGTests::requiredFeatures()
|
| -{
|
| - m_requiredFeatures.shouldSynchronize = true;
|
| - return m_requiredFeatures.value;
|
| -}
|
| -
|
| -SVGStringList& SVGTests::requiredExtensions()
|
| -{
|
| - m_requiredExtensions.shouldSynchronize = true;
|
| - return m_requiredExtensions.value;
|
| -}
|
| -
|
| -SVGStringList& SVGTests::systemLanguage()
|
| -{
|
| - m_systemLanguage.shouldSynchronize = true;
|
| - return m_systemLanguage.value;
|
| -}
|
| -
|
| }
|
|
|