Chromium Code Reviews| 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 5fda74694a4665f5ad226643ee8da6c05fb57af7..429ff1fe33245be210353d475b4108d5f02639c1 100644 |
| --- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
| +++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
| @@ -66,6 +66,7 @@ void PointerEventManager::clear() { |
| m_nodeUnderPointer.clear(); |
| m_pointerCaptureTarget.clear(); |
| m_pendingPointerCaptureTarget.clear(); |
| + m_dispatchingPointerId = 0; |
| } |
| DEFINE_TRACE(PointerEventManager) { |
| @@ -143,6 +144,7 @@ WebInputEventResult PointerEventManager::dispatchPointerEvent( |
| // Set whether node under pointer has received pointerover or not. |
| const int pointerId = pointerEvent->pointerId(); |
| + |
| const AtomicString& eventType = pointerEvent->type(); |
| if ((eventType == EventTypeNames::pointerout || |
| eventType == EventTypeNames::pointerover) && |
| @@ -159,12 +161,15 @@ WebInputEventResult PointerEventManager::dispatchPointerEvent( |
| if (!RuntimeEnabledFeatures::pointerEventEnabled()) |
| return WebInputEventResult::NotHandled; |
| if (!checkForListener || target->hasEventListeners(eventType)) { |
| - UseCounter::count(m_frame->document(), UseCounter::PointerEventDispatch); |
| + UseCounter::count(m_frame, UseCounter::PointerEventDispatch); |
| if (eventType == EventTypeNames::pointerdown) |
| - UseCounter::count(m_frame->document(), |
| - UseCounter::PointerEventDispatchPointerDown); |
| + UseCounter::count(m_frame, UseCounter::PointerEventDispatchPointerDown); |
| + DCHECK(!m_dispatchingPointerId); |
| + m_dispatchingPointerId = pointerId; |
|
dtapuska
2017/01/16 21:07:41
You able to use an AutoReset here?
Rick Byers
2017/01/20 22:37:22
Done.
|
| DispatchEventResult dispatchResult = target->dispatchEvent(pointerEvent); |
| + m_dispatchingPointerId = 0; |
| + |
| return EventHandlingUtil::toWebInputEventResult(dispatchResult); |
| } |
| return WebInputEventResult::NotHandled; |
| @@ -623,9 +628,14 @@ void PointerEventManager::elementRemoved(EventTarget* target) { |
| void PointerEventManager::setPointerCapture(int pointerId, |
| EventTarget* target) { |
| - UseCounter::count(m_frame->document(), UseCounter::PointerEventSetCapture); |
| - if (m_pointerEventFactory.isActiveButtonsState(pointerId)) |
| + UseCounter::count(m_frame, UseCounter::PointerEventSetCapture); |
| + if (m_pointerEventFactory.isActiveButtonsState(pointerId)) { |
| + if (pointerId != m_dispatchingPointerId) { |
| + UseCounter::count(m_frame, |
| + UseCounter::PointerEventSetCaptureOutsideDispatch); |
|
Navid Zolghadr
2017/01/16 21:15:01
There is one more place (as of a "temporary" hack)
Rick Byers
2017/01/20 22:37:22
Whoa, that looks potentially bad - commented on th
|
| + } |
| m_pendingPointerCaptureTarget.set(pointerId, target); |
| + } |
| } |
| void PointerEventManager::releasePointerCapture(int pointerId, |