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

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

Issue 2650403006: Remove PlatformMouseEvent and use WebMouseEvent instead (Closed)
Patch Set: Fix nits Created 3 years, 11 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/MouseEventManager.cpp
diff --git a/third_party/WebKit/Source/core/input/MouseEventManager.cpp b/third_party/WebKit/Source/core/input/MouseEventManager.cpp
index bb2943116f4784d1693ddff9ccce864dc8ca6d5a..aaca3de4a6922a173bbbca8e925282d38145c232 100644
--- a/third_party/WebKit/Source/core/input/MouseEventManager.cpp
+++ b/third_party/WebKit/Source/core/input/MouseEventManager.cpp
@@ -35,25 +35,21 @@ namespace blink {
namespace {
-PlatformMouseEvent mouseEventWithRegion(Node* node,
- const PlatformMouseEvent& mouseEvent) {
+String canvasRegionId(Node* node, const WebMouseEvent& mouseEvent) {
if (!node->isElementNode())
- return mouseEvent;
+ return String();
Element* element = toElement(node);
if (!element->isInCanvasSubtree())
- return mouseEvent;
+ return String();
HTMLCanvasElement* canvas =
Traversal<HTMLCanvasElement>::firstAncestorOrSelf(*element);
// In this case, the event target is canvas and mouse rerouting doesn't
// happen.
if (canvas == element)
- return mouseEvent;
- String region = canvas->getIdFromControl(element);
- PlatformMouseEvent newMouseEvent = mouseEvent;
- newMouseEvent.setRegion(region);
- return newMouseEvent;
+ return String();
+ return canvas->getIdFromControl(element);
}
// The amount of time to wait before sending a fake mouse event triggered
@@ -100,7 +96,7 @@ void MouseEventManager::clear() {
m_clickNode = nullptr;
m_mouseDownPos = IntPoint();
m_mouseDownTimestamp = TimeTicks();
- m_mouseDown = PlatformMouseEvent();
+ m_mouseDown = WebMouseEvent();
m_svgPan = false;
m_dragStartPos = LayoutPoint();
m_fakeMouseMoveEventTimer.stop();
@@ -118,46 +114,45 @@ DEFINE_TRACE(MouseEventManager) {
}
MouseEventManager::MouseEventBoundaryEventDispatcher::
- MouseEventBoundaryEventDispatcher(
- MouseEventManager* mouseEventManager,
- const PlatformMouseEvent* platformMouseEvent,
- EventTarget* exitedTarget)
+ MouseEventBoundaryEventDispatcher(MouseEventManager* mouseEventManager,
+ const WebMouseEvent* webMouseEvent,
+ EventTarget* exitedTarget,
+ const String& canvasRegionId)
: m_mouseEventManager(mouseEventManager),
- m_platformMouseEvent(platformMouseEvent),
- m_exitedTarget(exitedTarget) {}
+ m_webMouseEvent(webMouseEvent),
+ m_exitedTarget(exitedTarget),
+ m_canvasRegionId(canvasRegionId) {}
void MouseEventManager::MouseEventBoundaryEventDispatcher::dispatchOut(
EventTarget* target,
EventTarget* relatedTarget) {
- dispatch(
- target, relatedTarget, EventTypeNames::mouseout,
- mouseEventWithRegion(m_exitedTarget->toNode(), *m_platformMouseEvent),
- false);
+ dispatch(target, relatedTarget, EventTypeNames::mouseout,
+ canvasRegionId(m_exitedTarget->toNode(), *m_webMouseEvent),
+ *m_webMouseEvent, false);
}
void MouseEventManager::MouseEventBoundaryEventDispatcher::dispatchOver(
EventTarget* target,
EventTarget* relatedTarget) {
- dispatch(target, relatedTarget, EventTypeNames::mouseover,
- *m_platformMouseEvent, false);
+ dispatch(target, relatedTarget, EventTypeNames::mouseover, m_canvasRegionId,
+ *m_webMouseEvent, false);
}
void MouseEventManager::MouseEventBoundaryEventDispatcher::dispatchLeave(
EventTarget* target,
EventTarget* relatedTarget,
bool checkForListener) {
- dispatch(
- target, relatedTarget, EventTypeNames::mouseleave,
- mouseEventWithRegion(m_exitedTarget->toNode(), *m_platformMouseEvent),
- checkForListener);
+ dispatch(target, relatedTarget, EventTypeNames::mouseleave,
+ canvasRegionId(m_exitedTarget->toNode(), *m_webMouseEvent),
+ *m_webMouseEvent, checkForListener);
}
void MouseEventManager::MouseEventBoundaryEventDispatcher::dispatchEnter(
EventTarget* target,
EventTarget* relatedTarget,
bool checkForListener) {
- dispatch(target, relatedTarget, EventTypeNames::mouseenter,
- *m_platformMouseEvent, checkForListener);
+ dispatch(target, relatedTarget, EventTypeNames::mouseenter, m_canvasRegionId,
+ *m_webMouseEvent, checkForListener);
}
AtomicString
@@ -174,25 +169,28 @@ void MouseEventManager::MouseEventBoundaryEventDispatcher::dispatch(
EventTarget* target,
EventTarget* relatedTarget,
const AtomicString& type,
- const PlatformMouseEvent& platformMouseEvent,
+ const String& canvasRegionId,
+ const WebMouseEvent& webMouseEvent,
bool checkForListener) {
- m_mouseEventManager->dispatchMouseEvent(target, type, platformMouseEvent,
- relatedTarget, checkForListener);
+ m_mouseEventManager->dispatchMouseEvent(target, type, webMouseEvent,
+ canvasRegionId, relatedTarget,
+ checkForListener);
}
-void MouseEventManager::sendBoundaryEvents(
- EventTarget* exitedTarget,
- EventTarget* enteredTarget,
- const PlatformMouseEvent& mousePlatformEvent) {
+void MouseEventManager::sendBoundaryEvents(EventTarget* exitedTarget,
+ EventTarget* enteredTarget,
+ const String& canvasRegionId,
+ const WebMouseEvent& mouseEvent) {
MouseEventBoundaryEventDispatcher boundaryEventDispatcher(
- this, &mousePlatformEvent, exitedTarget);
+ this, &mouseEvent, exitedTarget, canvasRegionId);
boundaryEventDispatcher.sendBoundaryEvents(exitedTarget, enteredTarget);
}
WebInputEventResult MouseEventManager::dispatchMouseEvent(
EventTarget* target,
const AtomicString& mouseEventType,
- const PlatformMouseEvent& mouseEvent,
+ const WebMouseEvent& mouseEvent,
+ const String& canvasRegionId,
EventTarget* relatedTarget,
bool checkForListener) {
if (target && target->toNode() &&
@@ -206,9 +204,10 @@ WebInputEventResult MouseEventManager::dispatchMouseEvent(
mouseEventType == EventTypeNames::dblclick) {
clickCount = m_clickCount;
}
- MouseEvent* event = MouseEvent::create(
- mouseEventType, targetNode->document().domWindow(), mouseEvent,
- clickCount, relatedTarget ? relatedTarget->toNode() : nullptr);
+ MouseEvent* event =
+ MouseEvent::create(mouseEventType, targetNode->document().domWindow(),
+ mouseEvent, clickCount, canvasRegionId,
+ relatedTarget ? relatedTarget->toNode() : nullptr);
DispatchEventResult dispatchResult = target->dispatchEvent(event);
return EventHandlingUtil::toWebInputEventResult(dispatchResult);
}
@@ -217,32 +216,32 @@ WebInputEventResult MouseEventManager::dispatchMouseEvent(
WebInputEventResult MouseEventManager::setMousePositionAndDispatchMouseEvent(
Node* targetNode,
+ const String& canvasRegionId,
const AtomicString& eventType,
- const PlatformMouseEvent& platformMouseEvent) {
+ const WebMouseEvent& webMouseEvent) {
// If the target node is a text node, dispatch on the parent node.
if (targetNode && targetNode->isTextNode())
targetNode = FlatTreeTraversal::parent(*targetNode);
- setNodeUnderMouse(targetNode, platformMouseEvent);
+ setNodeUnderMouse(targetNode, canvasRegionId, webMouseEvent);
- return dispatchMouseEvent(m_nodeUnderMouse, eventType, platformMouseEvent,
- nullptr);
+ return dispatchMouseEvent(m_nodeUnderMouse, eventType, webMouseEvent,
+ canvasRegionId, nullptr);
}
WebInputEventResult MouseEventManager::dispatchMouseClickIfNeeded(
const MouseEventWithHitTestResults& mev) {
// We only prevent click event when the click may cause contextmenu to popup.
// However, we always send auxclick.
- bool contextMenuEvent = !RuntimeEnabledFeatures::auxclickEnabled() &&
- mev.event().pointerProperties().button ==
- WebPointerProperties::Button::Right;
+ bool contextMenuEvent =
+ !RuntimeEnabledFeatures::auxclickEnabled() &&
+ mev.event().button == WebPointerProperties::Button::Right;
#if OS(MACOSX)
// FIXME: The Mac port achieves the same behavior by checking whether the
// context menu is currently open in WebPage::mouseEvent(). Consider merging
// the implementations.
- if (mev.event().pointerProperties().button ==
- WebPointerProperties::Button::Left &&
- mev.event().getModifiers() & PlatformEvent::CtrlKey)
+ if (mev.event().button == WebPointerProperties::Button::Left &&
+ mev.event().modifiers() & WebInputEvent::Modifiers::ControlKey)
contextMenuEvent = true;
#endif
@@ -269,12 +268,12 @@ WebInputEventResult MouseEventManager::dispatchMouseClickIfNeeded(
}
if (clickTargetNode) {
clickEventResult = dispatchMouseEvent(
- clickTargetNode, !RuntimeEnabledFeatures::auxclickEnabled() ||
- (mev.event().pointerProperties().button ==
- WebPointerProperties::Button::Left)
- ? EventTypeNames::click
- : EventTypeNames::auxclick,
- mev.event(), nullptr);
+ clickTargetNode,
+ !RuntimeEnabledFeatures::auxclickEnabled() ||
+ (mev.event().button == WebPointerProperties::Button::Left)
+ ? EventTypeNames::click
+ : EventTypeNames::auxclick,
+ mev.event(), mev.canvasRegionId(), nullptr);
}
}
return clickEventResult;
@@ -300,14 +299,17 @@ void MouseEventManager::fakeMouseMoveEventTimerFired(TimerBase* timer) {
if (!m_frame->page()->isCursorVisible())
return;
- PlatformMouseEvent fakeMouseMoveEvent(
- m_lastKnownMousePosition, m_lastKnownMouseGlobalPosition,
- WebPointerProperties::Button::NoButton, PlatformEvent::MouseMoved, 0,
- static_cast<PlatformEvent::Modifiers>(
- KeyboardEventManager::getCurrentModifierState()),
- PlatformMouseEvent::RealOrIndistinguishable, TimeTicks::Now(),
- WebPointerProperties::PointerType::Mouse);
- Vector<PlatformMouseEvent> coalescedEvents;
+ WebMouseEvent fakeMouseMoveEvent(
+ WebInputEvent::MouseMove,
+ WebFloatPoint(m_lastKnownMousePosition.x(), m_lastKnownMousePosition.y()),
+ WebFloatPoint(m_lastKnownMouseGlobalPosition.x(),
+ m_lastKnownMouseGlobalPosition.y()),
+ WebPointerProperties::Button::NoButton, 0,
+ KeyboardEventManager::getCurrentModifierState(),
+ TimeTicks::Now().InSeconds());
+ // TODO(dtapuska): Update m_lastKnowMousePosition to be viewport coordinates.
+ fakeMouseMoveEvent.setFrameScale(1);
+ Vector<WebMouseEvent> coalescedEvents;
m_frame->eventHandler().handleMouseMoveEvent(fakeMouseMoveEvent,
coalescedEvents);
}
@@ -316,9 +318,9 @@ void MouseEventManager::cancelFakeMouseMoveEvent() {
m_fakeMouseMoveEventTimer.stop();
}
-void MouseEventManager::setNodeUnderMouse(
- Node* target,
- const PlatformMouseEvent& platformMouseEvent) {
+void MouseEventManager::setNodeUnderMouse(Node* target,
+ const String& canvasRegionId,
+ const WebMouseEvent& webMouseEvent) {
Node* lastNodeUnderMouse = m_nodeUnderMouse;
m_nodeUnderMouse = target;
@@ -367,7 +369,8 @@ void MouseEventManager::setNodeUnderMouse(
lastNodeUnderMouse = nullptr;
}
- sendBoundaryEvents(lastNodeUnderMouse, m_nodeUnderMouse, platformMouseEvent);
+ sendBoundaryEvents(lastNodeUnderMouse, m_nodeUnderMouse, canvasRegionId,
+ webMouseEvent);
}
void MouseEventManager::nodeChildrenWillBeRemoved(ContainerNode& container) {
@@ -493,17 +496,18 @@ bool MouseEventManager::slideFocusOnShadowHostIfNecessary(
}
void MouseEventManager::handleMousePressEventUpdateStates(
- const PlatformMouseEvent& mouseEvent) {
+ const WebMouseEvent& mouseEvent) {
cancelFakeMouseMoveEvent();
m_mousePressed = true;
m_capturesDragging = true;
setLastKnownMousePosition(mouseEvent);
m_mouseDownMayStartDrag = false;
m_mouseDownMayStartAutoscroll = false;
- m_mouseDownTimestamp = mouseEvent.timestamp();
+ m_mouseDownTimestamp = TimeTicks::FromSeconds(mouseEvent.timeStampSeconds());
if (FrameView* view = m_frame->view()) {
- m_mouseDownPos = view->rootFrameToContents(mouseEvent.position());
+ m_mouseDownPos = view->rootFrameToContents(
+ flooredIntPoint(mouseEvent.positionInRootFrame()));
} else {
invalidateClick();
}
@@ -517,11 +521,10 @@ IntPoint MouseEventManager::lastKnownMousePosition() {
return m_lastKnownMousePosition;
}
-void MouseEventManager::setLastKnownMousePosition(
- const PlatformMouseEvent& event) {
+void MouseEventManager::setLastKnownMousePosition(const WebMouseEvent& event) {
m_isMousePositionUnknown = false;
- m_lastKnownMousePosition = event.position();
- m_lastKnownMouseGlobalPosition = event.globalPosition();
+ m_lastKnownMousePosition = flooredIntPoint(event.positionInRootFrame());
+ m_lastKnownMouseGlobalPosition = IntPoint(event.globalX, event.globalY);
}
void MouseEventManager::dispatchFakeMouseMoveEventSoon() {
@@ -561,11 +564,12 @@ WebInputEventResult MouseEventManager::handleMousePressEvent(
m_frame->document()->updateStyleAndLayoutIgnorePendingStylesheets();
if (FrameView* frameView = m_frame->view()) {
- if (frameView->isPointInScrollbarCorner(event.event().position()))
+ if (frameView->isPointInScrollbarCorner(
+ flooredIntPoint(event.event().positionInRootFrame())))
return WebInputEventResult::NotHandled;
}
- bool singleClick = event.event().clickCount() <= 1;
+ bool singleClick = event.event().clickCount <= 1;
m_mouseDownMayStartDrag =
singleClick && !isLinkSelection(event) && !isExtendingSelection(event);
@@ -576,10 +580,12 @@ WebInputEventResult MouseEventManager::handleMousePressEvent(
if (m_frame->document()->isSVGDocument() &&
m_frame->document()->accessSVGExtensions().zoomAndPanEnabled()) {
- if (event.event().shiftKey() && singleClick) {
+ if ((event.event().modifiers() & WebInputEvent::Modifiers::ShiftKey) &&
+ singleClick) {
m_svgPan = true;
m_frame->document()->accessSVGExtensions().startPan(
- m_frame->view()->rootFrameToContents(event.event().position()));
+ m_frame->view()->rootFrameToContents(
+ flooredIntPoint(event.event().positionInRootFrame())));
return WebInputEventResult::HandledSystem;
}
}
@@ -593,16 +599,16 @@ WebInputEventResult MouseEventManager::handleMousePressEvent(
m_mousePressNode = innerNode;
m_frame->document()->setSequentialFocusNavigationStartingPoint(innerNode);
- m_dragStartPos = event.event().position();
+ m_dragStartPos = flooredIntPoint(event.event().positionInRootFrame());
bool swallowEvent = false;
m_mousePressed = true;
- if (event.event().clickCount() == 2) {
+ if (event.event().clickCount == 2) {
swallowEvent = m_frame->eventHandler()
.selectionController()
.handleMousePressEventDoubleClick(event);
- } else if (event.event().clickCount() >= 3) {
+ } else if (event.event().clickCount >= 3) {
swallowEvent = m_frame->eventHandler()
.selectionController()
.handleMousePressEventTripleClick(event);
@@ -647,30 +653,28 @@ bool MouseEventManager::handleDragDropIfPossible(
// TODO(mustaq): Suppressing long-tap MouseEvents could break
// drag-drop. Will do separately because of the risk. crbug.com/606938.
- PlatformMouseEvent mouseDownEvent(
- gestureEvent, WebPointerProperties::Button::Left,
- PlatformEvent::MousePressed, 1,
- static_cast<PlatformEvent::Modifiers>(modifiers |
- PlatformEvent::LeftButtonDown),
- PlatformMouseEvent::FromTouch, TimeTicks::Now(),
- WebPointerProperties::PointerType::Mouse);
+ WebMouseEvent mouseDownEvent(
+ WebInputEvent::MouseDown, gestureEvent,
+ WebPointerProperties::Button::Left, 1,
+ modifiers | WebInputEvent::Modifiers::LeftButtonDown |
+ WebInputEvent::Modifiers::IsCompatibilityEventForTouch,
+ TimeTicks::Now().InSeconds());
m_mouseDown = mouseDownEvent;
- PlatformMouseEvent mouseDragEvent(
- gestureEvent, WebPointerProperties::Button::Left,
- PlatformEvent::MouseMoved, 1,
- static_cast<PlatformEvent::Modifiers>(modifiers |
- PlatformEvent::LeftButtonDown),
- PlatformMouseEvent::FromTouch, TimeTicks::Now(),
- WebPointerProperties::PointerType::Mouse);
+ WebMouseEvent mouseDragEvent(
+ WebInputEvent::MouseMove, gestureEvent,
+ WebPointerProperties::Button::Left, 1,
+ modifiers | WebInputEvent::Modifiers::LeftButtonDown |
+ WebInputEvent::Modifiers::IsCompatibilityEventForTouch,
+ TimeTicks::Now().InSeconds());
HitTestRequest request(HitTestRequest::ReadOnly);
MouseEventWithHitTestResults mev =
EventHandlingUtil::performMouseEventHitTest(m_frame, request,
mouseDragEvent);
m_mouseDownMayStartDrag = true;
dragState().m_dragSrc = nullptr;
- m_mouseDownPos =
- m_frame->view()->rootFrameToContents(mouseDragEvent.position());
+ m_mouseDownPos = m_frame->view()->rootFrameToContents(
+ flooredIntPoint(mouseDragEvent.positionInRootFrame()));
return handleDrag(mev, DragInitiator::Touch);
}
return false;
@@ -701,8 +705,7 @@ WebInputEventResult MouseEventManager::handleMouseDraggedEvent(
// that ends as a result of a mouse release does not send a mouse release
// event. As a result, m_mousePressed also ends up remaining true until
// the next mouse release event seen by the EventHandler.
- if (event.event().pointerProperties().button !=
- WebPointerProperties::Button::Left)
+ if (event.event().button != WebPointerProperties::Button::Left)
m_mousePressed = false;
if (!m_mousePressed)
@@ -751,7 +754,7 @@ WebInputEventResult MouseEventManager::handleMouseDraggedEvent(
bool MouseEventManager::handleDrag(const MouseEventWithHitTestResults& event,
DragInitiator initiator) {
- DCHECK(event.event().type() == PlatformEvent::MouseMoved);
+ DCHECK(event.event().type() == WebInputEvent::MouseMove);
// Callers must protect the reference to FrameView, since this function may
// dispatch DOM events, causing page/FrameView to go away.
DCHECK(m_frame);
@@ -766,7 +769,9 @@ bool MouseEventManager::handleDrag(const MouseEventWithHitTestResults& event,
Node* node = result.innerNode();
if (node) {
DragController::SelectionDragPolicy selectionDragPolicy =
- event.event().timestamp() - m_mouseDownTimestamp < kTextDragDelay
+ TimeTicks::FromSeconds(event.event().timeStampSeconds()) -
+ m_mouseDownTimestamp <
+ kTextDragDelay
? DragController::DelayedSelectionDragResolution
: DragController::ImmediateSelectionDragResolution;
dragState().m_dragSrc = m_frame->page()->dragController().draggableNode(
@@ -794,7 +799,8 @@ bool MouseEventManager::handleDrag(const MouseEventWithHitTestResults& event,
m_frame->view()->setCursor(pointerCursor());
if (initiator == DragInitiator::Mouse &&
- !dragThresholdExceeded(event.event().position())) {
+ !dragThresholdExceeded(
+ flooredIntPoint(event.event().positionInRootFrame()))) {
dragState().m_dragSrc = nullptr;
return true;
}
@@ -867,7 +873,7 @@ bool MouseEventManager::tryStartDrag(
// eventhandler canceled.
WebInputEventResult MouseEventManager::dispatchDragSrcEvent(
const AtomicString& eventType,
- const PlatformMouseEvent& event) {
+ const WebMouseEvent& event) {
return dispatchDragEvent(eventType, dragState().m_dragSrc.get(), event,
dragState().m_dragDataTransfer.get());
}
@@ -875,7 +881,7 @@ WebInputEventResult MouseEventManager::dispatchDragSrcEvent(
WebInputEventResult MouseEventManager::dispatchDragEvent(
const AtomicString& eventType,
Node* dragTarget,
- const PlatformMouseEvent& event,
+ const WebMouseEvent& event,
DataTransfer* dataTransfer) {
FrameView* view = m_frame->view();
@@ -886,13 +892,16 @@ WebInputEventResult MouseEventManager::dispatchDragEvent(
const bool cancelable = eventType != EventTypeNames::dragleave &&
eventType != EventTypeNames::dragend;
+ IntPoint position = flooredIntPoint(event.positionInRootFrame());
+ IntPoint movement = flooredIntPoint(event.movementInRootFrame());
DragEvent* me = DragEvent::create(
eventType, true, cancelable, m_frame->document()->domWindow(), 0,
- event.globalPosition().x(), event.globalPosition().y(),
- event.position().x(), event.position().y(), event.movementDelta().x(),
- event.movementDelta().y(), event.getModifiers(), 0,
- MouseEvent::platformModifiersToButtons(event.getModifiers()), nullptr,
- event.timestamp(), dataTransfer, event.getSyntheticEventType());
+ event.globalX, event.globalY, position.x(), position.y(), movement.x(),
+ movement.y(), static_cast<PlatformEvent::Modifiers>(event.modifiers()), 0,
+ MouseEvent::platformModifiersToButtons(event.modifiers()), nullptr,
+ TimeTicks::FromSeconds(event.timeStampSeconds()), dataTransfer,
+ event.fromTouch() ? MouseEvent::FromTouch
+ : MouseEvent::RealOrIndistinguishable);
return EventHandlingUtil::toWebInputEventResult(
dragTarget->dispatchEvent(me));
@@ -905,7 +914,7 @@ void MouseEventManager::clearDragDataTransfer() {
}
}
-void MouseEventManager::dragSourceEndedAt(const PlatformMouseEvent& event,
+void MouseEventManager::dragSourceEndedAt(const WebMouseEvent& event,
DragOperation operation) {
if (dragState().m_dragSrc) {
dragState().m_dragDataTransfer->setDestinationOperation(operation);
« no previous file with comments | « third_party/WebKit/Source/core/input/MouseEventManager.h ('k') | third_party/WebKit/Source/core/input/PointerEventManager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698