| 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 #include "core/events/DragEvent.h" | 43 #include "core/events/DragEvent.h" |
| 44 #include "core/events/EventPath.h" | 44 #include "core/events/EventPath.h" |
| 45 #include "core/events/GestureEvent.h" | 45 #include "core/events/GestureEvent.h" |
| 46 #include "core/events/KeyboardEvent.h" | 46 #include "core/events/KeyboardEvent.h" |
| 47 #include "core/events/MouseEvent.h" | 47 #include "core/events/MouseEvent.h" |
| 48 #include "core/events/PointerEvent.h" | 48 #include "core/events/PointerEvent.h" |
| 49 #include "core/events/TextEvent.h" | 49 #include "core/events/TextEvent.h" |
| 50 #include "core/events/TouchEvent.h" | 50 #include "core/events/TouchEvent.h" |
| 51 #include "core/events/WheelEvent.h" | 51 #include "core/events/WheelEvent.h" |
| 52 #include "core/fetch/ImageResource.h" | 52 #include "core/fetch/ImageResource.h" |
| 53 #include "core/frame/Deprecation.h" |
| 53 #include "core/frame/EventHandlerRegistry.h" | 54 #include "core/frame/EventHandlerRegistry.h" |
| 54 #include "core/frame/FrameHost.h" | 55 #include "core/frame/FrameHost.h" |
| 55 #include "core/frame/FrameView.h" | 56 #include "core/frame/FrameView.h" |
| 56 #include "core/frame/LocalFrame.h" | 57 #include "core/frame/LocalFrame.h" |
| 57 #include "core/frame/Settings.h" | 58 #include "core/frame/Settings.h" |
| 59 #include "core/frame/UseCounter.h" |
| 58 #include "core/frame/VisualViewport.h" | 60 #include "core/frame/VisualViewport.h" |
| 59 #include "core/html/HTMLCanvasElement.h" | 61 #include "core/html/HTMLCanvasElement.h" |
| 60 #include "core/html/HTMLDialogElement.h" | 62 #include "core/html/HTMLDialogElement.h" |
| 61 #include "core/html/HTMLFrameElementBase.h" | 63 #include "core/html/HTMLFrameElementBase.h" |
| 62 #include "core/html/HTMLFrameSetElement.h" | 64 #include "core/html/HTMLFrameSetElement.h" |
| 63 #include "core/html/HTMLInputElement.h" | 65 #include "core/html/HTMLInputElement.h" |
| 64 #include "core/input/InputDeviceCapabilities.h" | 66 #include "core/input/InputDeviceCapabilities.h" |
| 65 #include "core/input/TouchActionUtil.h" | 67 #include "core/input/TouchActionUtil.h" |
| 66 #include "core/layout/HitTestRequest.h" | 68 #include "core/layout/HitTestRequest.h" |
| 67 #include "core/layout/HitTestResult.h" | 69 #include "core/layout/HitTestResult.h" |
| (...skipping 919 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 987 | 989 |
| 988 // For 4th/5th button in the mouse since Chrome does not yet send | 990 // For 4th/5th button in the mouse since Chrome does not yet send |
| 989 // button value to Blink but in some cases it does send the event. | 991 // button value to Blink but in some cases it does send the event. |
| 990 // This check is needed to suppress such an event (crbug.com/574959) | 992 // This check is needed to suppress such an event (crbug.com/574959) |
| 991 if (mouseEvent.button() == NoButton) | 993 if (mouseEvent.button() == NoButton) |
| 992 return WebInputEventResult::HandledSuppressed; | 994 return WebInputEventResult::HandledSuppressed; |
| 993 | 995 |
| 994 RawPtr<FrameView> protector(m_frame->view()); | 996 RawPtr<FrameView> protector(m_frame->view()); |
| 995 | 997 |
| 996 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); | 998 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); |
| 997 m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken =
gestureIndicator.currentToken(); | 999 m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken =
UserGestureIndicator::currentToken(); |
| 998 | 1000 |
| 999 cancelFakeMouseMoveEvent(); | 1001 cancelFakeMouseMoveEvent(); |
| 1000 if (m_eventHandlerWillResetCapturingMouseEventsNode) | 1002 if (m_eventHandlerWillResetCapturingMouseEventsNode) |
| 1001 m_capturingMouseEventsNode = nullptr; | 1003 m_capturingMouseEventsNode = nullptr; |
| 1002 m_mousePressed = true; | 1004 m_mousePressed = true; |
| 1003 m_capturesDragging = true; | 1005 m_capturesDragging = true; |
| 1004 setLastKnownMousePosition(mouseEvent); | 1006 setLastKnownMousePosition(mouseEvent); |
| 1005 m_mouseDownTimestamp = mouseEvent.timestamp(); | 1007 m_mouseDownTimestamp = mouseEvent.timestamp(); |
| 1006 m_mouseDownMayStartDrag = false; | 1008 m_mouseDownMayStartDrag = false; |
| 1007 selectionController().setMouseDownMayStartSelect(false); | 1009 selectionController().setMouseDownMayStartSelect(false); |
| (...skipping 2758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3766 if (freshTouchEvents) { | 3768 if (freshTouchEvents) { |
| 3767 // Ideally we'd ASSERT !m_touchSequenceDocument here since we should | 3769 // Ideally we'd ASSERT !m_touchSequenceDocument here since we should |
| 3768 // have cleared the active document when we saw the last release. But we | 3770 // have cleared the active document when we saw the last release. But we |
| 3769 // have some tests that violate this, ClusterFuzz could trigger it, and | 3771 // have some tests that violate this, ClusterFuzz could trigger it, and |
| 3770 // there may be cases where the browser doesn't reliably release all | 3772 // there may be cases where the browser doesn't reliably release all |
| 3771 // touches. http://crbug.com/345372 tracks this. | 3773 // touches. http://crbug.com/345372 tracks this. |
| 3772 m_touchSequenceDocument.clear(); | 3774 m_touchSequenceDocument.clear(); |
| 3773 m_touchSequenceUserGestureToken.clear(); | 3775 m_touchSequenceUserGestureToken.clear(); |
| 3774 } | 3776 } |
| 3775 | 3777 |
| 3776 OwnPtr<UserGestureIndicator> gestureIndicator; | |
| 3777 | |
| 3778 if (m_touchSequenceUserGestureToken) | |
| 3779 gestureIndicator = adoptPtr(new UserGestureIndicator(m_touchSequenceUser
GestureToken.release())); | |
| 3780 else | |
| 3781 gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessin
gUserGesture)); | |
| 3782 | |
| 3783 m_touchSequenceUserGestureToken = gestureIndicator->currentToken(); | |
| 3784 | |
| 3785 ASSERT(m_frame->view()); | 3778 ASSERT(m_frame->view()); |
| 3786 if (m_touchSequenceDocument && (!m_touchSequenceDocument->frame() || !m_touc
hSequenceDocument->frame()->view())) { | 3779 if (m_touchSequenceDocument && (!m_touchSequenceDocument->frame() || !m_touc
hSequenceDocument->frame()->view())) { |
| 3787 // If the active touch document has no frame or view, it's probably bein
g destroyed | 3780 // If the active touch document has no frame or view, it's probably bein
g destroyed |
| 3788 // so we can't dispatch events. | 3781 // so we can't dispatch events. |
| 3789 return WebInputEventResult::NotHandled; | 3782 return WebInputEventResult::NotHandled; |
| 3790 } | 3783 } |
| 3791 | 3784 |
| 3792 // First do hit tests for any new touch points. | 3785 // First do hit tests for any new touch points. |
| 3793 for (unsigned i = 0; i < points.size(); ++i) { | 3786 for (unsigned i = 0; i < points.size(); ++i) { |
| 3794 const PlatformTouchPoint& point = points[i]; | 3787 const PlatformTouchPoint& point = points[i]; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3852 // document set to receive the events, then we can skip all the rest of | 3845 // document set to receive the events, then we can skip all the rest of |
| 3853 // this work. | 3846 // this work. |
| 3854 if (!m_touchSequenceDocument || !m_touchSequenceDocument->frameHost() || !ha
sTouchHandlers(m_touchSequenceDocument->frameHost()->eventHandlerRegistry()) ||
!m_touchSequenceDocument->frame()) { | 3847 if (!m_touchSequenceDocument || !m_touchSequenceDocument->frameHost() || !ha
sTouchHandlers(m_touchSequenceDocument->frameHost()->eventHandlerRegistry()) ||
!m_touchSequenceDocument->frame()) { |
| 3855 if (allTouchReleased) { | 3848 if (allTouchReleased) { |
| 3856 m_touchSequenceDocument.clear(); | 3849 m_touchSequenceDocument.clear(); |
| 3857 m_touchSequenceUserGestureToken.clear(); | 3850 m_touchSequenceUserGestureToken.clear(); |
| 3858 } | 3851 } |
| 3859 return WebInputEventResult::NotHandled; | 3852 return WebInputEventResult::NotHandled; |
| 3860 } | 3853 } |
| 3861 | 3854 |
| 3855 // Whether a touch should be considered a "user gesture" or not is a tricky
question. |
| 3856 // https://docs.google.com/document/d/1oF1T3O7_E4t1PYHV6gyCwHxOi3ystm0eSL5xZ
u7nvOg/edit# |
| 3857 // TODO(rbyers): Disable user gesture in some cases but retain logging for n
ow (crbug.com/582140). |
| 3858 OwnPtr<UserGestureIndicator> gestureIndicator; |
| 3859 if (event.touchPoints().size() == 1 |
| 3860 && event.touchPoints()[0].state() == PlatformTouchPoint::TouchReleased |
| 3861 && !event.causesScrollingIfUncanceled()) { |
| 3862 // This is a touchend corresponding to a tap, definitely a user gesture.
So don't supply |
| 3863 // a UserGestureUtilizedCallback. |
| 3864 gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessin
gUserGesture)); |
| 3865 } else { |
| 3866 // This is some other touch event that perhaps shouldn't be considered a
user gesture. So |
| 3867 // use a UserGestureUtilizedCallback to get metrics / deprecation warnin
gs. |
| 3868 if (m_touchSequenceUserGestureToken) |
| 3869 gestureIndicator = adoptPtr(new UserGestureIndicator(m_touchSequence
UserGestureToken.release(), &m_touchSequenceDocument->frame()->eventHandler())); |
| 3870 else |
| 3871 gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProce
ssingUserGesture, &m_touchSequenceDocument->frame()->eventHandler())); |
| 3872 m_touchSequenceUserGestureToken = UserGestureIndicator::currentToken(); |
| 3873 } |
| 3874 |
| 3862 // Compute and store the common info used by both PointerEvent and TouchEven
t. | 3875 // Compute and store the common info used by both PointerEvent and TouchEven
t. |
| 3863 HeapVector<TouchInfo> touchInfos(points.size()); | 3876 HeapVector<TouchInfo> touchInfos(points.size()); |
| 3864 | 3877 |
| 3865 for (unsigned i = 0; i < points.size(); ++i) { | 3878 for (unsigned i = 0; i < points.size(); ++i) { |
| 3866 const PlatformTouchPoint& point = points[i]; | 3879 const PlatformTouchPoint& point = points[i]; |
| 3867 PlatformTouchPoint::TouchState pointState = point.state(); | 3880 PlatformTouchPoint::TouchState pointState = point.state(); |
| 3868 RawPtr<EventTarget> touchTarget = nullptr; | 3881 RawPtr<EventTarget> touchTarget = nullptr; |
| 3869 String regionID; | 3882 String regionID; |
| 3870 | 3883 |
| 3871 if (pointState == PlatformTouchPoint::TouchReleased || pointState == Pla
tformTouchPoint::TouchCancelled) { | 3884 if (pointState == PlatformTouchPoint::TouchReleased || pointState == Pla
tformTouchPoint::TouchCancelled) { |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3949 m_inPointerCanceledState = true; | 3962 m_inPointerCanceledState = true; |
| 3950 sendPointerCancels(touchInfos); | 3963 sendPointerCancels(touchInfos); |
| 3951 } | 3964 } |
| 3952 } else if (allTouchReleased) { | 3965 } else if (allTouchReleased) { |
| 3953 m_inPointerCanceledState = false; | 3966 m_inPointerCanceledState = false; |
| 3954 } | 3967 } |
| 3955 | 3968 |
| 3956 return eventResult; | 3969 return eventResult; |
| 3957 } | 3970 } |
| 3958 | 3971 |
| 3972 void EventHandler::userGestureUtilized() |
| 3973 { |
| 3974 // This is invoked for UserGestureIndicators created in handleTouchEvent whi
ch perhaps represent |
| 3975 // touch actions which shouldn't be considered a user-gesture. |
| 3976 UseCounter::count(m_frame, UseCounter::TouchDragUserGestureUsed); |
| 3977 Deprecation::countDeprecationCrossOriginIframe(m_frame, UseCounter::TouchDra
gUserGestureUsedCrossOrigin); |
| 3978 } |
| 3979 |
| 3959 void EventHandler::setLastKnownMousePosition(const PlatformMouseEvent& event) | 3980 void EventHandler::setLastKnownMousePosition(const PlatformMouseEvent& event) |
| 3960 { | 3981 { |
| 3961 m_mousePositionIsUnknown = false; | 3982 m_mousePositionIsUnknown = false; |
| 3962 m_lastKnownMousePosition = event.position(); | 3983 m_lastKnownMousePosition = event.position(); |
| 3963 m_lastKnownMouseGlobalPosition = event.globalPosition(); | 3984 m_lastKnownMouseGlobalPosition = event.globalPosition(); |
| 3964 } | 3985 } |
| 3965 | 3986 |
| 3966 WebInputEventResult EventHandler::passMousePressEventToSubframe(MouseEventWithHi
tTestResults& mev, LocalFrame* subframe) | 3987 WebInputEventResult EventHandler::passMousePressEventToSubframe(MouseEventWithHi
tTestResults& mev, LocalFrame* subframe) |
| 3967 { | 3988 { |
| 3968 selectionController().passMousePressEventToSubframe(mev); | 3989 selectionController().passMousePressEventToSubframe(mev); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4006 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() | 4027 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() |
| 4007 { | 4028 { |
| 4008 #if OS(MACOSX) | 4029 #if OS(MACOSX) |
| 4009 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); | 4030 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); |
| 4010 #else | 4031 #else |
| 4011 return PlatformEvent::AltKey; | 4032 return PlatformEvent::AltKey; |
| 4012 #endif | 4033 #endif |
| 4013 } | 4034 } |
| 4014 | 4035 |
| 4015 } // namespace blink | 4036 } // namespace blink |
| OLD | NEW |