| 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 de73cdadcf841a1cb3d8b65287ccf0058570dd7e..0f3946ad05f5f4f4254ff4a4b4a41af43c6bf7ac 100644
|
| --- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| +++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| @@ -28,29 +28,24 @@ size_t toPointerTypeIndex(WebPointerProperties::PointerType t) {
|
| return static_cast<size_t>(t);
|
| }
|
|
|
| -const AtomicString& pointerEventNameForTouchPointState(
|
| - PlatformTouchPoint::TouchState state) {
|
| - switch (state) {
|
| - case PlatformTouchPoint::TouchReleased:
|
| - return EventTypeNames::pointerup;
|
| - case PlatformTouchPoint::TouchCancelled:
|
| - return EventTypeNames::pointercancel;
|
| - case PlatformTouchPoint::TouchPressed:
|
| - return EventTypeNames::pointerdown;
|
| - case PlatformTouchPoint::TouchMoved:
|
| - return EventTypeNames::pointermove;
|
| - case PlatformTouchPoint::TouchStationary:
|
| - // Fall through to default
|
| - default:
|
| - NOTREACHED();
|
| - return emptyAtom;
|
| - }
|
| -}
|
| -
|
| bool isInDocument(EventTarget* n) {
|
| return n && n->toNode() && n->toNode()->isConnected();
|
| }
|
|
|
| +Vector<PlatformTouchPoint> getCoalescedPoints(
|
| + const Vector<PlatformTouchEvent>& coalescedEvents,
|
| + int id) {
|
| + Vector<PlatformTouchPoint> relatedPoints;
|
| + for (const auto& touchEvent : coalescedEvents) {
|
| + for (auto& point : touchEvent.touchPoints()) {
|
| + // TODO(nzolghadr): Need to filter out stationary points
|
| + if (point.id() == id)
|
| + relatedPoints.append(point);
|
| + }
|
| + }
|
| + return relatedPoints;
|
| +}
|
| +
|
| } // namespace
|
|
|
| PointerEventManager::PointerEventManager(LocalFrame* frame,
|
| @@ -190,7 +185,8 @@ void PointerEventManager::sendMouseAndPointerBoundaryEvents(
|
| // to create boundary pointer events and its type will be overridden in
|
| // |sendBoundaryEvents| function.
|
| PointerEvent* dummyPointerEvent = m_pointerEventFactory.create(
|
| - EventTypeNames::mousedown, mouseEvent, m_frame->document()->domWindow());
|
| + EventTypeNames::mousedown, mouseEvent, Vector<PlatformMouseEvent>(),
|
| + m_frame->document()->domWindow());
|
|
|
| // TODO(crbug/545647): This state should reset with pointercancel too.
|
| // This function also gets called for compat mouse events of touch at this
|
| @@ -287,7 +283,8 @@ void PointerEventManager::unblockTouchPointers() {
|
| }
|
|
|
| WebInputEventResult PointerEventManager::handleTouchEvents(
|
| - const PlatformTouchEvent& event) {
|
| + const PlatformTouchEvent& event,
|
| + const Vector<PlatformTouchEvent>& coalescedEvents) {
|
| if (event.type() == PlatformEvent::TouchScrollStarted) {
|
| blockTouchPointers();
|
| return WebInputEventResult::HandledSystem;
|
| @@ -325,7 +322,7 @@ WebInputEventResult PointerEventManager::handleTouchEvents(
|
| }
|
| UserGestureIndicator holder(possibleGestureToken);
|
|
|
| - dispatchTouchPointerEvents(event, touchInfos);
|
| + dispatchTouchPointerEvents(event, coalescedEvents, touchInfos);
|
|
|
| return m_touchEventManager->handleTouchEvent(event, touchInfos);
|
| }
|
| @@ -389,6 +386,7 @@ void PointerEventManager::computeTouchTargets(
|
|
|
| void PointerEventManager::dispatchTouchPointerEvents(
|
| const PlatformTouchEvent& event,
|
| + const Vector<PlatformTouchEvent>& coalescedEvents,
|
| HeapVector<TouchEventManager::TouchInfo>& touchInfos) {
|
| // Iterate through the touch points, sending PointerEvents to the targets as
|
| // required.
|
| @@ -398,16 +396,9 @@ void PointerEventManager::dispatchTouchPointerEvents(
|
| if (touchInfo.touchNode && touchInfo.targetFrame &&
|
| touchPoint.state() != PlatformTouchPoint::TouchStationary &&
|
| !m_inCanceledStateForPointerTypeTouch) {
|
| - FloatPoint pagePoint = touchInfo.targetFrame->view()->rootFrameToContents(
|
| - touchInfo.point.pos());
|
| - float scaleFactor = 1.0f / touchInfo.targetFrame->pageZoomFactor();
|
| - FloatPoint scrollPosition(touchInfo.targetFrame->view()->scrollOffset());
|
| - FloatPoint framePoint = pagePoint.scaledBy(scaleFactor);
|
| - framePoint.moveBy(scrollPosition.scaledBy(-scaleFactor));
|
| PointerEvent* pointerEvent = m_pointerEventFactory.create(
|
| - pointerEventNameForTouchPointState(touchPoint.state()), touchPoint,
|
| - event.getModifiers(), touchPoint.radius().scaledBy(scaleFactor),
|
| - framePoint,
|
| + touchPoint, getCoalescedPoints(coalescedEvents, touchPoint.id()),
|
| + event.getModifiers(), touchInfo.targetFrame,
|
| touchInfo.touchNode ? touchInfo.touchNode->document().domWindow()
|
| : nullptr);
|
|
|
| @@ -463,9 +454,11 @@ WebInputEventResult PointerEventManager::sendTouchPointerEvent(
|
| WebInputEventResult PointerEventManager::sendMousePointerEvent(
|
| Node* target,
|
| const AtomicString& mouseEventType,
|
| - const PlatformMouseEvent& mouseEvent) {
|
| - PointerEvent* pointerEvent = m_pointerEventFactory.create(
|
| - mouseEventType, mouseEvent, m_frame->document()->domWindow());
|
| + const PlatformMouseEvent& mouseEvent,
|
| + const Vector<PlatformMouseEvent>& coalescedEvents) {
|
| + PointerEvent* pointerEvent =
|
| + m_pointerEventFactory.create(mouseEventType, mouseEvent, coalescedEvents,
|
| + m_frame->document()->domWindow());
|
|
|
| // This is for when the mouse is released outside of the page.
|
| if (pointerEvent->type() == EventTypeNames::pointermove &&
|
|
|