Changeset 274357 in webkit


Ignore:
Timestamp:
Mar 12, 2021 8:14:59 AM (17 months ago)
Author:
commit-queue@webkit.org
Message:

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

Patch by Rob Buis <rbuis@igalia.com> 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:
Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r274355 r274357  
     12021-03-12  Rob Buis  <rbuis@igalia.com>
     2
     3        Cancel image loader events after first dispatch
     4        https://bugs.webkit.org/show_bug.cgi?id=218556
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        Cancel image loader events after first dispatch.
     9        Also change EventSender to use WeakPtr.
     10
     11        * dom/EventSender.h:
     12        (WebCore::EventSender<T>::dispatchEventSoon):
     13        (WebCore::EventSender<T>::dispatchPendingEvents):
     14        * loader/ImageLoader.cpp:
     15        (WebCore::ImageLoader::dispatchPendingErrorEvent):
     16        * loader/ImageLoader.h:
     17
    1182021-03-12  Antoine Quint  <graouts@webkit.org>
    219
  • trunk/Source/WebCore/dom/EventSender.h

    r262003 r274357  
    2828#include "Timer.h"
    2929#include <wtf/Vector.h>
     30#include <wtf/WeakPtr.h>
    3031
    3132namespace WebCore {
     
    5556    AtomString m_eventType;
    5657    Timer m_timer;
    57     Vector<T*> m_dispatchSoonList;
    58     Vector<T*> m_dispatchingList;
     58    Vector<WeakPtr<T>> m_dispatchSoonList;
     59    Vector<WeakPtr<T>> m_dispatchingList;
    5960};
    6061
     
    6768template<typename T> void EventSender<T>::dispatchEventSoon(T& sender)
    6869{
    69     m_dispatchSoonList.append(&sender);
     70    m_dispatchSoonList.append(makeWeakPtr(sender));
    7071    if (!m_timer.isActive())
    7172        m_timer.startOneShot(0_s);
     
    100101    m_dispatchingList.swap(m_dispatchSoonList);
    101102    for (auto& event : m_dispatchingList) {
    102         if (T* sender = event) {
     103        if (WeakPtr<T> sender = event) {
    103104            event = nullptr;
    104105            if (!page || sender->document().page() == page)
  • trunk/Source/WebCore/loader/ImageLoader.cpp

    r274199 r274357  
    554554        return;
    555555    m_hasPendingErrorEvent = false;
     556    errorEventSender().cancelEvent(*this);
    556557    if (element().document().hasLivingRenderTree())
    557558        element().dispatchEvent(Event::create(eventNames().errorEvent, Event::CanBubble::No, Event::IsCancelable::No));
  • trunk/Source/WebCore/loader/ImageLoader.h

    r274199 r274357  
    4343enum class RelevantMutation : bool { Yes, No };
    4444
    45 class ImageLoader : public CachedImageClient {
     45class ImageLoader : public CachedImageClient, public CanMakeWeakPtr<ImageLoader> {
    4646    WTF_MAKE_FAST_ALLOCATED;
    4747public:
Note: See TracChangeset for help on using the changeset viewer.