Title: [181615] trunk/Source/WebCore
Revision
181615
Author
simon.fra...@apple.com
Date
2015-03-16 21:43:52 -0700 (Mon, 16 Mar 2015)

Log 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.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (181614 => 181615)


--- trunk/Source/WebCore/ChangeLog	2015-03-17 04:41:36 UTC (rev 181614)
+++ trunk/Source/WebCore/ChangeLog	2015-03-17 04:43:52 UTC (rev 181615)
@@ -1,3 +1,29 @@
+2015-03-16  Simon Fraser  <simon.fra...@apple.com>
+
+        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
+        #ideffed one.
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::~HTMLInputElement): Pass a ref.
+        (WebCore::HTMLInputElement::didMoveToNewDocument): Pass a ref.
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::removeAllEventListeners): Pass a ref.
+
 2015-03-16  Joseph Pecoraro  <pecor...@apple.com>
 
         Web Inspector: Object Previews in Indexed DB tables

Modified: trunk/Source/WebCore/dom/Document.cpp (181614 => 181615)


--- trunk/Source/WebCore/dom/Document.cpp	2015-03-17 04:41:36 UTC (rev 181614)
+++ trunk/Source/WebCore/dom/Document.cpp	2015-03-17 04:43:52 UTC (rev 181615)
@@ -2239,7 +2239,7 @@
 
 #if ENABLE(TOUCH_EVENTS)
     if (m_touchEventTargets && m_touchEventTargets->size() && parentDocument())
-        parentDocument()->didRemoveEventTargetNode(this);
+        parentDocument()->didRemoveEventTargetNode(*this);
 #endif
 
     if (m_mediaQueryMatcher)
@@ -6012,7 +6012,7 @@
 {
 #if ENABLE(TOUCH_EVENTS)
     if (!m_touchEventTargets.get())
-        m_touchEventTargets = std::make_unique<TouchEventTargetSet>();
+        m_touchEventTargets = std::make_unique<EventTargetSet>();
     m_touchEventTargets->add(&handler);
     if (Document* parent = parentDocument()) {
         parent->didAddTouchEventHandler(*this);
@@ -6054,16 +6054,19 @@
 #endif
 }
 
+void Document::didRemoveEventTargetNode(Node& handler)
+{
 #if ENABLE(TOUCH_EVENTS)
-void Document::didRemoveEventTargetNode(Node* handler)
-{
     if (m_touchEventTargets) {
-        m_touchEventTargets->removeAll(handler);
-        if ((handler == this || m_touchEventTargets->isEmpty()) && parentDocument())
-            parentDocument()->didRemoveEventTargetNode(this);
+        m_touchEventTargets->removeAll(&handler);
+        if ((&handler == this || m_touchEventTargets->isEmpty()) && parentDocument())
+            parentDocument()->didRemoveEventTargetNode(*this);
     }
+#else
+    UNUSED_PARAM(handler);
+#endif
 }
-#endif
+
 void Document::updateLastHandledUserGestureTimestamp()
 {
     m_lastHandledUserGestureTimestamp = monotonicallyIncreasingTime();

Modified: trunk/Source/WebCore/dom/Document.h (181614 => 181615)


--- trunk/Source/WebCore/dom/Document.h	2015-03-17 04:41:36 UTC (rev 181614)
+++ trunk/Source/WebCore/dom/Document.h	2015-03-17 04:43:52 UTC (rev 181615)
@@ -239,7 +239,7 @@
 };
 const int numNodeListInvalidationTypes = InvalidateOnAnyAttrChange + 1;
 
-typedef HashCountedSet<Node*> TouchEventTargetSet;
+typedef HashCountedSet<Node*> EventTargetSet;
 
 enum DocumentClass {
     DefaultDocumentClass = 0,
@@ -1137,15 +1137,16 @@
     void didAddTouchEventHandler(Node&);
     void didRemoveTouchEventHandler(Node&);
 
-#if ENABLE(TOUCH_EVENTS)
-    void didRemoveEventTargetNode(Node*);
-#endif
+    void didRemoveEventTargetNode(Node&);
 
+    const EventTargetSet* touchEventTargets() const
+    {
 #if ENABLE(TOUCH_EVENTS)
-    const TouchEventTargetSet* touchEventTargets() const { return m_touchEventTargets.get(); }
+        return m_touchEventTargets.get();
 #else
-    const TouchEventTargetSet* touchEventTargets() const { return 0; }
+        return nullptr;
 #endif
+    }
 
     bool visualUpdatesAllowed() const { return m_visualUpdatesAllowed; }
 
@@ -1558,7 +1559,7 @@
     
     unsigned m_wheelEventHandlerCount;
 #if ENABLE(TOUCH_EVENTS)
-    std::unique_ptr<TouchEventTargetSet> m_touchEventTargets;
+    std::unique_ptr<EventTargetSet> m_touchEventTargets;
 #endif
 
     double m_lastHandledUserGestureTimestamp;

Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (181614 => 181615)


--- trunk/Source/WebCore/html/HTMLInputElement.cpp	2015-03-17 04:41:36 UTC (rev 181614)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp	2015-03-17 04:43:52 UTC (rev 181615)
@@ -166,7 +166,7 @@
         document().formController().checkedRadioButtons().removeButton(this);
 #if ENABLE(TOUCH_EVENTS)
     if (m_hasTouchEventHandler)
-        document().didRemoveEventTargetNode(this);
+        document().didRemoveEventTargetNode(*this);
 #endif
 }
 
@@ -1506,7 +1506,7 @@
             oldDocument->formController().checkedRadioButtons().removeButton(this);
 #if ENABLE(TOUCH_EVENTS)
         if (m_hasTouchEventHandler)
-            oldDocument->didRemoveEventTargetNode(this);
+            oldDocument->didRemoveEventTargetNode(*this);
 #endif
     }
 

Modified: trunk/Source/WebCore/page/DOMWindow.cpp (181614 => 181615)


--- trunk/Source/WebCore/page/DOMWindow.cpp	2015-03-17 04:41:36 UTC (rev 181614)
+++ trunk/Source/WebCore/page/DOMWindow.cpp	2015-03-17 04:43:52 UTC (rev 181615)
@@ -1933,7 +1933,7 @@
 
 #if ENABLE(TOUCH_EVENTS)
     if (Document* document = this->document())
-        document->didRemoveEventTargetNode(document);
+        document->didRemoveEventTargetNode(*document);
 #endif
 
 #if ENABLE(PROXIMITY_EVENTS)

Modified: trunk/Source/WebCore/testing/Internals.cpp (181614 => 181615)


--- trunk/Source/WebCore/testing/Internals.cpp	2015-03-17 04:41:36 UTC (rev 181614)
+++ trunk/Source/WebCore/testing/Internals.cpp	2015-03-17 04:43:52 UTC (rev 181615)
@@ -1213,13 +1213,14 @@
         return 0;
     }
 
-    const TouchEventTargetSet* touchHandlers = document->touchEventTargets();
+    auto touchHandlers = document->touchEventTargets();
     if (!touchHandlers)
         return 0;
 
     unsigned count = 0;
-    for (TouchEventTargetSet::const_iterator iter = touchHandlers->begin(); iter != touchHandlers->end(); ++iter)
-        count += iter->value;
+    for (auto& handler : *touchHandlers)
+        count += handler.value;
+
     return count;
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to