| Index: Source/core/loader/ImageLoader.cpp
|
| diff --git a/Source/core/loader/ImageLoader.cpp b/Source/core/loader/ImageLoader.cpp
|
| index 9fbabee79622c331ba92247f7abdc00eb8968b9a..58b7a4031bf32f4bc5cb7963054baf0c133744ef 100644
|
| --- a/Source/core/loader/ImageLoader.cpp
|
| +++ b/Source/core/loader/ImageLoader.cpp
|
| @@ -75,6 +75,7 @@ ImageLoader::ImageLoader(Element* element)
|
| , m_imageComplete(true)
|
| , m_loadManually(false)
|
| , m_elementIsProtected(false)
|
| + , m_highPriorityClientCount(0)
|
| {
|
| }
|
|
|
| @@ -115,6 +116,7 @@ void ImageLoader::setImageWithoutConsideringPendingLoadEvent(CachedImage* newIma
|
| ASSERT(m_failedLoadURL.isEmpty());
|
| CachedImage* oldImage = m_image.get();
|
| if (newImage != oldImage) {
|
| + sourceImageChanged();
|
| m_image = newImage;
|
| if (m_hasPendingBeforeLoadEvent) {
|
| beforeLoadEventSender().cancelEvent(this);
|
| @@ -190,9 +192,11 @@ void ImageLoader::updateFromElement()
|
| m_hasPendingErrorEvent = true;
|
| errorEventSender().dispatchEventSoon(this);
|
| }
|
| -
|
| +
|
| CachedImage* oldImage = m_image.get();
|
| if (newImage != oldImage) {
|
| + sourceImageChanged();
|
| +
|
| if (m_hasPendingBeforeLoadEvent) {
|
| beforeLoadEventSender().cancelEvent(this);
|
| m_hasPendingBeforeLoadEvent = false;
|
| @@ -423,6 +427,26 @@ void ImageLoader::dispatchPendingErrorEvent()
|
| updatedHasPendingEvent();
|
| }
|
|
|
| +void ImageLoader::addClient(ImageLoaderClient* client)
|
| +{
|
| + if (client->isHighPriorityImageLoaderClient()) {
|
| + m_highPriorityClientCount++;
|
| + if (m_image)
|
| + m_image->setCacheLiveResourcePriority(CachedResource::CacheLiveResourcePriorityHigh);
|
| + }
|
| + m_clients.add(client);
|
| +}
|
| +void ImageLoader::removeClient(ImageLoaderClient* client)
|
| +{
|
| + if (client->isHighPriorityImageLoaderClient()) {
|
| + ASSERT(m_highPriorityClientCount);
|
| + m_highPriorityClientCount--;
|
| + if (m_image && !m_highPriorityClientCount)
|
| + m_image->setCacheLiveResourcePriority(CachedResource::CacheLiveResourcePriorityLow);
|
| + }
|
| + m_clients.remove(client);
|
| +}
|
| +
|
| void ImageLoader::dispatchPendingBeforeLoadEvents()
|
| {
|
| beforeLoadEventSender().dispatchPendingEvents();
|
| @@ -444,6 +468,15 @@ void ImageLoader::elementDidMoveToNewDocument()
|
| setImage(0);
|
| }
|
|
|
| +void ImageLoader::sourceImageChanged()
|
| +{
|
| + HashSet<ImageLoaderClient*>::iterator end = m_clients.end();
|
| + for (HashSet<ImageLoaderClient*>::iterator it = m_clients.begin(); it != end; ++it) {
|
| + ImageLoaderClient* handle = *it;
|
| + handle->notifyImageSourceChanged();
|
| + }
|
| +}
|
| +
|
| inline void ImageLoader::clearFailedLoadURL()
|
| {
|
| m_failedLoadURL = AtomicString();
|
|
|