Index: Source/core/loader/ImageLoader.h |
diff --git a/Source/core/loader/ImageLoader.h b/Source/core/loader/ImageLoader.h |
index f7e004a046677578bdbe85cb203e289ccab58563..d159f698186b55006b336ee43c033139c8f96d9c 100644 |
--- a/Source/core/loader/ImageLoader.h |
+++ b/Source/core/loader/ImageLoader.h |
@@ -158,6 +158,10 @@ private: |
// have already been finalized in the current lazy sweeping. |
void dispose(); |
+#if ENABLE(OILPAN) |
+ void clearWeakMembers(Visitor*); |
+#endif |
+ |
RawPtrWillBeMember<Element> m_element; |
ResourcePtr<ImageResource> m_image; |
// FIXME: Oilpan: We might be able to remove this Persistent hack when |
@@ -165,28 +169,8 @@ private: |
GC_PLUGIN_IGNORE("http://crbug.com/383741") |
RefPtrWillBePersistent<Element> m_keepAlive; |
-#if ENABLE(OILPAN) |
- class ImageLoaderClientRemover { |
- public: |
- ImageLoaderClientRemover(ImageLoader& loader, ImageLoaderClient& client) : m_loader(loader), m_client(client) { } |
- ~ImageLoaderClientRemover(); |
- |
- private: |
- ImageLoader& m_loader; |
- ImageLoaderClient& m_client; |
- }; |
- friend class ImageLoaderClientRemover; |
- |
- // Oilpan: This ImageLoader object must outlive its clients because they |
- // need to call ImageLoader::willRemoveClient before they |
- // die. Non-Persistent HeapHashMap doesn't work well because weak processing |
- // for HeapHashMap is not triggered when both of ImageLoader and |
- // ImageLoaderClient are unreachable. |
- GC_PLUGIN_IGNORE("http://crbug.com/383742") |
- PersistentHeapHashMap<WeakMember<ImageLoaderClient>, OwnPtr<ImageLoaderClientRemover>> m_clients; |
-#else |
+ // Oilpan: the client references are weak, and managed as such via clearWeakMembers(); |
HashSet<ImageLoaderClient*> m_clients; |
haraken
2015/07/13 14:46:56
I'm wondering if we could just use HeapHashSet<Wea
sof
2015/07/13 14:49:44
We need to explicitly unregister (==willRemoveClie
|
-#endif |
Timer<ImageLoader> m_derefElementTimer; |
AtomicString m_failedLoadURL; |
WeakPtr<Task> m_pendingTask; // owned by Microtask |