SVGExternalResourcesRequired.cpp [plain text]
#include "config.h"
#include "SVGExternalResourcesRequired.h"
#include "Attr.h"
#include "SVGElement.h"
#include "SVGNames.h"
namespace WebCore {
bool SVGExternalResourcesRequired::parseAttribute(const QualifiedName& name, const AtomicString& value)
{
if (name == SVGNames::externalResourcesRequiredAttr) {
setExternalResourcesRequiredBaseValue(value == "true");
return true;
}
return false;
}
bool SVGExternalResourcesRequired::isKnownAttribute(const QualifiedName& attrName)
{
return attrName == SVGNames::externalResourcesRequiredAttr;
}
void SVGExternalResourcesRequired::addSupportedAttributes(HashSet<QualifiedName>& supportedAttributes)
{
supportedAttributes.add(SVGNames::externalResourcesRequiredAttr);
}
bool SVGExternalResourcesRequired::handleAttributeChange(SVGElement* targetElement, const QualifiedName& attrName)
{
ASSERT(targetElement);
if (!isKnownAttribute(attrName))
return false;
if (!targetElement->inDocument())
return true;
if (!externalResourcesRequiredBaseValue() && !haveFiredLoadEvent() && !isParserInserted()) {
setHaveFiredLoadEvent(true);
ASSERT(targetElement->haveLoadedRequiredResources());
targetElement->sendSVGLoadEventIfPossible();
}
return true;
}
void SVGExternalResourcesRequired::dispatchLoadEvent(SVGElement* targetElement)
{
bool externalResourcesRequired = externalResourcesRequiredBaseValue();
if (isParserInserted())
ASSERT(externalResourcesRequired != haveFiredLoadEvent());
else if (haveFiredLoadEvent())
return;
if (!externalResourcesRequired)
return;
ASSERT(!haveFiredLoadEvent());
setHaveFiredLoadEvent(true);
ASSERT(targetElement->haveLoadedRequiredResources());
targetElement->sendSVGLoadEventIfPossible();
}
void SVGExternalResourcesRequired::insertedIntoDocument(SVGElement* targetElement)
{
if (isParserInserted())
return;
if (externalResourcesRequiredBaseValue())
return;
setHaveFiredLoadEvent(true);
targetElement->sendSVGLoadEventIfPossibleAsynchronously();
}
void SVGExternalResourcesRequired::finishParsingChildren()
{
if (!externalResourcesRequiredBaseValue())
setHaveFiredLoadEvent(true);
}
bool SVGExternalResourcesRequired::haveLoadedRequiredResources() const
{
return !externalResourcesRequiredBaseValue() || haveFiredLoadEvent();
}
}