Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Unified Diff: Source/core/input/EventHandler.cpp

Issue 1288483003: Skipping mouseenter/over/out/leave on deleted nodes. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « LayoutTests/fast/events/mouseover-mouseout2-expected.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/input/EventHandler.cpp
diff --git a/Source/core/input/EventHandler.cpp b/Source/core/input/EventHandler.cpp
index c66e5f02b6f1e0f58f7b3f1b30dacd77b3fc7a9b..6f13bfca44fe136e6d25238d1a68f4823ea6ed14 100644
--- a/Source/core/input/EventHandler.cpp
+++ b/Source/core/input/EventHandler.cpp
@@ -98,6 +98,15 @@
namespace blink {
+namespace {
+
+bool isNodeInDocument(Node* n)
+{
+ return n && n->inDocument();
+}
+
+}
+
using namespace HTMLNames;
// The link drag hysteresis is much larger than the others because there
@@ -1526,7 +1535,7 @@ void EventHandler::sendMouseEventsForNodeTransition(Node* exitedNode, Node* ente
ASSERT(exitedNode != enteredNode);
// First, dispatch mouseout event (which bubbles to ancestors)
- if (exitedNode)
+ if (isNodeInDocument(exitedNode))
exitedNode->dispatchMouseEvent(mouseEvent, EventTypeNames::mouseout, 0, enteredNode);
// A note on mouseenter and mouseleave: These are non-bubbling events, and they are dispatched if there
@@ -1546,13 +1555,13 @@ void EventHandler::sendMouseEventsForNodeTransition(Node* exitedNode, Node* ente
// Create lists of all exited/entered ancestors.
WillBeHeapVector<RefPtrWillBeMember<Node>, 32> exitedAncestors;
WillBeHeapVector<RefPtrWillBeMember<Node>, 32> enteredAncestors;
- if (exitedNode) {
+ if (isNodeInDocument(exitedNode)) {
exitedNode->updateDistribution();
for (Node* node = exitedNode; node; node = ComposedTreeTraversal::parent(*node)) {
exitedAncestors.append(node);
}
}
- if (enteredNode) {
+ if (isNodeInDocument(enteredNode)) {
enteredNode->updateDistribution();
for (Node* node = enteredNode; node; node = ComposedTreeTraversal::parent(*node)) {
enteredAncestors.append(node);
@@ -1591,7 +1600,7 @@ void EventHandler::sendMouseEventsForNodeTransition(Node* exitedNode, Node* ente
}
// Dispatch mouseover event (which bubbles to ancestors) after the mouseleave events are sent.
- if (enteredNode)
+ if (isNodeInDocument(enteredNode))
enteredNode->dispatchMouseEvent(mouseEvent, EventTypeNames::mouseover, 0, exitedNode);
// Determine if there is a capturing mouseenter listener in an ancestor. This must be done /after/ dispatching the
« no previous file with comments | « LayoutTests/fast/events/mouseover-mouseout2-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698