| Index: Source/core/loader/ImageLoader.cpp | 
| diff --git a/Source/core/loader/ImageLoader.cpp b/Source/core/loader/ImageLoader.cpp | 
| index 83cae6a7b0ca6d4735bbbe13020205d881635d7c..332e942848d0f495f2f59bf256e76c94ce2b6498 100644 | 
| --- a/Source/core/loader/ImageLoader.cpp | 
| +++ b/Source/core/loader/ImageLoader.cpp | 
| @@ -167,6 +167,11 @@ void ImageLoader::dispose() | 
| if (m_pendingTask) | 
| m_pendingTask->clearLoader(); | 
|  | 
| +#if ENABLE(OILPAN) | 
| +    for (const auto& client : m_clients) | 
| +        willRemoveClient(*client); | 
| +#endif | 
| + | 
| if (m_image) | 
| m_image->removeClient(this); | 
|  | 
| @@ -179,9 +184,27 @@ void ImageLoader::dispose() | 
| errorEventSender().cancelEvent(this); | 
| } | 
|  | 
| +#if ENABLE(OILPAN) | 
| +void ImageLoader::clearWeakMembers(Visitor* visitor) | 
| +{ | 
| +    Vector<ImageLoaderClient*> deadClients; | 
| +    for (const auto& client : m_clients) { | 
| +        if (!Heap::isHeapObjectAlive(client)) { | 
| +            willRemoveClient(*client); | 
| +            deadClients.append(client); | 
| +        } | 
| +    } | 
| +    for (unsigned i = 0; i < deadClients.size(); ++i) | 
| +        m_clients.remove(deadClients[i]); | 
| +} | 
| +#endif | 
| + | 
| DEFINE_TRACE(ImageLoader) | 
| { | 
| visitor->trace(m_element); | 
| +#if ENABLE(OILPAN) | 
| +    visitor->template registerWeakMembers<ImageLoader, &ImageLoader::clearWeakMembers>(this); | 
| +#endif | 
| } | 
|  | 
| void ImageLoader::setImage(ImageResource* newImage) | 
| @@ -593,11 +616,7 @@ void ImageLoader::addClient(ImageLoaderClient* client) | 
| if (m_image && !m_highPriorityClientCount++) | 
| memoryCache()->updateDecodedResource(m_image.get(), UpdateForPropertyChange, MemoryCacheLiveResourcePriorityHigh); | 
| } | 
| -#if ENABLE(OILPAN) | 
| -    m_clients.add(client, adoptPtr(new ImageLoaderClientRemover(*this, *client))); | 
| -#else | 
| m_clients.add(client); | 
| -#endif | 
| } | 
|  | 
| void ImageLoader::willRemoveClient(ImageLoaderClient& client) | 
| @@ -645,21 +664,10 @@ void ImageLoader::elementDidMoveToNewDocument() | 
|  | 
| void ImageLoader::sourceImageChanged() | 
| { | 
| -#if ENABLE(OILPAN) | 
| -    for (auto& client : m_clients) | 
| -        client.key->notifyImageSourceChanged(); | 
| -#else | 
| for (auto& client : m_clients) { | 
| ImageLoaderClient* handle = client; | 
| handle->notifyImageSourceChanged(); | 
| } | 
| -#endif | 
| } | 
|  | 
| -#if ENABLE(OILPAN) | 
| -ImageLoader::ImageLoaderClientRemover::~ImageLoaderClientRemover() | 
| -{ | 
| -    m_loader.willRemoveClient(m_client); | 
| -} | 
| -#endif | 
| -} | 
| +} // namespace blink | 
|  |