| Index: Source/core/page/EventHandler.cpp
|
| diff --git a/Source/core/page/EventHandler.cpp b/Source/core/page/EventHandler.cpp
|
| index 13bcda8493b2689ac1749950615a0d68e92165b0..4d848f6cc9aa58c1c4ba52701187a1b48abab2ee 100644
|
| --- a/Source/core/page/EventHandler.cpp
|
| +++ b/Source/core/page/EventHandler.cpp
|
| @@ -295,6 +295,7 @@ void EventHandler::clear()
|
| m_previousWheelScrolledNode = nullptr;
|
| m_targetForTouchID.clear();
|
| m_touchSequenceDocument.clear();
|
| + m_touchSequenceUserGestureToken.clear();
|
| m_scrollGestureHandlingNode = nullptr;
|
| m_lastHitTestResultOverWidget = false;
|
| m_previousGestureScrolledNode = nullptr;
|
| @@ -3403,8 +3404,6 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
|
|
|
| const Vector<PlatformTouchPoint>& points = event.touchPoints();
|
|
|
| - UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture);
|
| -
|
| unsigned i;
|
| bool freshTouchEvents = true;
|
| bool allTouchReleased = true;
|
| @@ -3422,8 +3421,18 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
|
| // there may be cases where the browser doesn't reliably release all
|
| // touches. http://crbug.com/345372 tracks this.
|
| m_touchSequenceDocument.clear();
|
| + m_touchSequenceUserGestureToken.clear();
|
| }
|
|
|
| + OwnPtr<UserGestureIndicator> gestureIndicator;
|
| +
|
| + if (m_touchSequenceUserGestureToken)
|
| + gestureIndicator = adoptPtr(new UserGestureIndicator(m_touchSequenceUserGestureToken.release()));
|
| + else
|
| + gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessingUserGesture));
|
| +
|
| + m_touchSequenceUserGestureToken = gestureIndicator->currentToken();
|
| +
|
| ASSERT(m_frame->view());
|
| if (m_touchSequenceDocument && (!m_touchSequenceDocument->frame() || !m_touchSequenceDocument->frame()->view())) {
|
| // If the active touch document has no frame or view, it's probably being destroyed
|
| @@ -3486,8 +3495,10 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
|
| // document set to receive the events, then we can skip all the rest of
|
| // this work.
|
| if (!m_touchSequenceDocument || !m_touchSequenceDocument->hasTouchEventHandlers() || !m_touchSequenceDocument->frame()) {
|
| - if (allTouchReleased)
|
| + if (allTouchReleased) {
|
| m_touchSequenceDocument.clear();
|
| + m_touchSequenceUserGestureToken.clear();
|
| + }
|
| return false;
|
| }
|
|
|
| @@ -3601,8 +3612,10 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
|
| changedTouches[pointState].m_targets.add(touchTarget);
|
| }
|
| }
|
| - if (allTouchReleased)
|
| + if (allTouchReleased) {
|
| m_touchSequenceDocument.clear();
|
| + m_touchSequenceUserGestureToken.clear();
|
| + }
|
|
|
| // Now iterate the changedTouches list and m_targets within it, sending
|
| // events to the targets as required.
|
|
|