| 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);
|
|
|