Changeset 181615 in webkit


Ignore:
Timestamp:
Mar 16, 2015 9:43:52 PM (9 years ago)
Author:
Simon Fraser
Message:

Generalize the Document code that maintains a set of nodes with event handlers
https://bugs.webkit.org/show_bug.cgi?id=142762

Reviewed by Zalan Bujtas, Darin Adler.

Document.h defines a TouchEventTargetSet type, which will in future be used for
other event types too (wheel events), so rename it to EventTargetSet.

Take didRemoveEventTargetNode() outside the TOUCH_EVENTS #ifdef, and change it
to take a reference.

  • dom/Document.cpp:

(WebCore::Document::prepareForDestruction): References
(WebCore::Document::didAddTouchEventHandler): Ditto.
(WebCore::Document::didRemoveEventTargetNode): Ditto.

  • dom/Document.h:

(WebCore::Document::touchEventTargets): No-one calls this; just remove the non

  • html/HTMLInputElement.cpp:

(WebCore::HTMLInputElement::~HTMLInputElement): Pass a ref.
(WebCore::HTMLInputElement::didMoveToNewDocument): Pass a ref.

  • page/DOMWindow.cpp:

(WebCore::DOMWindow::removeAllEventListeners): Pass a ref.

Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r181613 r181615  
     12015-03-16  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Generalize the Document code that maintains a set of nodes with event handlers
     4        https://bugs.webkit.org/show_bug.cgi?id=142762
     5
     6        Reviewed by Zalan Bujtas, Darin Adler.
     7
     8        Document.h defines a TouchEventTargetSet type, which will in future be used for
     9        other event types too (wheel events), so rename it to EventTargetSet.
     10       
     11        Take didRemoveEventTargetNode() outside the TOUCH_EVENTS #ifdef, and change it
     12        to take a reference.
     13
     14        * dom/Document.cpp:
     15        (WebCore::Document::prepareForDestruction): References
     16        (WebCore::Document::didAddTouchEventHandler): Ditto.
     17        (WebCore::Document::didRemoveEventTargetNode): Ditto.
     18        * dom/Document.h:
     19        (WebCore::Document::touchEventTargets): No-one calls this; just remove the non
     20        #ideffed one.
     21        * html/HTMLInputElement.cpp:
     22        (WebCore::HTMLInputElement::~HTMLInputElement): Pass a ref.
     23        (WebCore::HTMLInputElement::didMoveToNewDocument): Pass a ref.
     24        * page/DOMWindow.cpp:
     25        (WebCore::DOMWindow::removeAllEventListeners): Pass a ref.
     26
    1272015-03-16  Joseph Pecoraro  <pecoraro@apple.com>
    228
  • trunk/Source/WebCore/dom/Document.cpp

    r181519 r181615  
    22402240#if ENABLE(TOUCH_EVENTS)
    22412241    if (m_touchEventTargets && m_touchEventTargets->size() && parentDocument())
    2242         parentDocument()->didRemoveEventTargetNode(this);
     2242        parentDocument()->didRemoveEventTargetNode(*this);
    22432243#endif
    22442244
     
    60136013#if ENABLE(TOUCH_EVENTS)
    60146014    if (!m_touchEventTargets.get())
    6015         m_touchEventTargets = std::make_unique<TouchEventTargetSet>();
     6015        m_touchEventTargets = std::make_unique<EventTargetSet>();
    60166016    m_touchEventTargets->add(&handler);
    60176017    if (Document* parent = parentDocument()) {
     
    60556055}
    60566056
     6057void Document::didRemoveEventTargetNode(Node& handler)
     6058{
    60576059#if ENABLE(TOUCH_EVENTS)
    6058 void Document::didRemoveEventTargetNode(Node* handler)
    6059 {
    60606060    if (m_touchEventTargets) {
    6061         m_touchEventTargets->removeAll(handler);
    6062         if ((handler == this || m_touchEventTargets->isEmpty()) && parentDocument())
    6063             parentDocument()->didRemoveEventTargetNode(this);
    6064     }
    6065 }
    6066 #endif
     6061        m_touchEventTargets->removeAll(&handler);
     6062        if ((&handler == this || m_touchEventTargets->isEmpty()) && parentDocument())
     6063            parentDocument()->didRemoveEventTargetNode(*this);
     6064    }
     6065#else
     6066    UNUSED_PARAM(handler);
     6067#endif
     6068}
     6069
    60676070void Document::updateLastHandledUserGestureTimestamp()
    60686071{
  • trunk/Source/WebCore/dom/Document.h

    r181514 r181615  
    240240const int numNodeListInvalidationTypes = InvalidateOnAnyAttrChange + 1;
    241241
    242 typedef HashCountedSet<Node*> TouchEventTargetSet;
     242typedef HashCountedSet<Node*> EventTargetSet;
    243243
    244244enum DocumentClass {
     
    11381138    void didRemoveTouchEventHandler(Node&);
    11391139
     1140    void didRemoveEventTargetNode(Node&);
     1141
     1142    const EventTargetSet* touchEventTargets() const
     1143    {
    11401144#if ENABLE(TOUCH_EVENTS)
    1141     void didRemoveEventTargetNode(Node*);
    1142 #endif
    1143 
    1144 #if ENABLE(TOUCH_EVENTS)
    1145     const TouchEventTargetSet* touchEventTargets() const { return m_touchEventTargets.get(); }
     1145        return m_touchEventTargets.get();
    11461146#else
    1147     const TouchEventTargetSet* touchEventTargets() const { return 0; }
    1148 #endif
     1147        return nullptr;
     1148#endif
     1149    }
    11491150
    11501151    bool visualUpdatesAllowed() const { return m_visualUpdatesAllowed; }
     
    15591560    unsigned m_wheelEventHandlerCount;
    15601561#if ENABLE(TOUCH_EVENTS)
    1561     std::unique_ptr<TouchEventTargetSet> m_touchEventTargets;
     1562    std::unique_ptr<EventTargetSet> m_touchEventTargets;
    15621563#endif
    15631564
  • trunk/Source/WebCore/html/HTMLInputElement.cpp

    r181520 r181615  
    167167#if ENABLE(TOUCH_EVENTS)
    168168    if (m_hasTouchEventHandler)
    169         document().didRemoveEventTargetNode(this);
     169        document().didRemoveEventTargetNode(*this);
    170170#endif
    171171}
     
    15071507#if ENABLE(TOUCH_EVENTS)
    15081508        if (m_hasTouchEventHandler)
    1509             oldDocument->didRemoveEventTargetNode(this);
     1509            oldDocument->didRemoveEventTargetNode(*this);
    15101510#endif
    15111511    }
  • trunk/Source/WebCore/page/DOMWindow.cpp

    r181514 r181615  
    19341934#if ENABLE(TOUCH_EVENTS)
    19351935    if (Document* document = this->document())
    1936         document->didRemoveEventTargetNode(document);
     1936        document->didRemoveEventTargetNode(*document);
    19371937#endif
    19381938
  • trunk/Source/WebCore/testing/Internals.cpp

    r181408 r181615  
    12141214    }
    12151215
    1216     const TouchEventTargetSet* touchHandlers = document->touchEventTargets();
     1216    auto touchHandlers = document->touchEventTargets();
    12171217    if (!touchHandlers)
    12181218        return 0;
    12191219
    12201220    unsigned count = 0;
    1221     for (TouchEventTargetSet::const_iterator iter = touchHandlers->begin(); iter != touchHandlers->end(); ++iter)
    1222         count += iter->value;
     1221    for (auto& handler : *touchHandlers)
     1222        count += handler.value;
     1223
    12231224    return count;
    12241225}
Note: See TracChangeset for help on using the changeset viewer.