void ImageLoader::updateLayoutObject() { LayoutImageResource* imageResource = layoutImageResource(); if (!imageResource) return; // Only update the layoutObject if it doesn't have an image or if what we have // is a complete image. This prevents flickering in the case where a dynamic // change is happening between two images. ImageResource* cachedImage = imageResource->cachedImage(); if (m_image != cachedImage && (m_imageComplete || !cachedImage)) imageResource->setImageResource(m_image.get()); }
void HTMLImageElement::attach(const AttachContext& context) { HTMLElement::attach(context); if (layoutObject() && layoutObject()->isImage()) { LayoutImage* layoutImage = toLayoutImage(layoutObject()); LayoutImageResource* layoutImageResource = layoutImage->imageResource(); if (m_isFallbackImage) { float deviceScaleFactor = blink::deviceScaleFactor(layoutImage->frame()); pair<Image*, float> brokenImageAndImageScaleFactor = ImageResource::brokenImage(deviceScaleFactor); ImageResource* newImageResource = new ImageResource(brokenImageAndImageScaleFactor.first); layoutImage->imageResource()->setImageResource(newImageResource); } if (layoutImageResource->hasImage()) return; if (!imageLoader().image() && !layoutImageResource->cachedImage()) return; layoutImageResource->setImageResource(imageLoader().image()); } }