void SVGScriptElement::dispatchLoadEvent() { bool externalResourcesRequired = externalResourcesRequiredBaseValue(); if (m_data.createdByParser()) ASSERT(externalResourcesRequired != m_data.haveFiredLoadEvent()); else if (m_data.haveFiredLoadEvent()) { // If we've already fired an load event and externalResourcesRequired is set to 'true' // externalResourcesRequired has been modified while loading the <script>. Don't dispatch twice. if (externalResourcesRequired) return; } // HTML and SVG differ completly in the 'onload' event handling of <script> elements. // HTML fires the 'load' event after it sucessfully loaded a remote resource, otherwhise an error event. // SVG fires the SVGLoad event immediately after parsing the <script> element, if externalResourcesRequired // is set to 'false', otherwhise it dispatches the 'SVGLoad' event just after loading the remote resource. if (externalResourcesRequired) { ASSERT(!m_data.haveFiredLoadEvent()); // Dispatch SVGLoad event m_data.setHaveFiredLoadEvent(true); ASSERT(haveLoadedRequiredResources()); sendSVGLoadEventIfPossible(); } }
void SVGSVGElement::finishParsingChildren() { SVGGraphicsElement::finishParsingChildren(); // The outermost SVGSVGElement SVGLoad event is fired through Document::dispatchWindowLoadEvent. if (isOutermostSVGSVGElement()) return; // finishParsingChildren() is called when the close tag is reached for an element (e.g. </svg>) // we send SVGLoad events here if we can, otherwise they'll be sent when any required loads finish sendSVGLoadEventIfPossible(); }
void SVGScriptElement::insertedIntoDocument() { SVGElement::insertedIntoDocument(); ScriptElement::insertedIntoDocument(m_data, sourceAttributeValue()); if (m_data.createdByParser()) return; // Eventually send SVGLoad event now for the dynamically inserted script element if (!externalResourcesRequiredBaseValue()) { m_data.setHaveFiredLoadEvent(true); sendSVGLoadEventIfPossible(); } }
void SVGScriptElement::svgAttributeChanged(const QualifiedName& attrName) { SVGElement::svgAttributeChanged(attrName); if (SVGURIReference::isKnownAttribute(attrName)) handleSourceAttribute(m_data, href()); else if (SVGExternalResourcesRequired::isKnownAttribute(attrName)) { // Handle dynamic updates of the 'externalResourcesRequired' attribute. Only possible case: changing from 'true' to 'false' // causes an immediate dispatch of the SVGLoad event. If the attribute value was 'false' before inserting the script element // in the document, the SVGLoad event has already been dispatched. if (!externalResourcesRequiredBaseValue() && !m_data.haveFiredLoadEvent() && !m_data.createdByParser()) { m_data.setHaveFiredLoadEvent(true); ASSERT(haveLoadedRequiredResources()); sendSVGLoadEventIfPossible(); } } }