Index: third_party/WebKit/Source/core/events/EventPath.cpp |
diff --git a/third_party/WebKit/Source/core/events/EventPath.cpp b/third_party/WebKit/Source/core/events/EventPath.cpp |
index feb2f0976cd1f1e997177f04c0de2e9a5521e01b..9b9b03b2fa0fc556fc6ab10d148ef8033c3f28d6 100644 |
--- a/third_party/WebKit/Source/core/events/EventPath.cpp |
+++ b/third_party/WebKit/Source/core/events/EventPath.cpp |
@@ -258,33 +258,29 @@ void EventPath::adjustForRelatedTarget(Node& target, EventTarget* relatedTarget) |
return; |
if (target.document() != relatedNode->document()) |
return; |
- if (!target.inShadowIncludingDocument() || !relatedNode->inShadowIncludingDocument()) |
- return; |
+ retargetRelatedTarget(*relatedNode); |
+ shrinkForRelatedTarget(target, *relatedNode); |
+} |
+void EventPath::retargetRelatedTarget(const Node& relatedTargetNode) |
+{ |
RelatedTargetMap relatedNodeMap; |
- buildRelatedNodeMap(*relatedNode, relatedNodeMap); |
+ buildRelatedNodeMap(relatedTargetNode, relatedNodeMap); |
for (const auto& treeScopeEventContext : m_treeScopeEventContexts) { |
+ |
tkent
2016/06/02 04:38:00
nit: This blank line doesn't look helpful to me.
hayato
2016/06/02 04:47:44
Done
|
EventTarget* adjustedRelatedTarget = findRelatedNode(treeScopeEventContext->treeScope(), relatedNodeMap); |
ASSERT(adjustedRelatedTarget); |
treeScopeEventContext.get()->setRelatedTarget(adjustedRelatedTarget); |
} |
- |
- shrinkIfNeeded(target, *relatedTarget); |
} |
-void EventPath::shrinkIfNeeded(const Node& target, const EventTarget& relatedTarget) |
+void EventPath::shrinkForRelatedTarget(const Node& target, const Node& relatedTarget) |
{ |
- // Synthetic mouse events can have a relatedTarget which is identical to the target. |
- bool targetIsIdenticalToToRelatedTarget = (&target == &relatedTarget); |
- |
+ if (!target.isInShadowTree() && !relatedTarget.isInShadowTree()) |
+ return; |
for (size_t i = 0; i < size(); ++i) { |
- if (targetIsIdenticalToToRelatedTarget) { |
- if (target.treeScope().rootNode() == at(i).node()) { |
- shrink(i + 1); |
- break; |
- } |
- } else if (at(i).target() == at(i).relatedTarget()) { |
+ if (at(i).target() == at(i).relatedTarget()) { |
// Event dispatching should be stopped here. |
shrink(i); |
break; |