Index: third_party/WebKit/Source/core/input/GestureManager.cpp |
diff --git a/third_party/WebKit/Source/core/input/GestureManager.cpp b/third_party/WebKit/Source/core/input/GestureManager.cpp |
index fbd5e84c790f28ec4280492d2ba75604c10893a6..be5e8ca3de61544b658e3b502cf70d025b309ef8 100644 |
--- a/third_party/WebKit/Source/core/input/GestureManager.cpp |
+++ b/third_party/WebKit/Source/core/input/GestureManager.cpp |
@@ -19,10 +19,12 @@ |
namespace blink { |
GestureManager::GestureManager(LocalFrame* frame, ScrollManager* scrollManager, |
+ MouseEventManager* mouseEventManager, |
PointerEventManager* pointerEventManager, |
SelectionController* selectionController) |
: m_frame(frame) |
, m_scrollManager(scrollManager) |
+ , m_mouseEventManager(mouseEventManager) |
, m_pointerEventManager(pointerEventManager) |
, m_selectionController(selectionController) |
{ |
@@ -39,9 +41,10 @@ void GestureManager::clear() |
DEFINE_TRACE(GestureManager) |
{ |
visitor->trace(m_frame); |
- visitor->trace(m_selectionController); |
- visitor->trace(m_pointerEventManager); |
visitor->trace(m_scrollManager); |
+ visitor->trace(m_mouseEventManager); |
+ visitor->trace(m_pointerEventManager); |
+ visitor->trace(m_selectionController); |
} |
HitTestRequest::HitTestRequestType GestureManager::getHitTypeForGestureType(PlatformEvent::EventType type) |
@@ -146,7 +149,7 @@ WebInputEventResult GestureManager::handleGestureTap(const GestureEventWithHitTe |
WebPointerProperties::Button::NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0, |
static_cast<PlatformEvent::Modifiers>(modifiers), |
PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), WebPointerProperties::PointerType::Mouse); |
- m_frame->eventHandler().dispatchMouseEvent(EventTypeNames::mousemove, currentHitTest.innerNode(), 0, fakeMouseMove); |
+ m_mouseEventManager->setMousePositionAndDispatchMouseEvent(currentHitTest.innerNode(), EventTypeNames::mousemove, fakeMouseMove); |
} |
// Do a new hit-test in case the mousemove event changed the DOM. |
@@ -172,7 +175,7 @@ WebInputEventResult GestureManager::handleGestureTap(const GestureEventWithHitTe |
if (tappedNonTextNode && tappedNonTextNode->isTextNode()) |
tappedNonTextNode = FlatTreeTraversal::parent(*tappedNonTextNode); |
- m_frame->eventHandler().setClickNode(tappedNonTextNode); |
+ m_mouseEventManager->setClickNode(tappedNonTextNode); |
PlatformMouseEvent fakeMouseDown(gestureEvent.position(), gestureEvent.globalPosition(), |
WebPointerProperties::Button::Left, PlatformEvent::MousePressed, gestureEvent.tapCount(), |
@@ -183,12 +186,13 @@ WebInputEventResult GestureManager::handleGestureTap(const GestureEventWithHitTe |
// mean for for TEs? What's the right balance here? crbug.com/617255 |
WebInputEventResult mouseDownEventResult = WebInputEventResult::HandledSuppressed; |
if (!m_suppressMouseEventsFromGestures) { |
- mouseDownEventResult = m_frame->eventHandler().dispatchMouseEvent(EventTypeNames::mousedown, currentHitTest.innerNode(), gestureEvent.tapCount(), fakeMouseDown); |
+ m_mouseEventManager->setClickCount(gestureEvent.tapCount()); |
+ mouseDownEventResult = m_mouseEventManager->setMousePositionAndDispatchMouseEvent(currentHitTest.innerNode(), EventTypeNames::mousedown, fakeMouseDown); |
m_selectionController->initializeSelectionState(); |
if (mouseDownEventResult == WebInputEventResult::NotHandled) |
- mouseDownEventResult = m_frame->eventHandler().handleMouseFocus(currentHitTest, InputDeviceCapabilities::firesTouchEventsSourceCapabilities()); |
+ mouseDownEventResult = m_mouseEventManager->handleMouseFocus(currentHitTest, InputDeviceCapabilities::firesTouchEventsSourceCapabilities()); |
if (mouseDownEventResult == WebInputEventResult::NotHandled) |
- mouseDownEventResult = m_frame->eventHandler().handleMousePressEvent(MouseEventWithHitTestResults(fakeMouseDown, currentHitTest)); |
+ mouseDownEventResult = m_mouseEventManager->handleMousePressEvent(MouseEventWithHitTestResults(fakeMouseDown, currentHitTest)); |
} |
if (currentHitTest.innerNode()) { |
@@ -213,7 +217,7 @@ WebInputEventResult GestureManager::handleGestureTap(const GestureEventWithHitTe |
PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), WebPointerProperties::PointerType::Mouse); |
WebInputEventResult mouseUpEventResult = m_suppressMouseEventsFromGestures |
? WebInputEventResult::HandledSuppressed |
- : m_frame->eventHandler().dispatchMouseEvent(EventTypeNames::mouseup, currentHitTest.innerNode(), gestureEvent.tapCount(), fakeMouseUp); |
+ : m_mouseEventManager->setMousePositionAndDispatchMouseEvent(currentHitTest.innerNode(), EventTypeNames::mouseup, fakeMouseUp); |
WebInputEventResult clickEventResult = WebInputEventResult::NotHandled; |
if (tappedNonTextNode) { |
@@ -224,15 +228,15 @@ WebInputEventResult GestureManager::handleGestureTap(const GestureEventWithHitTe |
// Both tappedNonTextNode and currentHitTest.innerNode()) don't need to be updated |
// because commonAncestor() will exit early if their documents are different. |
tappedNonTextNode->updateDistribution(); |
- Node* clickTargetNode = currentHitTest.innerNode()->commonAncestor(*tappedNonTextNode, EventHandler::parentForClickEvent); |
- clickEventResult = m_frame->eventHandler().dispatchMouseEvent(EventTypeNames::click, clickTargetNode, gestureEvent.tapCount(), fakeMouseUp); |
+ Node* clickTargetNode = currentHitTest.innerNode()->commonAncestor(*tappedNonTextNode, EventHandlingUtil::parentForClickEvent); |
+ clickEventResult = m_mouseEventManager->setMousePositionAndDispatchMouseEvent(clickTargetNode, EventTypeNames::click, fakeMouseUp); |
} |
- m_frame->eventHandler().setClickNode(nullptr); |
+ m_mouseEventManager->setClickNode(nullptr); |
} |
if (mouseUpEventResult == WebInputEventResult::NotHandled) |
- mouseUpEventResult = m_frame->eventHandler().handleMouseReleaseEvent(MouseEventWithHitTestResults(fakeMouseUp, currentHitTest)); |
- m_frame->eventHandler().clearDragHeuristicState(); |
+ mouseUpEventResult = m_mouseEventManager->handleMouseReleaseEvent(MouseEventWithHitTestResults(fakeMouseUp, currentHitTest)); |
+ m_mouseEventManager->clearDragHeuristicState(); |
WebInputEventResult eventResult = EventHandlingUtil::mergeEventResult(EventHandlingUtil::mergeEventResult(mouseDownEventResult, mouseUpEventResult), clickEventResult); |
if (eventResult == WebInputEventResult::NotHandled && tappedNode && m_frame->page()) { |
@@ -259,13 +263,13 @@ WebInputEventResult GestureManager::handleGestureLongPress(const GestureEventWit |
m_longTapShouldInvokeContextMenu = false; |
bool hitTestContainsLinks = hitTestResult.URLElement() || !hitTestResult.absoluteImageURL().isNull() || !hitTestResult.absoluteMediaURL().isNull(); |
- if (!hitTestContainsLinks && m_frame->eventHandler().handleDragDropIfPossible(targetedEvent)) { |
+ if (!hitTestContainsLinks && m_mouseEventManager->handleDragDropIfPossible(targetedEvent)) { |
m_longTapShouldInvokeContextMenu = true; |
return WebInputEventResult::HandledSystem; |
} |
if (m_selectionController->handleGestureLongPress(gestureEvent, hitTestResult)) { |
- m_frame->eventHandler().focusDocumentView(); |
+ m_mouseEventManager->focusDocumentView(); |
return WebInputEventResult::HandledSystem; |
} |
@@ -299,8 +303,8 @@ WebInputEventResult GestureManager::sendContextMenuEventForGesture(const Gesture |
WebPointerProperties::Button::NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0, |
static_cast<PlatformEvent::Modifiers>(modifiers), |
PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), WebPointerProperties::PointerType::Mouse); |
- m_frame->eventHandler().dispatchMouseEvent( |
- EventTypeNames::mousemove, targetedEvent.hitTestResult().innerNode(), 0, fakeMouseMove); |
+ m_mouseEventManager->setMousePositionAndDispatchMouseEvent( |
+ targetedEvent.hitTestResult().innerNode(), EventTypeNames::mousemove, fakeMouseMove); |
} |
PlatformEvent::EventType eventType = PlatformEvent::MousePressed; |
@@ -313,16 +317,16 @@ WebInputEventResult GestureManager::sendContextMenuEventForGesture(const Gesture |
if (!m_suppressMouseEventsFromGestures && m_frame->view()) { |
HitTestRequest request(HitTestRequest::Active); |
LayoutPoint documentPoint = m_frame->view()->rootFrameToContents(targetedEvent.event().position()); |
- MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(request, documentPoint, mouseEvent); |
+ MouseEventWithHitTestResults mev = m_frame->document()->performMouseEventHitTest(request, documentPoint, mouseEvent); |
- WebInputEventResult eventResult = m_frame->eventHandler().dispatchMouseEvent( |
- EventTypeNames::mousedown, mev.innerNode(), /* clickCount */ 0, mouseEvent); |
+ WebInputEventResult eventResult = m_mouseEventManager->setMousePositionAndDispatchMouseEvent( |
+ mev.innerNode(), EventTypeNames::mousedown, mouseEvent); |
if (eventResult == WebInputEventResult::NotHandled) |
- eventResult = m_frame->eventHandler().handleMouseFocus(mev.hitTestResult(), InputDeviceCapabilities::firesTouchEventsSourceCapabilities()); |
+ eventResult = m_mouseEventManager->handleMouseFocus(mev.hitTestResult(), InputDeviceCapabilities::firesTouchEventsSourceCapabilities()); |
if (eventResult == WebInputEventResult::NotHandled) |
- m_frame->eventHandler().handleMousePressEvent(mev); |
+ m_mouseEventManager->handleMousePressEvent(mev); |
} |
return m_frame->eventHandler().sendContextMenuEvent(mouseEvent); |