Title: [280132] releases/WebKitGTK/webkit-2.32/Source/WebCore
Revision
280132
Author
[email protected]
Date
2021-07-21 07:44:35 -0700 (Wed, 21 Jul 2021)

Log Message

Merge r274357 - Cancel image loader events after first dispatch
https://bugs.webkit.org/show_bug.cgi?id=218556

Patch by Rob Buis <[email protected]> on 2021-03-12
Reviewed by Ryosuke Niwa.

Cancel image loader events after first dispatch.
Also change EventSender to use WeakPtr.

* dom/EventSender.h:
(WebCore::EventSender<T>::dispatchEventSoon):
(WebCore::EventSender<T>::dispatchPendingEvents):
* loader/ImageLoader.cpp:
(WebCore::ImageLoader::dispatchPendingErrorEvent):
* loader/ImageLoader.h:

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/ChangeLog (280131 => 280132)


--- releases/WebKitGTK/webkit-2.32/Source/WebCore/ChangeLog	2021-07-21 14:44:25 UTC (rev 280131)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/ChangeLog	2021-07-21 14:44:35 UTC (rev 280132)
@@ -1,3 +1,20 @@
+2021-03-12  Rob Buis  <[email protected]>
+
+        Cancel image loader events after first dispatch
+        https://bugs.webkit.org/show_bug.cgi?id=218556
+
+        Reviewed by Ryosuke Niwa.
+
+        Cancel image loader events after first dispatch.
+        Also change EventSender to use WeakPtr.
+
+        * dom/EventSender.h:
+        (WebCore::EventSender<T>::dispatchEventSoon):
+        (WebCore::EventSender<T>::dispatchPendingEvents):
+        * loader/ImageLoader.cpp:
+        (WebCore::ImageLoader::dispatchPendingErrorEvent):
+        * loader/ImageLoader.h:
+
 2021-06-18  Philippe Normand  <[email protected]>
 
         [MSE][GStreamer] Soundcloud serves MP4 audio with empty tfdt boxes

Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/dom/EventSender.h (280131 => 280132)


--- releases/WebKitGTK/webkit-2.32/Source/WebCore/dom/EventSender.h	2021-07-21 14:44:25 UTC (rev 280131)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/dom/EventSender.h	2021-07-21 14:44:35 UTC (rev 280132)
@@ -27,6 +27,7 @@
 
 #include "Timer.h"
 #include <wtf/Vector.h>
+#include <wtf/WeakPtr.h>
 
 namespace WebCore {
 
@@ -54,8 +55,8 @@
 
     AtomString m_eventType;
     Timer m_timer;
-    Vector<T*> m_dispatchSoonList;
-    Vector<T*> m_dispatchingList;
+    Vector<WeakPtr<T>> m_dispatchSoonList;
+    Vector<WeakPtr<T>> m_dispatchingList;
 };
 
 template<typename T> EventSender<T>::EventSender(const AtomString& eventType)
@@ -66,7 +67,7 @@
 
 template<typename T> void EventSender<T>::dispatchEventSoon(T& sender)
 {
-    m_dispatchSoonList.append(&sender);
+    m_dispatchSoonList.append(makeWeakPtr(sender));
     if (!m_timer.isActive())
         m_timer.startOneShot(0_s);
 }
@@ -99,7 +100,7 @@
 
     m_dispatchingList.swap(m_dispatchSoonList);
     for (auto& event : m_dispatchingList) {
-        if (T* sender = event) {
+        if (WeakPtr<T> sender = event) {
             event = nullptr;
             if (!page || sender->document().page() == page)
                 sender->dispatchPendingEvent(this);

Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/loader/ImageLoader.cpp (280131 => 280132)


--- releases/WebKitGTK/webkit-2.32/Source/WebCore/loader/ImageLoader.cpp	2021-07-21 14:44:25 UTC (rev 280131)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/loader/ImageLoader.cpp	2021-07-21 14:44:35 UTC (rev 280132)
@@ -552,6 +552,7 @@
     if (!m_hasPendingErrorEvent)
         return;
     m_hasPendingErrorEvent = false;
+    errorEventSender().cancelEvent(*this);
     if (element().document().hasLivingRenderTree())
         element().dispatchEvent(Event::create(eventNames().errorEvent, Event::CanBubble::No, Event::IsCancelable::No));
 

Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/loader/ImageLoader.h (280131 => 280132)


--- releases/WebKitGTK/webkit-2.32/Source/WebCore/loader/ImageLoader.h	2021-07-21 14:44:25 UTC (rev 280131)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/loader/ImageLoader.h	2021-07-21 14:44:35 UTC (rev 280132)
@@ -42,7 +42,7 @@
 
 enum class RelevantMutation : bool { Yes, No };
 
-class ImageLoader : public CachedImageClient {
+class ImageLoader : public CachedImageClient, public CanMakeWeakPtr<ImageLoader> {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     virtual ~ImageLoader();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to