void HTMLImageLoader::setImage(CachedImage *newImage) { CachedImage *oldImage = m_image; if (newImage != oldImage) { setLoadingImage(newImage); m_firedLoad = true; m_imageComplete = true; if (newImage) newImage->ref(this); if (oldImage) oldImage->deref(this); } if (RenderObject* renderer = element()->renderer()) if (renderer->isImage()) static_cast<RenderImage*>(renderer)->resetAnimation(); }
void HTMLImageLoader::updateFromElement() { // If we're not making renderers for the page, then don't load images. We don't want to slow // down the raw HTML parsing case by loading images we don't intend to display. Element* elem = element(); Document* doc = elem->document(); if (!doc->renderer()) return; AtomicString attr = elem->getAttribute(elem->hasLocalName(objectTag) ? dataAttr : srcAttr); // Treat a lack of src or empty string for src as no image at all. CachedImage *newImage = 0; if (!attr.isEmpty()) { if (m_loadManually) { doc->docLoader()->setAutoLoadImages(false); newImage = new CachedImage(doc->docLoader(), parseURL(attr), false /* not for cache */); newImage->setLoading(true); newImage->setDocLoader(doc->docLoader()); doc->docLoader()->m_docResources.set(newImage->url(), newImage); } else newImage = doc->docLoader()->requestImage(parseURL(attr)); } CachedImage *oldImage = m_image; if (newImage != oldImage) { #ifdef INSTRUMENT_LAYOUT_SCHEDULING if (!doc->ownerElement() && newImage) printf("Image requested at %d\n", doc->elapsedTime()); #endif setLoadingImage(newImage); if (newImage) newImage->ref(this); if (oldImage) oldImage->deref(this); } if (RenderObject* renderer = elem->renderer()) if (renderer->isImage()) static_cast<RenderImage*>(renderer)->resetAnimation(); }