Index: Source/core/loader/ImageLoader.h |
diff --git a/Source/core/loader/ImageLoader.h b/Source/core/loader/ImageLoader.h |
index 1e0cdc426af7bc28729f3a8821b069c885551461..9ab71e6b77e164952294926d71122f5ff50858a4 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,8 +134,12 @@ private: |
void willRemoveClient(ImageLoaderClient&); |
- Element* m_element; |
+ RawPtrWillBeMember<Element> m_element; |
ResourcePtr<ImageResource> m_image; |
+ // FIXME: Oilpan: We might be able to remove this Persistent hack when |
+ // ImageResourceClient is traceable. |
+ GC_PLUGIN_IGNORE("http://crbug.com/353083") |
+ RefPtrWillBePersistent<Element> m_keepAlive; |
#if ENABLE(OILPAN) |
class ImageLoaderClientRemover { |
public: |
@@ -146,6 +151,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/10 04:15:13
I'm curious why you need to make this map a persis
tkent
2014/06/10 05:32:46
Though I don't remember the precise mechanism, we
haraken
2014/06/10 05:54:10
Given that ImageLoaderClientRemover is off heap, ~
|
#else |
HashSet<ImageLoaderClient*> m_clients; |