Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1191)

Unified Diff: Source/core/loader/ImageLoader.cpp

Issue 369423002: Have srcset respond to viewport changes (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: more oilpan Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/loader/ImageLoader.h ('k') | Source/core/rendering/RenderImage.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/loader/ImageLoader.cpp
diff --git a/Source/core/loader/ImageLoader.cpp b/Source/core/loader/ImageLoader.cpp
index bc644d28f527cc3c07388081a03ecb29cf9ce77f..62480adc0fd58182a8fbdbeb2c16d89f36b07818 100644
--- a/Source/core/loader/ImageLoader.cpp
+++ b/Source/core/loader/ImageLoader.cpp
@@ -72,22 +72,23 @@ static ImageLoader::BypassMainWorldBehavior shouldBypassMainWorldCSP(ImageLoader
class ImageLoader::Task : public blink::WebThread::Task {
public:
- static PassOwnPtr<Task> create(ImageLoader* loader)
+ static PassOwnPtr<Task> create(ImageLoader* loader, UpdateFromElementBehavior updateBehavior)
{
- return adoptPtr(new Task(loader));
+ return adoptPtr(new Task(loader, updateBehavior));
}
- Task(ImageLoader* loader)
+ Task(ImageLoader* loader, UpdateFromElementBehavior updateBehavior)
: m_loader(loader)
, m_shouldBypassMainWorldCSP(shouldBypassMainWorldCSP(loader))
, m_weakFactory(this)
+ , m_updateBehavior(updateBehavior)
{
}
virtual void run() OVERRIDE
{
if (m_loader) {
- m_loader->doUpdateFromElement(m_shouldBypassMainWorldCSP);
+ m_loader->doUpdateFromElement(m_shouldBypassMainWorldCSP, m_updateBehavior);
}
}
@@ -105,6 +106,7 @@ private:
ImageLoader* m_loader;
BypassMainWorldBehavior m_shouldBypassMainWorldCSP;
WeakPtrFactory<Task> m_weakFactory;
+ UpdateFromElementBehavior m_updateBehavior;
};
ImageLoader::ImageLoader(Element* element)
@@ -210,15 +212,15 @@ inline void ImageLoader::clearFailedLoadURL()
m_failedLoadURL = AtomicString();
}
-inline void ImageLoader::enqueueImageLoadingMicroTask()
+inline void ImageLoader::enqueueImageLoadingMicroTask(UpdateFromElementBehavior updateBehavior)
{
- OwnPtr<Task> task = Task::create(this);
+ OwnPtr<Task> task = Task::create(this, updateBehavior);
m_pendingTask = task->createWeakPtr();
Microtask::enqueueMicrotask(task.release());
m_loadDelayCounter = IncrementLoadEventDelayCount::create(m_element->document());
}
-void ImageLoader::doUpdateFromElement(BypassMainWorldBehavior bypassBehavior)
+void ImageLoader::doUpdateFromElement(BypassMainWorldBehavior bypassBehavior, UpdateFromElementBehavior updateBehavior)
{
// We don't need to call clearLoader here: Either we were called from the
// task, or our caller updateFromElement cleared the task's loader (and set
@@ -288,6 +290,9 @@ void ImageLoader::doUpdateFromElement(BypassMainWorldBehavior bypassBehavior)
if (oldImage)
oldImage->removeClient(this);
+ } else if (updateBehavior == UpdateForce) {
+ if (m_element->renderer() && m_element->renderer()->isImage())
+ toRenderImage(m_element->renderer())->intrinsicSizeChanged();
}
if (RenderImageResource* imageResource = renderImageResource())
@@ -298,11 +303,11 @@ void ImageLoader::doUpdateFromElement(BypassMainWorldBehavior bypassBehavior)
updatedHasPendingEvent();
}
-void ImageLoader::updateFromElement(UpdateFromElementBehavior behavior, LoadType loadType)
+void ImageLoader::updateFromElement(UpdateFromElementBehavior updateBehavior, LoadType loadType)
{
AtomicString imageSourceURL = m_element->imageSourceURL();
- if (behavior == UpdateIgnorePreviousError)
+ if (updateBehavior == UpdateIgnorePreviousError)
clearFailedLoadURL();
if (!m_failedLoadURL.isEmpty() && imageSourceURL == m_failedLoadURL)
@@ -317,10 +322,10 @@ void ImageLoader::updateFromElement(UpdateFromElementBehavior behavior, LoadType
KURL url = imageSourceToKURL(imageSourceURL);
if (imageSourceURL.isNull() || url.isNull() || shouldLoadImmediately(url, loadType)) {
- doUpdateFromElement(DoNotBypassMainWorldCSP);
+ doUpdateFromElement(DoNotBypassMainWorldCSP, updateBehavior);
return;
}
- enqueueImageLoadingMicroTask();
+ enqueueImageLoadingMicroTask(updateBehavior);
}
KURL ImageLoader::imageSourceToKURL(AtomicString imageSourceURL) const
« no previous file with comments | « Source/core/loader/ImageLoader.h ('k') | Source/core/rendering/RenderImage.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698