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 5a18188771175f635344fb342c9b6c0b0ac91bbf..195f147a3e41887ebeb3108ed0076049811747c2 100644 |
| --- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
| +++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
| @@ -294,22 +294,34 @@ void PointerEventManager::setNodeUnderPointer( |
| } |
| } |
| -void PointerEventManager::sendTouchCancelPointerEvent(PassRefPtrWillBeRawPtr<EventTarget> prpTarget, const PlatformTouchPoint& point) |
| +void PointerEventManager::blockTouchPointers() |
| { |
| - RefPtrWillBeRawPtr<EventTarget> target = prpTarget; |
| - RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.createPointerCancelEvent(point); |
| + if (m_inCanceledStateForPointerTypeTouch) |
| + return; |
| + m_inCanceledStateForPointerTypeTouch = true; |
| + WillBeHeapVector<int> touchPointerIds |
| + = m_pointerEventFactory.getPointerIdsOfType(WebPointerProperties::PointerType::Touch); |
| - processCaptureAndPositionOfPointerEvent(pointerEvent, target); |
| + for (int pointerId : touchPointerIds) { |
| + RefPtrWillBeRawPtr<PointerEvent> pointerEvent |
| + = m_pointerEventFactory.createPointerCancelEvent( |
| + pointerId, WebPointerProperties::PointerType::Touch); |
| - // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing vs pointer event capturing |
| - dispatchPointerEvent( |
| - getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()), |
| - pointerEvent.get()); |
| + ASSERT(m_nodeUnderPointer.contains(pointerId)); |
| + RefPtrWillBeRawPtr<EventTarget> target = m_nodeUnderPointer.get(pointerId).target; |
| + |
| + // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing vs pointer event capturing |
|
tdresser
2016/03/30 19:19:01
Missing .
mustaq
2016/03/30 20:21:05
Done.
|
| + target->dispatchEvent(pointerEvent.get()); |
| - setNodeUnderPointer(pointerEvent, nullptr); |
| + setNodeUnderPointer(pointerEvent, nullptr); |
| + m_pointerEventFactory.remove(pointerId); |
| + } |
| +} |
| - removePointer(pointerEvent); |
| +void PointerEventManager::unblockTouchPointers() |
| +{ |
| + m_inCanceledStateForPointerTypeTouch = false; |
| } |
| WebInputEventResult PointerEventManager::sendTouchPointerEvent( |
| @@ -318,6 +330,9 @@ WebInputEventResult PointerEventManager::sendTouchPointerEvent( |
| const double width, const double height, |
| const double clientX, const double clientY) |
| { |
| + if (m_inCanceledStateForPointerTypeTouch) |
| + return WebInputEventResult::NotHandled; |
| + |
| RefPtrWillBeRawPtr<EventTarget> target = prpTarget; |
| RefPtrWillBeRawPtr<PointerEvent> pointerEvent = |
| @@ -399,6 +414,7 @@ PointerEventManager::~PointerEventManager() |
| void PointerEventManager::clear() |
| { |
| m_preventMouseEventForPointerTypeMouse = false; |
| + m_inCanceledStateForPointerTypeTouch = false; |
| m_pointerEventFactory.clear(); |
| m_nodeUnderPointer.clear(); |
| } |
| @@ -531,8 +547,8 @@ void PointerEventManager::removePointer( |
| const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent) |
| { |
| RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; |
| - if (m_pointerEventFactory.remove(pointerEvent)) { |
| - int pointerId = pointerEvent->pointerId(); |
| + int pointerId = pointerEvent->pointerId(); |
| + if (m_pointerEventFactory.remove(pointerId)) { |
| m_pendingPointerCaptureTarget.remove(pointerId); |
| m_pointerCaptureTarget.remove(pointerId); |
| m_nodeUnderPointer.remove(pointerId); |