| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. |
| 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
| 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) | 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 m_lastKnownMouseGlobalPosition = IntPoint(); | 288 m_lastKnownMouseGlobalPosition = IntPoint(); |
| 289 m_lastMouseDownUserGestureToken.clear(); | 289 m_lastMouseDownUserGestureToken.clear(); |
| 290 m_mousePressNode = nullptr; | 290 m_mousePressNode = nullptr; |
| 291 m_mousePressed = false; | 291 m_mousePressed = false; |
| 292 m_capturesDragging = false; | 292 m_capturesDragging = false; |
| 293 m_capturingMouseEventsNode = nullptr; | 293 m_capturingMouseEventsNode = nullptr; |
| 294 m_latchedWheelEventNode = nullptr; | 294 m_latchedWheelEventNode = nullptr; |
| 295 m_previousWheelScrolledNode = nullptr; | 295 m_previousWheelScrolledNode = nullptr; |
| 296 m_targetForTouchID.clear(); | 296 m_targetForTouchID.clear(); |
| 297 m_touchSequenceDocument.clear(); | 297 m_touchSequenceDocument.clear(); |
| 298 m_touchSequenceUserGestureToken.clear(); |
| 298 m_scrollGestureHandlingNode = nullptr; | 299 m_scrollGestureHandlingNode = nullptr; |
| 299 m_lastHitTestResultOverWidget = false; | 300 m_lastHitTestResultOverWidget = false; |
| 300 m_previousGestureScrolledNode = nullptr; | 301 m_previousGestureScrolledNode = nullptr; |
| 301 m_scrollbarHandlingScrollGesture = nullptr; | 302 m_scrollbarHandlingScrollGesture = nullptr; |
| 302 m_maxMouseMovedDuration = 0; | 303 m_maxMouseMovedDuration = 0; |
| 303 m_baseEventType = PlatformEvent::NoType; | 304 m_baseEventType = PlatformEvent::NoType; |
| 304 m_didStartDrag = false; | 305 m_didStartDrag = false; |
| 305 m_touchPressed = false; | 306 m_touchPressed = false; |
| 306 m_mouseDownMayStartSelect = false; | 307 m_mouseDownMayStartSelect = false; |
| 307 m_mouseDownMayStartDrag = false; | 308 m_mouseDownMayStartDrag = false; |
| (...skipping 3088 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3396 frame->contentRenderer()->hitTest(HitTestRequest(hitType), result); | 3397 frame->contentRenderer()->hitTest(HitTestRequest(hitType), result); |
| 3397 return result; | 3398 return result; |
| 3398 } | 3399 } |
| 3399 | 3400 |
| 3400 bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event) | 3401 bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event) |
| 3401 { | 3402 { |
| 3402 TRACE_EVENT0("webkit", "EventHandler::handleTouchEvent"); | 3403 TRACE_EVENT0("webkit", "EventHandler::handleTouchEvent"); |
| 3403 | 3404 |
| 3404 const Vector<PlatformTouchPoint>& points = event.touchPoints(); | 3405 const Vector<PlatformTouchPoint>& points = event.touchPoints(); |
| 3405 | 3406 |
| 3406 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); | |
| 3407 | |
| 3408 unsigned i; | 3407 unsigned i; |
| 3409 bool freshTouchEvents = true; | 3408 bool freshTouchEvents = true; |
| 3410 bool allTouchReleased = true; | 3409 bool allTouchReleased = true; |
| 3411 for (i = 0; i < points.size(); ++i) { | 3410 for (i = 0; i < points.size(); ++i) { |
| 3412 const PlatformTouchPoint& point = points[i]; | 3411 const PlatformTouchPoint& point = points[i]; |
| 3413 if (point.state() != PlatformTouchPoint::TouchPressed) | 3412 if (point.state() != PlatformTouchPoint::TouchPressed) |
| 3414 freshTouchEvents = false; | 3413 freshTouchEvents = false; |
| 3415 if (point.state() != PlatformTouchPoint::TouchReleased && point.state()
!= PlatformTouchPoint::TouchCancelled) | 3414 if (point.state() != PlatformTouchPoint::TouchReleased && point.state()
!= PlatformTouchPoint::TouchCancelled) |
| 3416 allTouchReleased = false; | 3415 allTouchReleased = false; |
| 3417 } | 3416 } |
| 3418 if (freshTouchEvents) { | 3417 if (freshTouchEvents) { |
| 3419 // Ideally we'd ASSERT !m_touchSequenceDocument here since we should | 3418 // Ideally we'd ASSERT !m_touchSequenceDocument here since we should |
| 3420 // have cleared the active document when we saw the last release. But we | 3419 // have cleared the active document when we saw the last release. But we |
| 3421 // have some tests that violate this, ClusterFuzz could trigger it, and | 3420 // have some tests that violate this, ClusterFuzz could trigger it, and |
| 3422 // there may be cases where the browser doesn't reliably release all | 3421 // there may be cases where the browser doesn't reliably release all |
| 3423 // touches. http://crbug.com/345372 tracks this. | 3422 // touches. http://crbug.com/345372 tracks this. |
| 3424 m_touchSequenceDocument.clear(); | 3423 m_touchSequenceDocument.clear(); |
| 3424 m_touchSequenceUserGestureToken.clear(); |
| 3425 } | 3425 } |
| 3426 | 3426 |
| 3427 OwnPtr<UserGestureIndicator> gestureIndicator; |
| 3428 |
| 3429 if (m_touchSequenceUserGestureToken) |
| 3430 gestureIndicator = adoptPtr(new UserGestureIndicator(m_touchSequenceUser
GestureToken.release())); |
| 3431 else |
| 3432 gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessin
gUserGesture)); |
| 3433 |
| 3434 m_touchSequenceUserGestureToken = gestureIndicator->currentToken(); |
| 3435 |
| 3427 ASSERT(m_frame->view()); | 3436 ASSERT(m_frame->view()); |
| 3428 if (m_touchSequenceDocument && (!m_touchSequenceDocument->frame() || !m_touc
hSequenceDocument->frame()->view())) { | 3437 if (m_touchSequenceDocument && (!m_touchSequenceDocument->frame() || !m_touc
hSequenceDocument->frame()->view())) { |
| 3429 // If the active touch document has no frame or view, it's probably bein
g destroyed | 3438 // If the active touch document has no frame or view, it's probably bein
g destroyed |
| 3430 // so we can't dispatch events. | 3439 // so we can't dispatch events. |
| 3431 return false; | 3440 return false; |
| 3432 } | 3441 } |
| 3433 | 3442 |
| 3434 // First do hit tests for any new touch points. | 3443 // First do hit tests for any new touch points. |
| 3435 for (i = 0; i < points.size(); ++i) { | 3444 for (i = 0; i < points.size(); ++i) { |
| 3436 const PlatformTouchPoint& point = points[i]; | 3445 const PlatformTouchPoint& point = points[i]; |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3479 m_frame->page()->chrome().client().setTouchAction(effectiveTouch
Action); | 3488 m_frame->page()->chrome().client().setTouchAction(effectiveTouch
Action); |
| 3480 } | 3489 } |
| 3481 } | 3490 } |
| 3482 | 3491 |
| 3483 m_touchPressed = !allTouchReleased; | 3492 m_touchPressed = !allTouchReleased; |
| 3484 | 3493 |
| 3485 // If there's no document receiving touch events, or no handlers on the | 3494 // If there's no document receiving touch events, or no handlers on the |
| 3486 // document set to receive the events, then we can skip all the rest of | 3495 // document set to receive the events, then we can skip all the rest of |
| 3487 // this work. | 3496 // this work. |
| 3488 if (!m_touchSequenceDocument || !m_touchSequenceDocument->hasTouchEventHandl
ers() || !m_touchSequenceDocument->frame()) { | 3497 if (!m_touchSequenceDocument || !m_touchSequenceDocument->hasTouchEventHandl
ers() || !m_touchSequenceDocument->frame()) { |
| 3489 if (allTouchReleased) | 3498 if (allTouchReleased) { |
| 3490 m_touchSequenceDocument.clear(); | 3499 m_touchSequenceDocument.clear(); |
| 3500 m_touchSequenceUserGestureToken.clear(); |
| 3501 } |
| 3491 return false; | 3502 return false; |
| 3492 } | 3503 } |
| 3493 | 3504 |
| 3494 // Build up the lists to use for the 'touches', 'targetTouches' and | 3505 // Build up the lists to use for the 'touches', 'targetTouches' and |
| 3495 // 'changedTouches' attributes in the JS event. See | 3506 // 'changedTouches' attributes in the JS event. See |
| 3496 // http://www.w3.org/TR/touch-events/#touchevent-interface for how these | 3507 // http://www.w3.org/TR/touch-events/#touchevent-interface for how these |
| 3497 // lists fit together. | 3508 // lists fit together. |
| 3498 | 3509 |
| 3499 // Holds the complete set of touches on the screen. | 3510 // Holds the complete set of touches on the screen. |
| 3500 RefPtrWillBeRawPtr<TouchList> touches = TouchList::create(); | 3511 RefPtrWillBeRawPtr<TouchList> touches = TouchList::create(); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3594 // explicitly here. See https://bugs.webkit.org/show_bug.cgi?id=37609 | 3605 // explicitly here. See https://bugs.webkit.org/show_bug.cgi?id=37609 |
| 3595 // for further discussion about the TouchStationary state. | 3606 // for further discussion about the TouchStationary state. |
| 3596 if (pointState != PlatformTouchPoint::TouchStationary && knownTarget) { | 3607 if (pointState != PlatformTouchPoint::TouchStationary && knownTarget) { |
| 3597 ASSERT(pointState < PlatformTouchPoint::TouchStateEnd); | 3608 ASSERT(pointState < PlatformTouchPoint::TouchStateEnd); |
| 3598 if (!changedTouches[pointState].m_touches) | 3609 if (!changedTouches[pointState].m_touches) |
| 3599 changedTouches[pointState].m_touches = TouchList::create(); | 3610 changedTouches[pointState].m_touches = TouchList::create(); |
| 3600 changedTouches[pointState].m_touches->append(touch); | 3611 changedTouches[pointState].m_touches->append(touch); |
| 3601 changedTouches[pointState].m_targets.add(touchTarget); | 3612 changedTouches[pointState].m_targets.add(touchTarget); |
| 3602 } | 3613 } |
| 3603 } | 3614 } |
| 3604 if (allTouchReleased) | 3615 if (allTouchReleased) { |
| 3605 m_touchSequenceDocument.clear(); | 3616 m_touchSequenceDocument.clear(); |
| 3617 m_touchSequenceUserGestureToken.clear(); |
| 3618 } |
| 3606 | 3619 |
| 3607 // Now iterate the changedTouches list and m_targets within it, sending | 3620 // Now iterate the changedTouches list and m_targets within it, sending |
| 3608 // events to the targets as required. | 3621 // events to the targets as required. |
| 3609 bool swallowedEvent = false; | 3622 bool swallowedEvent = false; |
| 3610 for (unsigned state = 0; state != PlatformTouchPoint::TouchStateEnd; ++state
) { | 3623 for (unsigned state = 0; state != PlatformTouchPoint::TouchStateEnd; ++state
) { |
| 3611 if (!changedTouches[state].m_touches) | 3624 if (!changedTouches[state].m_touches) |
| 3612 continue; | 3625 continue; |
| 3613 | 3626 |
| 3614 const AtomicString& stateName(eventNameForTouchPointState(static_cast<Pl
atformTouchPoint::State>(state))); | 3627 const AtomicString& stateName(eventNameForTouchPointState(static_cast<Pl
atformTouchPoint::State>(state))); |
| 3615 const EventTargetSet& targetsForState = changedTouches[state].m_targets; | 3628 const EventTargetSet& targetsForState = changedTouches[state].m_targets; |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3751 unsigned EventHandler::accessKeyModifiers() | 3764 unsigned EventHandler::accessKeyModifiers() |
| 3752 { | 3765 { |
| 3753 #if OS(MACOSX) | 3766 #if OS(MACOSX) |
| 3754 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; | 3767 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; |
| 3755 #else | 3768 #else |
| 3756 return PlatformEvent::AltKey; | 3769 return PlatformEvent::AltKey; |
| 3757 #endif | 3770 #endif |
| 3758 } | 3771 } |
| 3759 | 3772 |
| 3760 } // namespace WebCore | 3773 } // namespace WebCore |
| OLD | NEW |