Chromium Code Reviews| Index: Source/core/loader/ImageLoader.cpp |
| diff --git a/Source/core/loader/ImageLoader.cpp b/Source/core/loader/ImageLoader.cpp |
| index bc644d28f527cc3c07388081a03ecb29cf9ce77f..0fcd668cef6a4395246fdc4fb76e51f136b59246 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 PassOwnPtrWillBeRawPtr<Task> create(ImageLoader* loader, UpdateFromElementBehavior updateBehavior) |
|
sof
2014/07/14 20:38:09
blink::WebThread::Task is not on the heap, so you
|
| { |
| - 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 |