Chromium Code Reviews| Index: third_party/WebKit/Source/core/input/PointerEventManager.cpp |
| diff --git a/third_party/WebKit/Source/core/input/PointerEventManager.cpp b/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
| index a085c8b59089478e35152b8915c5abc66545505b..c66c795800cbe37be5c3c182d7fd0a8faab2c4a7 100644 |
| --- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
| +++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
| @@ -79,6 +79,21 @@ PlatformMouseEvent mouseEventWithRegion(Node* node, const PlatformMouseEvent& mo |
| return newMouseEvent; |
| } |
| +void buildAncestorChain( |
| + EventTarget* target, |
| + HeapVector<Member<Node>, 20>* ancestors) |
| +{ |
| + if (!isInDocument(target)) |
| + return; |
| + Node* targetNode = target->toNode(); |
| + DCHECK(targetNode); |
| + targetNode->updateDistribution(); |
| + // Index 0 element in the ancestors arrays will be the corresponding |
| + // target. So the root of their document will be their last element. |
| + for (Node* node = targetNode; node; node = FlatTreeTraversal::parent(*node)) |
| + ancestors->append(node); |
| +} |
| + |
| void buildAncestorChainsAndFindCommonAncestors( |
| EventTarget* exitedTarget, EventTarget* enteredTarget, |
| HeapVector<Member<Node>, 20>* exitedAncestorsOut, |
| @@ -91,24 +106,8 @@ void buildAncestorChainsAndFindCommonAncestors( |
| DCHECK(exitedAncestorsCommonParentIndexOut); |
| DCHECK(enteredAncestorsCommonParentIndexOut); |
| - // Index 0 element in the ancestors arrays will be the corresponding |
| - // target. So the root of their document will be their last element. |
| - |
| - if (isInDocument(exitedTarget)) { |
| - Node* exitedNode = exitedTarget->toNode(); |
| - DCHECK(exitedNode); |
| - exitedNode->updateDistribution(); |
| - for (Node* node = exitedNode; node; node = FlatTreeTraversal::parent(*node)) |
| - exitedAncestorsOut->append(node); |
| - } |
| - |
| - if (isInDocument(enteredTarget)) { |
| - Node* enteredNode = enteredTarget->toNode(); |
| - DCHECK(enteredNode); |
| - enteredNode->updateDistribution(); |
| - for (Node* node = enteredNode; node; node = FlatTreeTraversal::parent(*node)) |
| - enteredAncestorsOut->append(node); |
| - } |
| + buildAncestorChain(exitedTarget, exitedAncestorsOut); |
| + buildAncestorChain(enteredTarget, enteredAncestorsOut); |
| *exitedAncestorsCommonParentIndexOut = exitedAncestorsOut->size(); |
| *enteredAncestorsCommonParentIndexOut = enteredAncestorsOut->size(); |
| @@ -452,8 +451,17 @@ WebInputEventResult PointerEventManager::sendMousePointerEvent( |
| if (pointerEvent->isPrimary() && !m_preventMouseEventForPointerType[toPointerTypeIndex( |
| mouseEvent.pointerProperties().pointerType)]) { |
| + EventTarget* mouseTarget = effectiveTarget; |
|
mustaq
2016/05/05 15:31:02
Can we ever have both of these false?
- isInDocume
Navid Zolghadr
2016/05/06 15:47:20
When pointer event feature is not enabled we are n
|
| + if (!isInDocument(mouseTarget) && pointerEvent->hasEventPath()) { |
| + for (size_t i = 0; i < pointerEvent->eventPath().size(); i++) { |
| + if (isInDocument(pointerEvent->eventPath()[i].node())) { |
| + mouseTarget = pointerEvent->eventPath()[i].node(); |
| + break; |
| + } |
| + } |
| + } |
| result = EventHandler::mergeEventResult(result, |
| - dispatchMouseEvent(effectiveTarget, mouseEventType, mouseEvent, |
| + dispatchMouseEvent(mouseTarget, mouseEventType, mouseEvent, |
| nullptr, clickCount)); |
| } |