| 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..91eb910123dbf79a5181116ccee8aea8c401d926 100644
|
| --- a/third_party/WebKit/Source/core/events/EventPath.cpp
|
| +++ b/third_party/WebKit/Source/core/events/EventPath.cpp
|
| @@ -258,33 +258,28 @@ 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) {
|
| 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;
|
|
|