Title: [261196] trunk/Source/WebCore
Revision
261196
Author
simon.fra...@apple.com
Date
2020-05-05 13:52:15 -0700 (Tue, 05 May 2020)

Log Message

Assert that EventHandler only tracks event target nodes in its own document
https://bugs.webkit.org/show_bug.cgi?id=211462

Reviewed by Zalan Bujtas.

EventHandler is per-Frame, so should not track Nodes from different documents. However, it did so
by mistake if an event handler moved a node between documents.

* page/EventHandler.cpp:
(WebCore::EventHandler::updateMouseEventTargetNode):
* rendering/HitTestResult.cpp:
(WebCore::HitTestResult::targetNode const):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (261195 => 261196)


--- trunk/Source/WebCore/ChangeLog	2020-05-05 20:50:59 UTC (rev 261195)
+++ trunk/Source/WebCore/ChangeLog	2020-05-05 20:52:15 UTC (rev 261196)
@@ -1,3 +1,18 @@
+2020-05-05  Simon Fraser  <simon.fra...@apple.com>
+
+        Assert that EventHandler only tracks event target nodes in its own document
+        https://bugs.webkit.org/show_bug.cgi?id=211462
+
+        Reviewed by Zalan Bujtas.
+
+        EventHandler is per-Frame, so should not track Nodes from different documents. However, it did so
+        by mistake if an event handler moved a node between documents.
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::updateMouseEventTargetNode):
+        * rendering/HitTestResult.cpp:
+        (WebCore::HitTestResult::targetNode const):
+
 2020-05-05  Antti Koivisto  <an...@apple.com>
 
         Factor RenderLayerBacking::updateEventRegion skip conditions into a lambda

Modified: trunk/Source/WebCore/page/EventHandler.cpp (261195 => 261196)


--- trunk/Source/WebCore/page/EventHandler.cpp	2020-05-05 20:50:59 UTC (rev 261195)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2020-05-05 20:52:15 UTC (rev 261196)
@@ -2537,6 +2537,9 @@
 
     m_elementUnderMouse = targetElement;
 
+    ASSERT_IMPLIES(m_elementUnderMouse, &m_elementUnderMouse->document() == m_frame.document());
+    ASSERT_IMPLIES(m_lastElementUnderMouse, &m_lastElementUnderMouse->document() == m_frame.document());
+
     // Fire mouseout/mouseover if the mouse has shifted to a different node.
     if (fireMouseOverOut == FireMouseOverOut::Yes) {
         auto scrollableAreaForLastNode = enclosingScrollableArea(m_lastElementUnderMouse.get());
@@ -2621,6 +2624,11 @@
                     chain->dispatchMouseEvent(platformMouseEvent, eventNames().mouseenterEvent, 0, m_lastElementUnderMouse.get());
             }
         }
+
+        // Event handling may have moved the element to a different document.
+        if (m_elementUnderMouse && &m_elementUnderMouse->document() != m_frame.document())
+            m_elementUnderMouse = nullptr;
+
         m_lastElementUnderMouse = m_elementUnderMouse;
     }
 }

Modified: trunk/Source/WebCore/rendering/HitTestResult.cpp (261195 => 261196)


--- trunk/Source/WebCore/rendering/HitTestResult.cpp	2020-05-05 20:50:59 UTC (rev 261195)
+++ trunk/Source/WebCore/rendering/HitTestResult.cpp	2020-05-05 20:52:15 UTC (rev 261196)
@@ -718,7 +718,7 @@
 {
     Node* node = innerNode();
     if (!node)
-        return 0;
+        return nullptr;
     if (node->isConnected())
         return node;
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to