| Index: third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| diff --git a/third_party/WebKit/Source/core/input/PointerEventManager.cpp b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| index 9c1c959f29b6ab4c7e62e0a7f90508fdc5e12128..6cd9a7c9aafeb68509138f3fc34b017efa2964e8 100644
|
| --- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| +++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| @@ -52,6 +52,35 @@ bool isInDocument(EventTarget* n) {
|
|
|
| } // namespace
|
|
|
| +PointerEventManager::PointerEventManager(LocalFrame* frame,
|
| + MouseEventManager* mouseEventManager)
|
| + : m_frame(frame),
|
| + m_touchEventManager(new TouchEventManager(frame)),
|
| + m_mouseEventManager(mouseEventManager) {
|
| + clear();
|
| +}
|
| +
|
| +void PointerEventManager::clear() {
|
| + for (auto& entry : m_preventMouseEventForPointerType)
|
| + entry = false;
|
| + m_touchEventManager->clear();
|
| + m_inCanceledStateForPointerTypeTouch = false;
|
| + m_pointerEventFactory.clear();
|
| + m_touchIdsForCanceledPointerdowns.clear();
|
| + m_nodeUnderPointer.clear();
|
| + m_pointerCaptureTarget.clear();
|
| + m_pendingPointerCaptureTarget.clear();
|
| +}
|
| +
|
| +DEFINE_TRACE(PointerEventManager) {
|
| + visitor->trace(m_frame);
|
| + visitor->trace(m_nodeUnderPointer);
|
| + visitor->trace(m_pointerCaptureTarget);
|
| + visitor->trace(m_pendingPointerCaptureTarget);
|
| + visitor->trace(m_touchEventManager);
|
| + visitor->trace(m_mouseEventManager);
|
| +}
|
| +
|
| PointerEventManager::PointerEventBoundaryEventDispatcher::
|
| PointerEventBoundaryEventDispatcher(
|
| PointerEventManager* pointerEventManager,
|
| @@ -153,11 +182,9 @@ EventTarget* PointerEventManager::getEffectiveTargetForPointerEvent(
|
| return target;
|
| }
|
|
|
| -void PointerEventManager::sendMouseAndPossiblyPointerBoundaryEvents(
|
| - Node* exitedNode,
|
| +void PointerEventManager::sendMouseAndPointerBoundaryEvents(
|
| Node* enteredNode,
|
| - const PlatformMouseEvent& mouseEvent,
|
| - bool isFrameBoundaryTransition) {
|
| + const PlatformMouseEvent& mouseEvent) {
|
| // Mouse event type does not matter as this pointerevent will only be used
|
| // to create boundary pointer events and its type will be overridden in
|
| // |sendBoundaryEvents| function.
|
| @@ -169,15 +196,13 @@ void PointerEventManager::sendMouseAndPossiblyPointerBoundaryEvents(
|
| // stage. So if the event is not frame boundary transition it is only a
|
| // compatibility mouse event and we do not need to change pointer event
|
| // behavior regarding preventMouseEvent state in that case.
|
| - if (isFrameBoundaryTransition && dummyPointerEvent->buttons() == 0 &&
|
| - dummyPointerEvent->isPrimary()) {
|
| + if (dummyPointerEvent->buttons() == 0 && dummyPointerEvent->isPrimary()) {
|
| m_preventMouseEventForPointerType[toPointerTypeIndex(
|
| mouseEvent.pointerProperties().pointerType)] = false;
|
| }
|
|
|
| processCaptureAndPositionOfPointerEvent(dummyPointerEvent, enteredNode,
|
| - exitedNode, mouseEvent, true,
|
| - isFrameBoundaryTransition);
|
| + mouseEvent, true);
|
| }
|
|
|
| void PointerEventManager::sendBoundaryEvents(EventTarget* exitedTarget,
|
| @@ -410,10 +435,7 @@ WebInputEventResult PointerEventManager::sendTouchPointerEvent(
|
| WebInputEventResult PointerEventManager::sendMousePointerEvent(
|
| Node* target,
|
| const AtomicString& mouseEventType,
|
| - int clickCount,
|
| - const PlatformMouseEvent& mouseEvent,
|
| - Node* lastNodeUnderMouse,
|
| - Node** newNodeUnderMouse) {
|
| + const PlatformMouseEvent& mouseEvent) {
|
| PointerEvent* pointerEvent = m_pointerEventFactory.create(
|
| mouseEventType, mouseEvent, m_frame->document()->domWindow());
|
|
|
| @@ -431,14 +453,7 @@ WebInputEventResult PointerEventManager::sendMousePointerEvent(
|
| }
|
|
|
| EventTarget* pointerEventTarget = processCaptureAndPositionOfPointerEvent(
|
| - pointerEvent, target, lastNodeUnderMouse, mouseEvent, true, true);
|
| -
|
| - if (pointerEventTarget) {
|
| - // This is to prevent incorrect boundary events if capturing transition was
|
| - // delayed.
|
| - *newNodeUnderMouse = pointerEventTarget->toNode();
|
| - DCHECK(*newNodeUnderMouse);
|
| - }
|
| + pointerEvent, target, mouseEvent, true);
|
|
|
| EventTarget* effectiveTarget = getEffectiveTargetForPointerEvent(
|
| pointerEventTarget, pointerEvent->pointerId());
|
| @@ -468,9 +483,8 @@ WebInputEventResult PointerEventManager::sendMousePointerEvent(
|
| }
|
| }
|
| result = EventHandlingUtil::mergeEventResult(
|
| - result,
|
| - m_mouseEventManager->dispatchMouseEvent(
|
| - mouseTarget, mouseEventType, mouseEvent, nullptr, clickCount));
|
| + result, m_mouseEventManager->dispatchMouseEvent(
|
| + mouseTarget, mouseEventType, mouseEvent, nullptr));
|
| }
|
|
|
| if (pointerEvent->type() == EventTypeNames::pointerup ||
|
| @@ -488,26 +502,6 @@ WebInputEventResult PointerEventManager::sendMousePointerEvent(
|
| return result;
|
| }
|
|
|
| -PointerEventManager::PointerEventManager(LocalFrame* frame,
|
| - MouseEventManager* mouseEventManager)
|
| - : m_frame(frame),
|
| - m_touchEventManager(new TouchEventManager(frame)),
|
| - m_mouseEventManager(mouseEventManager) {
|
| - clear();
|
| -}
|
| -
|
| -void PointerEventManager::clear() {
|
| - for (auto& entry : m_preventMouseEventForPointerType)
|
| - entry = false;
|
| - m_touchEventManager->clear();
|
| - m_inCanceledStateForPointerTypeTouch = false;
|
| - m_pointerEventFactory.clear();
|
| - m_touchIdsForCanceledPointerdowns.clear();
|
| - m_nodeUnderPointer.clear();
|
| - m_pointerCaptureTarget.clear();
|
| - m_pendingPointerCaptureTarget.clear();
|
| -}
|
| -
|
| bool PointerEventManager::getPointerCaptureState(
|
| int pointerId,
|
| EventTarget** pointerCaptureTarget,
|
| @@ -532,27 +526,22 @@ bool PointerEventManager::getPointerCaptureState(
|
| EventTarget* PointerEventManager::processCaptureAndPositionOfPointerEvent(
|
| PointerEvent* pointerEvent,
|
| EventTarget* hitTestTarget,
|
| - EventTarget* lastNodeUnderMouse,
|
| const PlatformMouseEvent& mouseEvent,
|
| - bool sendMouseEvent,
|
| - bool setPointerPosition) {
|
| - if (setPointerPosition) {
|
| - processPendingPointerCapture(pointerEvent);
|
| -
|
| - if (!RuntimeEnabledFeatures::pointerEventV1SpecCapturingEnabled()) {
|
| - PointerCapturingMap::const_iterator it =
|
| - m_pointerCaptureTarget.find(pointerEvent->pointerId());
|
| - if (EventTarget* pointercaptureTarget =
|
| - (it != m_pointerCaptureTarget.end()) ? it->value : nullptr)
|
| - hitTestTarget = pointercaptureTarget;
|
| - }
|
| -
|
| - setNodeUnderPointer(pointerEvent, hitTestTarget);
|
| + bool sendMouseEvent) {
|
| + processPendingPointerCapture(pointerEvent);
|
| +
|
| + if (!RuntimeEnabledFeatures::pointerEventV1SpecCapturingEnabled()) {
|
| + PointerCapturingMap::const_iterator it =
|
| + m_pointerCaptureTarget.find(pointerEvent->pointerId());
|
| + if (EventTarget* pointercaptureTarget =
|
| + (it != m_pointerCaptureTarget.end()) ? it->value : nullptr)
|
| + hitTestTarget = pointercaptureTarget;
|
| }
|
| +
|
| + setNodeUnderPointer(pointerEvent, hitTestTarget);
|
| if (sendMouseEvent) {
|
| - // lastNodeUnderMouse is needed here because it is still stored in EventHandler.
|
| - m_mouseEventManager->sendBoundaryEvents(lastNodeUnderMouse, hitTestTarget,
|
| - mouseEvent);
|
| + m_mouseEventManager->setNodeUnderMouse(
|
| + hitTestTarget ? hitTestTarget->toNode() : nullptr, mouseEvent);
|
| }
|
| return hitTestTarget;
|
| }
|
| @@ -690,13 +679,4 @@ EventTarget* PointerEventManager::getMouseCapturingNode() {
|
| return getCapturingNode(PointerEventFactory::s_mouseId);
|
| }
|
|
|
| -DEFINE_TRACE(PointerEventManager) {
|
| - visitor->trace(m_frame);
|
| - visitor->trace(m_nodeUnderPointer);
|
| - visitor->trace(m_pointerCaptureTarget);
|
| - visitor->trace(m_pendingPointerCaptureTarget);
|
| - visitor->trace(m_touchEventManager);
|
| - visitor->trace(m_mouseEventManager);
|
| -}
|
| -
|
| } // namespace blink
|
|
|