Changeset 244995 in webkit


Ignore:
Timestamp:
May 6, 2019 5:21:25 PM (5 years ago)
Author:
Chris Dumez
Message:

Add assertions to JSLazyEventListener to help catch the cause of a crash
https://bugs.webkit.org/show_bug.cgi?id=197617

Reviewed by Alexey Proskuryakov.

Add assertions to JSLazyEventListener to help catch the cause of <rdar://problem/24314027>.

  • bindings/js/JSLazyEventListener.cpp:

(WebCore::JSLazyEventListener::checkValidityForEventTarget):

  • bindings/js/JSLazyEventListener.h:
  • dom/EventListener.h:

(WebCore::EventListener::checkValidityForEventTarget):

  • dom/EventTarget.cpp:

(WebCore::EventTarget::addEventListener):
(WebCore::EventTarget::setAttributeEventListener):
(WebCore::EventTarget::innerInvokeEventListeners):

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r244988 r244995  
     12019-05-06  Chris Dumez  <cdumez@apple.com>
     2
     3        Add assertions to JSLazyEventListener to help catch the cause of a crash
     4        https://bugs.webkit.org/show_bug.cgi?id=197617
     5
     6        Reviewed by Alexey Proskuryakov.
     7
     8        Add assertions to JSLazyEventListener to help catch the cause of <rdar://problem/24314027>.
     9
     10        * bindings/js/JSLazyEventListener.cpp:
     11        (WebCore::JSLazyEventListener::checkValidityForEventTarget):
     12        * bindings/js/JSLazyEventListener.h:
     13        * dom/EventListener.h:
     14        (WebCore::EventListener::checkValidityForEventTarget):
     15        * dom/EventTarget.cpp:
     16        (WebCore::EventTarget::addEventListener):
     17        (WebCore::EventTarget::setAttributeEventListener):
     18        (WebCore::EventTarget::innerInvokeEventListeners):
     19
    1202019-05-04  Per Arne Vollan  <pvollan@apple.com>
    221
  • trunk/Source/WebCore/bindings/js/JSLazyEventListener.cpp

    r244926 r244995  
    8080}
    8181
     82#if !ASSERT_DISABLED
     83// This is to help find the underlying cause of <rdar://problem/24314027>.
     84void JSLazyEventListener::checkValidityForEventTarget(EventTarget& eventTarget)
     85{
     86    if (eventTarget.isNode()) {
     87        ASSERT(m_originalNode);
     88        ASSERT(static_cast<EventTarget*>(m_originalNode.get()) == &eventTarget);
     89    } else
     90        ASSERT(!m_originalNode);
     91}
     92#endif
     93
    8294JSLazyEventListener::~JSLazyEventListener()
    8395{
  • trunk/Source/WebCore/bindings/js/JSLazyEventListener.h

    r244926 r244995  
    4747    JSLazyEventListener(CreationArguments&&, const String& sourceURL, const TextPosition&);
    4848
     49#if !ASSERT_DISABLED
     50    void checkValidityForEventTarget(EventTarget&) final;
     51#endif
     52
    4953    JSC::JSObject* initializeJSFunction(ScriptExecutionContext&) const final;
    5054    bool wasCreatedFromMarkup() const final { return true; }
  • trunk/Source/WebCore/dom/EventListener.h

    r228260 r244995  
    3232class ScriptExecutionContext;
    3333class Event;
     34class EventTarget;
    3435
    3536class EventListener : public RefCounted<EventListener> {
     
    5657    Type type() const { return m_type; }
    5758
     59#if !ASSERT_DISABLED
     60    virtual void checkValidityForEventTarget(EventTarget&) { }
     61#endif
     62
    5863protected:
    5964    explicit EventListener(Type type)
  • trunk/Source/WebCore/dom/EventTarget.cpp

    r243887 r244995  
    3939#include "InspectorInstrumentation.h"
    4040#include "JSEventListener.h"
     41#include "JSLazyEventListener.h"
    4142#include "RuntimeEnabledFeatures.h"
    4243#include "ScriptController.h"
     
    7071bool EventTarget::addEventListener(const AtomicString& eventType, Ref<EventListener>&& listener, const AddEventListenerOptions& options)
    7172{
     73#if !ASSERT_DISABLED
     74    listener->checkValidityForEventTarget(*this);
     75#endif
     76
    7277    auto passive = options.passive;
    7378
     
    146151        InspectorInstrumentation::willRemoveEventListener(*this, eventType, *existingListener, false);
    147152
     153#if !ASSERT_DISABLED
     154        listener->checkValidityForEventTarget(*this);
     155#endif
     156
    148157        auto listenerPointer = listener.copyRef();
    149158        eventTargetData()->eventListenerMap.replace(eventType, *existingListener, listener.releaseNonNull(), { });
     
    302311            event.setInPassiveListener(true);
    303312
     313#if !ASSERT_DISABLED
     314        registeredListener->callback().checkValidityForEventTarget(*this);
     315#endif
     316
    304317        InspectorInstrumentation::willHandleEvent(context, event, *registeredListener);
    305318        registeredListener->callback().handleEvent(context, event);
Note: See TracChangeset for help on using the changeset viewer.