| Index: third_party/WebKit/Source/core/input/EventHandler.cpp
|
| diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp
|
| index 96af9d64c8c2af73e7aed4c16e19208c50fa09ee..db8bd89d6d256f3f21666d6ba0a214dd6edc30a7 100644
|
| --- a/third_party/WebKit/Source/core/input/EventHandler.cpp
|
| +++ b/third_party/WebKit/Source/core/input/EventHandler.cpp
|
| @@ -652,7 +652,8 @@ WebInputEventResult EventHandler::handleMousePressEvent(
|
| m_frame->selection().setCaretBlinkingSuspended(true);
|
|
|
| WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents(
|
| - EventTypeNames::mousedown, mev.innerNode(), mev.event());
|
| + EventTypeNames::mousedown, mev.innerNode(), mev.event(),
|
| + Vector<PlatformMouseEvent>());
|
|
|
| if (eventResult == WebInputEventResult::NotHandled && m_frame->view()) {
|
| FrameView* view = m_frame->view();
|
| @@ -730,11 +731,13 @@ WebInputEventResult EventHandler::handleMousePressEvent(
|
| }
|
|
|
| WebInputEventResult EventHandler::handleMouseMoveEvent(
|
| - const PlatformMouseEvent& event) {
|
| + const PlatformMouseEvent& event,
|
| + const Vector<PlatformMouseEvent>& coalescedEvents) {
|
| TRACE_EVENT0("blink", "EventHandler::handleMouseMoveEvent");
|
|
|
| HitTestResult hoveredNode = HitTestResult();
|
| - WebInputEventResult result = handleMouseMoveOrLeaveEvent(event, &hoveredNode);
|
| + WebInputEventResult result =
|
| + handleMouseMoveOrLeaveEvent(event, coalescedEvents, &hoveredNode);
|
|
|
| Page* page = m_frame->page();
|
| if (!page)
|
| @@ -759,11 +762,13 @@ WebInputEventResult EventHandler::handleMouseMoveEvent(
|
| void EventHandler::handleMouseLeaveEvent(const PlatformMouseEvent& event) {
|
| TRACE_EVENT0("blink", "EventHandler::handleMouseLeaveEvent");
|
|
|
| - handleMouseMoveOrLeaveEvent(event, 0, false, true);
|
| + handleMouseMoveOrLeaveEvent(event, Vector<PlatformMouseEvent>(), 0, false,
|
| + true);
|
| }
|
|
|
| WebInputEventResult EventHandler::handleMouseMoveOrLeaveEvent(
|
| const PlatformMouseEvent& mouseEvent,
|
| + const Vector<PlatformMouseEvent>& coalescedEvents,
|
| HitTestResult* hoveredNode,
|
| bool onlyUpdateScrollbars,
|
| bool forceLeave) {
|
| @@ -779,8 +784,9 @@ WebInputEventResult EventHandler::handleMouseMoveOrLeaveEvent(
|
| m_mouseEventManager->handleSvgPanIfNeeded(false);
|
|
|
| if (m_frameSetBeingResized) {
|
| - return updatePointerTargetAndDispatchEvents(
|
| - EventTypeNames::mousemove, m_frameSetBeingResized.get(), mouseEvent);
|
| + return updatePointerTargetAndDispatchEvents(EventTypeNames::mousemove,
|
| + m_frameSetBeingResized.get(),
|
| + mouseEvent, coalescedEvents);
|
| }
|
|
|
| // Send events right to a scrollbar if the mouse is pressed.
|
| @@ -861,8 +867,10 @@ WebInputEventResult EventHandler::handleMouseMoveOrLeaveEvent(
|
| // Event dispatch in sendMouseAndPointerBoundaryEvents may have caused the
|
| // subframe of the target node to be detached from its FrameView, in which
|
| // case the event should not be passed.
|
| - if (newSubframe->view())
|
| - eventResult = passMouseMoveEventToSubframe(mev, newSubframe, hoveredNode);
|
| + if (newSubframe->view()) {
|
| + eventResult = passMouseMoveEventToSubframe(mev, coalescedEvents,
|
| + newSubframe, hoveredNode);
|
| + }
|
| } else {
|
| if (scrollbar && !m_mouseEventManager->mousePressed()) {
|
| // Handle hover effects on platforms that support visual feedback on
|
| @@ -883,7 +891,7 @@ WebInputEventResult EventHandler::handleMouseMoveOrLeaveEvent(
|
| return eventResult;
|
|
|
| eventResult = updatePointerTargetAndDispatchEvents(
|
| - EventTypeNames::mousemove, mev.innerNode(), mev.event());
|
| + EventTypeNames::mousemove, mev.innerNode(), mev.event(), coalescedEvents);
|
| if (eventResult != WebInputEventResult::NotHandled)
|
| return eventResult;
|
|
|
| @@ -925,7 +933,7 @@ WebInputEventResult EventHandler::handleMouseReleaseEvent(
|
| m_lastScrollbarUnderMouse->mouseUp(mouseEvent);
|
| return updatePointerTargetAndDispatchEvents(
|
| EventTypeNames::mouseup, m_mouseEventManager->getNodeUnderMouse(),
|
| - mouseEvent);
|
| + mouseEvent, Vector<PlatformMouseEvent>());
|
| }
|
|
|
| // Mouse events simulated from touch should not hit-test again.
|
| @@ -963,7 +971,8 @@ WebInputEventResult EventHandler::handleMouseReleaseEvent(
|
| }
|
|
|
| WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents(
|
| - EventTypeNames::mouseup, mev.innerNode(), mev.event());
|
| + EventTypeNames::mouseup, mev.innerNode(), mev.event(),
|
| + Vector<PlatformMouseEvent>());
|
|
|
| WebInputEventResult clickEventResult =
|
| m_mouseEventManager->dispatchMouseClickIfNeeded(mev);
|
| @@ -1254,13 +1263,15 @@ void EventHandler::elementRemoved(EventTarget* target) {
|
| WebInputEventResult EventHandler::updatePointerTargetAndDispatchEvents(
|
| const AtomicString& mouseEventType,
|
| Node* targetNode,
|
| - const PlatformMouseEvent& mouseEvent) {
|
| + const PlatformMouseEvent& mouseEvent,
|
| + const Vector<PlatformMouseEvent>& coalescedEvents) {
|
| ASSERT(mouseEventType == EventTypeNames::mousedown ||
|
| mouseEventType == EventTypeNames::mousemove ||
|
| mouseEventType == EventTypeNames::mouseup);
|
|
|
| const auto& eventResult = m_pointerEventManager->sendMousePointerEvent(
|
| - updateMouseEventTargetNode(targetNode), mouseEventType, mouseEvent);
|
| + updateMouseEventTargetNode(targetNode), mouseEventType, mouseEvent,
|
| + coalescedEvents);
|
| return eventResult;
|
| }
|
|
|
| @@ -2065,9 +2076,10 @@ void EventHandler::updateLastScrollbarUnderMouse(Scrollbar* scrollbar,
|
| }
|
|
|
| WebInputEventResult EventHandler::handleTouchEvent(
|
| - const PlatformTouchEvent& event) {
|
| + const PlatformTouchEvent& event,
|
| + const Vector<PlatformTouchEvent>& coalescedEvents) {
|
| TRACE_EVENT0("blink", "EventHandler::handleTouchEvent");
|
| - return m_pointerEventManager->handleTouchEvents(event);
|
| + return m_pointerEventManager->handleTouchEvents(event, coalescedEvents);
|
| }
|
|
|
| WebInputEventResult EventHandler::passMousePressEventToSubframe(
|
| @@ -2083,13 +2095,14 @@ WebInputEventResult EventHandler::passMousePressEventToSubframe(
|
|
|
| WebInputEventResult EventHandler::passMouseMoveEventToSubframe(
|
| MouseEventWithHitTestResults& mev,
|
| + const Vector<PlatformMouseEvent>& coalescedEvents,
|
| LocalFrame* subframe,
|
| HitTestResult* hoveredNode) {
|
| if (m_mouseEventManager->mouseDownMayStartDrag())
|
| return WebInputEventResult::NotHandled;
|
| WebInputEventResult result =
|
| - subframe->eventHandler().handleMouseMoveOrLeaveEvent(mev.event(),
|
| - hoveredNode);
|
| + subframe->eventHandler().handleMouseMoveOrLeaveEvent(
|
| + mev.event(), coalescedEvents, hoveredNode);
|
| if (result != WebInputEventResult::NotHandled)
|
| return result;
|
| return WebInputEventResult::HandledSystem;
|
|
|