Index: third_party/WebKit/Source/core/loader/ImageLoader.cpp |
diff --git a/third_party/WebKit/Source/core/loader/ImageLoader.cpp b/third_party/WebKit/Source/core/loader/ImageLoader.cpp |
index 537c9594f25b59ef42096cf9a7c798687ed1b169..d1e07dce041529239dd906f371c9e4d897ec616e 100644 |
--- a/third_party/WebKit/Source/core/loader/ImageLoader.cpp |
+++ b/third_party/WebKit/Source/core/loader/ImageLoader.cpp |
@@ -282,9 +282,6 @@ void ImageLoader::doUpdateFromElement(BypassMainWorldBehavior bypassBehavior, Up |
if (updateBehavior == UpdateForcedReload) { |
resourceRequest.setCachePolicy(WebCachePolicy::BypassingCache); |
resourceRequest.setLoFiState(WebURLRequest::LoFiOff); |
- // ImageLoader defers the load of images when in an ImageDocument. |
- // Don't defer this load on a forced reload. |
- m_loadingImageDocument = false; |
} |
if (referrerPolicy != ReferrerPolicyDefault) |
@@ -295,18 +292,7 @@ void ImageLoader::doUpdateFromElement(BypassMainWorldBehavior bypassBehavior, Up |
FetchRequest request(resourceRequest, element()->localName(), resourceLoaderOptions); |
configureRequest(request, bypassBehavior, *m_element, document.clientHintsPreferences()); |
- // Prevent the immediate creation of a ResourceLoader (and therefore a network |
- // request) for ImageDocument loads. In this case, the image contents have already |
- // been requested as a main resource and ImageDocumentParser will take care of |
- // funneling the main resource bytes into the ImageResource. |
- if (m_loadingImageDocument) { |
- request.setDefer(FetchRequest::DeferredByClient); |
- request.setContentSecurityCheck(DoNotCheckContentSecurityPolicy); |
- } |
- |
newImage = ImageResource::fetch(request, document.fetcher()); |
- if (m_loadingImageDocument && newImage) |
- newImage->setStatus(Resource::Pending); |
if (!newImage && !pageIsBeingDismissed(&document)) { |
crossSiteOrCSPViolationOccurred(imageSourceURL); |
@@ -374,6 +360,17 @@ void ImageLoader::updateFromElement(UpdateFromElementBehavior updateBehavior, Re |
if (!m_failedLoadURL.isEmpty() && imageSourceURL == m_failedLoadURL) |
return; |
+ // Prevent the creation of a ResourceLoader (and therefore a network |
+ // request) for ImageDocument loads. In this case, the image contents have already |
+ // been requested as a main resource and ImageDocumentParser will take care of |
+ // funneling the main resource bytes into m_image, so just create an ImageResource |
+ // to be populated later. |
+ if (m_loadingImageDocument && updateBehavior != UpdateForcedReload) { |
+ setImage(ImageResource::create(imageSourceToKURL(m_element->imageSourceURL()))); |
+ m_image->setStatus(Resource::Pending); |
+ return; |
+ } |
+ |
// If we have a pending task, we have to clear it -- either we're |
// now loading immediately, or we need to reset the task's state. |
if (m_pendingTask) { |
@@ -432,7 +429,7 @@ bool ImageLoader::shouldLoadImmediately(const KURL& url) const |
if (resource && !resource->errorOccurred()) |
return true; |
} |
- return (m_loadingImageDocument || isHTMLObjectElement(m_element) || isHTMLEmbedElement(m_element) || url.protocolIsData()); |
+ return (isHTMLObjectElement(m_element) || isHTMLEmbedElement(m_element) || url.protocolIsData()); |
} |
void ImageLoader::imageNotifyFinished(ImageResource* resource) |