Chromium Code Reviews| Index: Source/core/loader/ImageLoader.h |
| diff --git a/Source/core/loader/ImageLoader.h b/Source/core/loader/ImageLoader.h |
| index 1e0cdc426af7bc28729f3a8821b069c885551461..7ed593872f8c2c7482146ad0aa7b5796f205d52b 100644 |
| --- a/Source/core/loader/ImageLoader.h |
| +++ b/Source/core/loader/ImageLoader.h |
| @@ -55,10 +55,11 @@ class RenderImageResource; |
| template<typename T> class EventSender; |
| typedef EventSender<ImageLoader> ImageEventSender; |
| -class ImageLoader : public ImageResourceClient { |
| +class ImageLoader : public NoBaseWillBeGarbageCollectedFinalized<ImageLoader>, public ImageResourceClient { |
| public: |
| explicit ImageLoader(Element*); |
| virtual ~ImageLoader(); |
| + void trace(Visitor*); |
| enum LoadType { |
| LoadNormally, |
| @@ -133,9 +134,14 @@ private: |
| void willRemoveClient(ImageLoaderClient&); |
| - Element* m_element; |
| + RawPtrWillBeMember<Element> m_element; |
| ResourcePtr<ImageResource> m_image; |
| #if ENABLE(OILPAN) |
| + // FIXME: Oilpan: We might be able to remove this hack when |
| + // ImageResourceClient is traceable. |
| + GC_PLUGIN_IGNORE("http://crbug.com/353083") |
| + Persistent<ImageLoader> m_keepAlive; |
| + |
| class ImageLoaderClientRemover { |
| public: |
| ImageLoaderClientRemover(ImageLoader& loader, ImageLoaderClient& client) : m_loader(loader), m_client(client) { } |
| @@ -146,6 +152,9 @@ private: |
| ImageLoaderClient& m_client; |
| }; |
| friend class ImageLoaderClientRemover; |
| + // Oilpan: This ImageLoader object must outlive its clients because they |
| + // need to call ImageLoader::willRemoveClient before they die. |
| + GC_PLUGIN_IGNORE("http://crbug.com/353083") |
| PersistentHeapHashMap<WeakMember<ImageLoaderClient>, OwnPtr<ImageLoaderClientRemover> > m_clients; |
|
haraken
2014/06/09 11:12:34
Why does this need to be a Persistent? It looks st
tkent
2014/06/10 01:43:09
The comment above explains it.
Tracing this is my
|
| #else |
| HashSet<ImageLoaderClient*> m_clients; |