| 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 f3b1dd0d0c524ebcbd722ae74953040dbedbd00b..aa42f46837b4e09bc0c4b25bce46f0f942d3b23f 100644
|
| --- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| +++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| @@ -169,14 +169,6 @@ WebInputEventResult PointerEventManager::dispatchPointerEvent(
|
| UseCounter::count(m_frame->document(),
|
| UseCounter::PointerEventDispatchPointerDown);
|
|
|
| - std::unique_ptr<UserGestureIndicator> gestureIndicator;
|
| - if (eventType == EventTypeNames::pointerup &&
|
| - pointerEvent->pointerType() == "touch") {
|
| - gestureIndicator =
|
| - wrapUnique(new UserGestureIndicator(DocumentUserGestureToken::create(
|
| - target->toNode() ? &target->toNode()->document() : nullptr)));
|
| - }
|
| -
|
| DispatchEventResult dispatchResult = target->dispatchEvent(pointerEvent);
|
| return EventHandlingUtil::toWebInputEventResult(dispatchResult);
|
| }
|
| @@ -298,7 +290,6 @@ WebInputEventResult PointerEventManager::handleTouchEvents(
|
| const PlatformTouchEvent& event) {
|
| if (event.type() == PlatformEvent::TouchScrollStarted) {
|
| blockTouchPointers();
|
| - m_touchEventManager->setTouchScrollStarted();
|
| return WebInputEventResult::HandledSystem;
|
| }
|
|
|
| @@ -311,18 +302,36 @@ WebInputEventResult PointerEventManager::handleTouchEvents(
|
| }
|
| if (newTouchSequence)
|
| unblockTouchPointers();
|
| +
|
| + // Do any necessary hit-tests and compute the event targets for all pointers
|
| + // in the event.
|
| HeapVector<TouchEventManager::TouchInfo> touchInfos;
|
| + computeTouchTargets(event, touchInfos);
|
| +
|
| + // Any finger lifting is a user gesture only when it wasn't associated with a
|
| + // scroll.
|
| + // https://docs.google.com/document/d/1oF1T3O7_E4t1PYHV6gyCwHxOi3ystm0eSL5xZu7nvOg/edit#
|
| + // Re-use the same UserGesture for touchend and pointerup (but not for the
|
| + // mouse events generated by GestureTap).
|
| + // For the rare case of multi-finger scenarios spanning documents, it
|
| + // seems extremely unlikely to matter which document the gesture is
|
| + // associated with so just pick the first finger.
|
| + RefPtr<UserGestureToken> possibleGestureToken;
|
| + if (event.type() == PlatformEvent::TouchEnd &&
|
| + !m_inCanceledStateForPointerTypeTouch) {
|
| + possibleGestureToken =
|
| + DocumentUserGestureToken::create(touchInfos[0].targetFrame->document());
|
| + }
|
| + UserGestureIndicator holder(possibleGestureToken);
|
|
|
| dispatchTouchPointerEvents(event, touchInfos);
|
|
|
| return m_touchEventManager->handleTouchEvent(event, touchInfos);
|
| }
|
|
|
| -void PointerEventManager::dispatchTouchPointerEvents(
|
| +void PointerEventManager::computeTouchTargets(
|
| const PlatformTouchEvent& event,
|
| HeapVector<TouchEventManager::TouchInfo>& touchInfos) {
|
| - // Iterate through the touch points, sending PointerEvents to the targets as
|
| - // required.
|
| for (const auto& touchPoint : event.touchPoints()) {
|
| TouchEventManager::TouchInfo touchInfo;
|
| touchInfo.point = touchPoint;
|
| @@ -373,6 +382,17 @@ void PointerEventManager::dispatchTouchPointerEvents(
|
| touchInfo.targetFrame = touchInfo.touchNode->document().frame();
|
| }
|
|
|
| + touchInfos.append(touchInfo);
|
| + }
|
| +}
|
| +
|
| +void PointerEventManager::dispatchTouchPointerEvents(
|
| + const PlatformTouchEvent& event,
|
| + HeapVector<TouchEventManager::TouchInfo>& touchInfos) {
|
| + // Iterate through the touch points, sending PointerEvents to the targets as
|
| + // required.
|
| + for (auto touchInfo : touchInfos) {
|
| + const PlatformTouchPoint& touchPoint = touchInfo.point;
|
| // Do not send pointer events for stationary touches or null targetFrame
|
| if (touchInfo.touchNode && touchInfo.targetFrame &&
|
| touchPoint.state() != PlatformTouchPoint::TouchStationary &&
|
| @@ -405,8 +425,6 @@ void PointerEventManager::dispatchTouchPointerEvents(
|
| m_touchIdsForCanceledPointerdowns.append(event.uniqueTouchEventId());
|
| }
|
| }
|
| -
|
| - touchInfos.append(touchInfo);
|
| }
|
| }
|
|
|
|
|