Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Unified Diff: third_party/WebKit/Source/core/input/GestureManager.cpp

Issue 2350433002: Extract more of the mouse logic from EventHandler (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..daabe4dff7f26326f17a6e7a62086f0fd9ff4183 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->dispatchMouseEvent(currentHitTest.innerNode(), EventTypeNames::mousemove, fakeMouseMove, 0);
}
// 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,12 @@ 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);
+ mouseDownEventResult = m_mouseEventManager->dispatchMouseEvent(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 +216,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->dispatchMouseEvent(currentHitTest.innerNode(), EventTypeNames::mouseup, fakeMouseUp);
WebInputEventResult clickEventResult = WebInputEventResult::NotHandled;
if (tappedNonTextNode) {
@@ -224,15 +227,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->dispatchMouseEvent(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 +262,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 +302,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->dispatchMouseEvent(
+ targetedEvent.hitTestResult().innerNode(), EventTypeNames::mousemove, fakeMouseMove, 0);
}
PlatformEvent::EventType eventType = PlatformEvent::MousePressed;
@@ -315,14 +318,14 @@ WebInputEventResult GestureManager::sendContextMenuEventForGesture(const Gesture
LayoutPoint documentPoint = m_frame->view()->rootFrameToContents(targetedEvent.event().position());
MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(request, documentPoint, mouseEvent);
- WebInputEventResult eventResult = m_frame->eventHandler().dispatchMouseEvent(
- EventTypeNames::mousedown, mev.innerNode(), /* clickCount */ 0, mouseEvent);
+ WebInputEventResult eventResult = m_mouseEventManager->dispatchMouseEvent(
+ mev.innerNode(), EventTypeNames::mousedown, mouseEvent, /* clickCount */ 0);
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);

Powered by Google App Engine
This is Rietveld 408576698