| 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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 // is most significant. The enumeration is ordered with smaller specified | 112 // is most significant. The enumeration is ordered with smaller specified |
| 113 // numbers first. Examples of merged results are: | 113 // numbers first. Examples of merged results are: |
| 114 // (HandledApplication, HandledSystem) -> HandledSystem | 114 // (HandledApplication, HandledSystem) -> HandledSystem |
| 115 // (NotHandled, HandledApplication) -> HandledApplication | 115 // (NotHandled, HandledApplication) -> HandledApplication |
| 116 static_assert(static_cast<int>(WebInputEventResult::NotHandled) == 0, "WebIn
putEventResult not ordered"); | 116 static_assert(static_cast<int>(WebInputEventResult::NotHandled) == 0, "WebIn
putEventResult not ordered"); |
| 117 static_assert(static_cast<int>(WebInputEventResult::HandledSuppressed) < sta
tic_cast<int>(WebInputEventResult::HandledApplication), "WebInputEventResult not
ordered"); | 117 static_assert(static_cast<int>(WebInputEventResult::HandledSuppressed) < sta
tic_cast<int>(WebInputEventResult::HandledApplication), "WebInputEventResult not
ordered"); |
| 118 static_assert(static_cast<int>(WebInputEventResult::HandledApplication) < st
atic_cast<int>(WebInputEventResult::HandledSystem), "WebInputEventResult not ord
ered"); | 118 static_assert(static_cast<int>(WebInputEventResult::HandledApplication) < st
atic_cast<int>(WebInputEventResult::HandledSystem), "WebInputEventResult not ord
ered"); |
| 119 return static_cast<WebInputEventResult>(max(static_cast<int>(responseA), sta
tic_cast<int>(responseB))); | 119 return static_cast<WebInputEventResult>(max(static_cast<int>(responseA), sta
tic_cast<int>(responseB))); |
| 120 } | 120 } |
| 121 | 121 |
| 122 WebInputEventResult eventToEventResult(PassRefPtrWillBeRawPtr<Event> event, bool
res) | |
| 123 { | |
| 124 if (event->defaultPrevented()) | |
| 125 return WebInputEventResult::HandledApplication; | |
| 126 if (event->defaultHandled()) | |
| 127 return WebInputEventResult::HandledSystem; | |
| 128 | |
| 129 // TODO(dtapuska): There are cases in the code where dispatchEvent | |
| 130 // returns false (indicated handled) but event is not marked | |
| 131 // as default handled or default prevented. crbug.com/560355 | |
| 132 if (!res) | |
| 133 return WebInputEventResult::HandledSuppressed; | |
| 134 return WebInputEventResult::NotHandled; | |
| 135 } | |
| 136 | |
| 137 bool isNodeInDocument(Node* n) | 122 bool isNodeInDocument(Node* n) |
| 138 { | 123 { |
| 139 return n && n->inDocument(); | 124 return n && n->inDocument(); |
| 140 } | 125 } |
| 141 | 126 |
| 142 const AtomicString& touchEventNameForTouchPointState(PlatformTouchPoint::State s
tate) | 127 const AtomicString& touchEventNameForTouchPointState(PlatformTouchPoint::State s
tate) |
| 143 { | 128 { |
| 144 switch (state) { | 129 switch (state) { |
| 145 case PlatformTouchPoint::TouchReleased: | 130 case PlatformTouchPoint::TouchReleased: |
| 146 return EventTypeNames::touchend; | 131 return EventTypeNames::touchend; |
| (...skipping 1227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1374 // Both m_clickNode and mev.innerNode() don't need to be updated | 1359 // Both m_clickNode and mev.innerNode() don't need to be updated |
| 1375 // because commonAncestor() will exit early if their documents are diffe
rent. | 1360 // because commonAncestor() will exit early if their documents are diffe
rent. |
| 1376 m_clickNode->updateDistribution(); | 1361 m_clickNode->updateDistribution(); |
| 1377 if (Node* clickTargetNode = mev.innerNode()->commonAncestor( | 1362 if (Node* clickTargetNode = mev.innerNode()->commonAncestor( |
| 1378 *m_clickNode, parentForClickEvent)) { | 1363 *m_clickNode, parentForClickEvent)) { |
| 1379 | 1364 |
| 1380 // Dispatch mouseup directly w/o calling updateMouseEventTargetNode | 1365 // Dispatch mouseup directly w/o calling updateMouseEventTargetNode |
| 1381 // because the mouseup dispatch above has already updated it | 1366 // because the mouseup dispatch above has already updated it |
| 1382 // correctly. Moreover, clickTargetNode is different from | 1367 // correctly. Moreover, clickTargetNode is different from |
| 1383 // mev.innerNode at drag-release. | 1368 // mev.innerNode at drag-release. |
| 1384 if (clickTargetNode->dispatchMouseEvent(mouseEvent, | 1369 clickEventResult = clickTargetNode->dispatchMouseEvent(mouseEvent, |
| 1385 EventTypeNames::click, m_clickCount)) { | 1370 EventTypeNames::click, m_clickCount); |
| 1386 clickEventResult = WebInputEventResult::HandledApplication; | |
| 1387 } | |
| 1388 } | 1371 } |
| 1389 } | 1372 } |
| 1390 | 1373 |
| 1391 if (m_resizeScrollableArea) { | 1374 if (m_resizeScrollableArea) { |
| 1392 m_resizeScrollableArea->setInResizeMode(false); | 1375 m_resizeScrollableArea->setInResizeMode(false); |
| 1393 m_resizeScrollableArea = nullptr; | 1376 m_resizeScrollableArea = nullptr; |
| 1394 } | 1377 } |
| 1395 | 1378 |
| 1396 if (eventResult == WebInputEventResult::NotHandled) | 1379 if (eventResult == WebInputEventResult::NotHandled) |
| 1397 eventResult = handleMouseReleaseEvent(mev); | 1380 eventResult = handleMouseReleaseEvent(mev); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1409 if (!view) | 1392 if (!view) |
| 1410 return WebInputEventResult::NotHandled; | 1393 return WebInputEventResult::NotHandled; |
| 1411 | 1394 |
| 1412 RefPtrWillBeRawPtr<DragEvent> me = DragEvent::create(eventType, | 1395 RefPtrWillBeRawPtr<DragEvent> me = DragEvent::create(eventType, |
| 1413 true, true, m_frame->document()->domWindow(), | 1396 true, true, m_frame->document()->domWindow(), |
| 1414 0, event.globalPosition().x(), event.globalPosition().y(), event.positio
n().x(), event.position().y(), | 1397 0, event.globalPosition().x(), event.globalPosition().y(), event.positio
n().x(), event.position().y(), |
| 1415 event.movementDelta().x(), event.movementDelta().y(), | 1398 event.movementDelta().x(), event.movementDelta().y(), |
| 1416 event.modifiers(), | 1399 event.modifiers(), |
| 1417 0, MouseEvent::platformModifiersToButtons(event.modifiers()), nullptr, e
vent.timestamp(), dataTransfer, event.syntheticEventType()); | 1400 0, MouseEvent::platformModifiersToButtons(event.modifiers()), nullptr, e
vent.timestamp(), dataTransfer, event.syntheticEventType()); |
| 1418 | 1401 |
| 1419 bool dispatchResult = dragTarget->dispatchEvent(me.get()); | 1402 return dragTarget->dispatchEvent(me.get()); |
| 1420 return eventToEventResult(me, dispatchResult); | |
| 1421 } | 1403 } |
| 1422 | 1404 |
| 1423 static bool targetIsFrame(Node* target, LocalFrame*& frame) | 1405 static bool targetIsFrame(Node* target, LocalFrame*& frame) |
| 1424 { | 1406 { |
| 1425 if (!isHTMLFrameElementBase(target)) | 1407 if (!isHTMLFrameElementBase(target)) |
| 1426 return false; | 1408 return false; |
| 1427 | 1409 |
| 1428 // Cross-process drag and drop is not yet supported. | 1410 // Cross-process drag and drop is not yet supported. |
| 1429 if (toHTMLFrameElementBase(target)->contentFrame() && !toHTMLFrameElementBas
e(target)->contentFrame()->isLocalFrame()) | 1411 if (toHTMLFrameElementBase(target)->contentFrame() && !toHTMLFrameElementBas
e(target)->contentFrame()->isLocalFrame()) |
| 1430 return false; | 1412 return false; |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1649 | 1631 |
| 1650 WebInputEventResult EventHandler::dispatchPointerEvent(Node* target, const Atomi
cString& eventType, | 1632 WebInputEventResult EventHandler::dispatchPointerEvent(Node* target, const Atomi
cString& eventType, |
| 1651 const PlatformMouseEvent& mouseEvent, Node* relatedTarget) | 1633 const PlatformMouseEvent& mouseEvent, Node* relatedTarget) |
| 1652 { | 1634 { |
| 1653 if (!RuntimeEnabledFeatures::pointerEventEnabled()) | 1635 if (!RuntimeEnabledFeatures::pointerEventEnabled()) |
| 1654 return WebInputEventResult::NotHandled; | 1636 return WebInputEventResult::NotHandled; |
| 1655 | 1637 |
| 1656 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.create
(eventType, | 1638 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.create
(eventType, |
| 1657 mouseEvent, relatedTarget, m_frame->document()->domWindow()); | 1639 mouseEvent, relatedTarget, m_frame->document()->domWindow()); |
| 1658 | 1640 |
| 1659 bool dispatchResult = target->dispatchEvent(pointerEvent.get()); | 1641 return target->dispatchEvent(pointerEvent.get()); |
| 1660 return eventToEventResult(pointerEvent, dispatchResult); | |
| 1661 } | 1642 } |
| 1662 | 1643 |
| 1663 void EventHandler::sendMouseEventsForNodeTransition(Node* exitedNode, Node* ente
redNode, | 1644 void EventHandler::sendMouseEventsForNodeTransition(Node* exitedNode, Node* ente
redNode, |
| 1664 const PlatformMouseEvent& mouseEvent) | 1645 const PlatformMouseEvent& mouseEvent) |
| 1665 { | 1646 { |
| 1666 ASSERT(exitedNode != enteredNode); | 1647 ASSERT(exitedNode != enteredNode); |
| 1667 | 1648 |
| 1668 // Dispatch pointerout/mouseout events | 1649 // Dispatch pointerout/mouseout events |
| 1669 if (isNodeInDocument(exitedNode)) { | 1650 if (isNodeInDocument(exitedNode)) { |
| 1670 dispatchPointerEvent(exitedNode, EventTypeNames::pointerout, mouseEvent,
enteredNode); | 1651 dispatchPointerEvent(exitedNode, EventTypeNames::pointerout, mouseEvent,
enteredNode); |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1763 } | 1744 } |
| 1764 } | 1745 } |
| 1765 | 1746 |
| 1766 WebInputEventResult EventHandler::dispatchMouseEvent(const AtomicString& eventTy
pe, Node* targetNode, int clickCount, const PlatformMouseEvent& mouseEvent) | 1747 WebInputEventResult EventHandler::dispatchMouseEvent(const AtomicString& eventTy
pe, Node* targetNode, int clickCount, const PlatformMouseEvent& mouseEvent) |
| 1767 { | 1748 { |
| 1768 updateMouseEventTargetNode(targetNode, mouseEvent); | 1749 updateMouseEventTargetNode(targetNode, mouseEvent); |
| 1769 if (!m_nodeUnderMouse) | 1750 if (!m_nodeUnderMouse) |
| 1770 return WebInputEventResult::NotHandled; | 1751 return WebInputEventResult::NotHandled; |
| 1771 | 1752 |
| 1772 RefPtrWillBeRawPtr<MouseEvent> event = MouseEvent::create(eventType, m_nodeU
nderMouse->document().domWindow(), mouseEvent, clickCount, nullptr); | 1753 RefPtrWillBeRawPtr<MouseEvent> event = MouseEvent::create(eventType, m_nodeU
nderMouse->document().domWindow(), mouseEvent, clickCount, nullptr); |
| 1773 bool dispatchResult = m_nodeUnderMouse->dispatchEvent(event); | 1754 return m_nodeUnderMouse->dispatchEvent(event); |
| 1774 return eventToEventResult(event, dispatchResult); | |
| 1775 } | 1755 } |
| 1776 | 1756 |
| 1777 // TODO(mustaq): Make PE drive ME dispatch & bookkeeping in EventHandler. | 1757 // TODO(mustaq): Make PE drive ME dispatch & bookkeeping in EventHandler. |
| 1778 WebInputEventResult EventHandler::updatePointerTargetAndDispatchEvents(const Ato
micString& mouseEventType, Node* targetNode, int clickCount, const PlatformMouse
Event& mouseEvent) | 1758 WebInputEventResult EventHandler::updatePointerTargetAndDispatchEvents(const Ato
micString& mouseEventType, Node* targetNode, int clickCount, const PlatformMouse
Event& mouseEvent) |
| 1779 { | 1759 { |
| 1780 ASSERT(mouseEventType == EventTypeNames::mousedown | 1760 ASSERT(mouseEventType == EventTypeNames::mousedown |
| 1781 || mouseEventType == EventTypeNames::mousemove | 1761 || mouseEventType == EventTypeNames::mousemove |
| 1782 || mouseEventType == EventTypeNames::mouseup); | 1762 || mouseEventType == EventTypeNames::mouseup); |
| 1783 | 1763 |
| 1784 updateMouseEventTargetNode(targetNode, mouseEvent); | 1764 updateMouseEventTargetNode(targetNode, mouseEvent); |
| 1785 if (!m_nodeUnderMouse) | 1765 if (!m_nodeUnderMouse) |
| 1786 return WebInputEventResult::NotHandled; | 1766 return WebInputEventResult::NotHandled; |
| 1787 | 1767 |
| 1788 WebInputEventResult result = dispatchPointerEvent(m_nodeUnderMouse.get(), | 1768 WebInputEventResult result = dispatchPointerEvent(m_nodeUnderMouse.get(), |
| 1789 pointerEventNameForMouseEventName(mouseEventType), | 1769 pointerEventNameForMouseEventName(mouseEventType), |
| 1790 mouseEvent); | 1770 mouseEvent); |
| 1791 | 1771 |
| 1792 if (result != WebInputEventResult::NotHandled && mouseEventType == EventType
Names::mousedown) { | 1772 if (result != WebInputEventResult::NotHandled && mouseEventType == EventType
Names::mousedown) { |
| 1793 m_preventMouseEventForPointerTypeMouse = true; | 1773 m_preventMouseEventForPointerTypeMouse = true; |
| 1794 } | 1774 } |
| 1795 | 1775 |
| 1796 if (!m_preventMouseEventForPointerTypeMouse) { | 1776 if (!m_preventMouseEventForPointerTypeMouse) { |
| 1797 RefPtrWillBeRawPtr<MouseEvent> event = MouseEvent::create(mouseEventType
, m_nodeUnderMouse->document().domWindow(), mouseEvent, clickCount, nullptr); | 1777 RefPtrWillBeRawPtr<MouseEvent> event = MouseEvent::create(mouseEventType
, m_nodeUnderMouse->document().domWindow(), mouseEvent, clickCount, nullptr); |
| 1798 bool dispatchResult = m_nodeUnderMouse->dispatchEvent(event); | 1778 result = mergeEventResult(result, m_nodeUnderMouse->dispatchEvent(event)
); |
| 1799 result = mergeEventResult(result, eventToEventResult(event, dispatchResu
lt)); | |
| 1800 } | 1779 } |
| 1801 | 1780 |
| 1802 return result; | 1781 return result; |
| 1803 } | 1782 } |
| 1804 | 1783 |
| 1805 WebInputEventResult EventHandler::handleMouseFocus(const MouseEventWithHitTestRe
sults& targetedEvent, InputDeviceCapabilities* sourceCapabilities) | 1784 WebInputEventResult EventHandler::handleMouseFocus(const MouseEventWithHitTestRe
sults& targetedEvent, InputDeviceCapabilities* sourceCapabilities) |
| 1806 { | 1785 { |
| 1807 // If clicking on a frame scrollbar, do not mess up with content focus. | 1786 // If clicking on a frame scrollbar, do not mess up with content focus. |
| 1808 if (targetedEvent.hitTestResult().scrollbar() && m_frame->contentLayoutObjec
t()) { | 1787 if (targetedEvent.hitTestResult().scrollbar() && m_frame->contentLayoutObjec
t()) { |
| 1809 if (targetedEvent.hitTestResult().scrollbar()->scrollableArea() == m_fra
me->contentLayoutObject()->scrollableArea()) | 1788 if (targetedEvent.hitTestResult().scrollbar()->scrollableArea() == m_fra
me->contentLayoutObject()->scrollableArea()) |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1960 if (Widget* widget = toLayoutPart(target)->widget()) { | 1939 if (Widget* widget = toLayoutPart(target)->widget()) { |
| 1961 WebInputEventResult result = passWheelEventToWidget(event, *widg
et); | 1940 WebInputEventResult result = passWheelEventToWidget(event, *widg
et); |
| 1962 if (result != WebInputEventResult::NotHandled) { | 1941 if (result != WebInputEventResult::NotHandled) { |
| 1963 setFrameWasScrolledByUser(); | 1942 setFrameWasScrolledByUser(); |
| 1964 return result; | 1943 return result; |
| 1965 } | 1944 } |
| 1966 } | 1945 } |
| 1967 } | 1946 } |
| 1968 | 1947 |
| 1969 RefPtrWillBeRawPtr<Event> domEvent = WheelEvent::create(event, node->doc
ument().domWindow()); | 1948 RefPtrWillBeRawPtr<Event> domEvent = WheelEvent::create(event, node->doc
ument().domWindow()); |
| 1970 if (!node->dispatchEvent(domEvent)) { | 1949 WebInputEventResult domEventResult = node->dispatchEvent(domEvent); |
| 1950 if (domEventResult != WebInputEventResult::NotHandled) { |
| 1971 setFrameWasScrolledByUser(); | 1951 setFrameWasScrolledByUser(); |
| 1972 return eventToEventResult(domEvent, false); | 1952 return domEventResult; |
| 1973 } | 1953 } |
| 1974 } | 1954 } |
| 1975 | 1955 |
| 1976 // We do another check on the frame view because the event handler can run | 1956 // We do another check on the frame view because the event handler can run |
| 1977 // JS which results in the frame getting destroyed. | 1957 // JS which results in the frame getting destroyed. |
| 1978 view = m_frame->view(); | 1958 view = m_frame->view(); |
| 1979 if (!view) | 1959 if (!view) |
| 1980 return WebInputEventResult::NotHandled; | 1960 return WebInputEventResult::NotHandled; |
| 1981 | 1961 |
| 1982 // Wheel events which do not scroll are used to trigger zooming. | 1962 // Wheel events which do not scroll are used to trigger zooming. |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2093 if (scrollbar) { | 2073 if (scrollbar) { |
| 2094 bool eventSwallowed = scrollbar->gestureEvent(gestureEvent); | 2074 bool eventSwallowed = scrollbar->gestureEvent(gestureEvent); |
| 2095 if (gestureEvent.type() == PlatformEvent::GestureTapDown && eventSwallow
ed) | 2075 if (gestureEvent.type() == PlatformEvent::GestureTapDown && eventSwallow
ed) |
| 2096 m_scrollbarHandlingScrollGesture = scrollbar; | 2076 m_scrollbarHandlingScrollGesture = scrollbar; |
| 2097 if (eventSwallowed) | 2077 if (eventSwallowed) |
| 2098 return WebInputEventResult::HandledSuppressed; | 2078 return WebInputEventResult::HandledSuppressed; |
| 2099 } | 2079 } |
| 2100 | 2080 |
| 2101 if (eventTarget) { | 2081 if (eventTarget) { |
| 2102 RefPtrWillBeRawPtr<GestureEvent> gestureDomEvent = GestureEvent::create(
eventTarget->document().domWindow(), gestureEvent); | 2082 RefPtrWillBeRawPtr<GestureEvent> gestureDomEvent = GestureEvent::create(
eventTarget->document().domWindow(), gestureEvent); |
| 2103 // TODO(dtapuska): dispatchEvent is inverted for Gesture Events | 2083 if (gestureDomEvent.get()) { |
| 2104 // crbug.com/560357 | 2084 WebInputEventResult gestureDomEventResult = eventTarget->dispatchEve
nt(gestureDomEvent); |
| 2105 if (gestureDomEvent.get() && eventTarget->dispatchEvent(gestureDomEvent)
) | 2085 if (gestureDomEventResult != WebInputEventResult::NotHandled) |
| 2106 return eventToEventResult(gestureDomEvent, false); | 2086 return gestureDomEventResult; |
| 2087 } |
| 2107 } | 2088 } |
| 2108 | 2089 |
| 2109 switch (gestureEvent.type()) { | 2090 switch (gestureEvent.type()) { |
| 2110 case PlatformEvent::GestureTap: | 2091 case PlatformEvent::GestureTap: |
| 2111 return handleGestureTap(targetedEvent); | 2092 return handleGestureTap(targetedEvent); |
| 2112 case PlatformEvent::GestureShowPress: | 2093 case PlatformEvent::GestureShowPress: |
| 2113 return handleGestureShowPress(); | 2094 return handleGestureShowPress(); |
| 2114 case PlatformEvent::GestureLongPress: | 2095 case PlatformEvent::GestureLongPress: |
| 2115 return handleGestureLongPress(targetedEvent); | 2096 return handleGestureLongPress(targetedEvent); |
| 2116 case PlatformEvent::GestureLongTap: | 2097 case PlatformEvent::GestureLongTap: |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2172 } | 2153 } |
| 2173 if (eventSwallowed) | 2154 if (eventSwallowed) |
| 2174 return WebInputEventResult::HandledSuppressed; | 2155 return WebInputEventResult::HandledSuppressed; |
| 2175 } | 2156 } |
| 2176 | 2157 |
| 2177 if (eventTarget) { | 2158 if (eventTarget) { |
| 2178 if (handleScrollGestureOnResizer(eventTarget.get(), gestureEvent)) | 2159 if (handleScrollGestureOnResizer(eventTarget.get(), gestureEvent)) |
| 2179 return WebInputEventResult::HandledSuppressed; | 2160 return WebInputEventResult::HandledSuppressed; |
| 2180 | 2161 |
| 2181 RefPtrWillBeRawPtr<GestureEvent> gestureDomEvent = GestureEvent::create(
eventTarget->document().domWindow(), gestureEvent); | 2162 RefPtrWillBeRawPtr<GestureEvent> gestureDomEvent = GestureEvent::create(
eventTarget->document().domWindow(), gestureEvent); |
| 2182 // TODO(dtapuska): dispatchEvent is inverted for Gesture Events | 2163 if (gestureDomEvent.get()) { |
| 2183 // crbug.com/560357 | 2164 WebInputEventResult gestureDomEventResult = eventTarget->dispatchEve
nt(gestureDomEvent); |
| 2184 if (gestureDomEvent.get() && eventTarget->dispatchEvent(gestureDomEvent)
) | 2165 if (gestureDomEventResult != WebInputEventResult::NotHandled) |
| 2185 return eventToEventResult(gestureDomEvent, false); | 2166 return gestureDomEventResult; |
| 2167 } |
| 2186 } | 2168 } |
| 2187 | 2169 |
| 2188 switch (gestureEvent.type()) { | 2170 switch (gestureEvent.type()) { |
| 2189 case PlatformEvent::GestureScrollBegin: | 2171 case PlatformEvent::GestureScrollBegin: |
| 2190 return handleGestureScrollBegin(gestureEvent); | 2172 return handleGestureScrollBegin(gestureEvent); |
| 2191 case PlatformEvent::GestureScrollUpdate: | 2173 case PlatformEvent::GestureScrollUpdate: |
| 2192 return handleGestureScrollUpdate(gestureEvent); | 2174 return handleGestureScrollUpdate(gestureEvent); |
| 2193 case PlatformEvent::GestureScrollEnd: | 2175 case PlatformEvent::GestureScrollEnd: |
| 2194 return handleGestureScrollEnd(gestureEvent); | 2176 return handleGestureScrollEnd(gestureEvent); |
| 2195 case PlatformEvent::GestureFlingStart: | 2177 case PlatformEvent::GestureFlingStart: |
| (...skipping 1034 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3230 // On Windows, WebKit explicitly calls handleAccessKey() instead of dispatch
ing a keypress event for WM_SYSCHAR messages. | 3212 // On Windows, WebKit explicitly calls handleAccessKey() instead of dispatch
ing a keypress event for WM_SYSCHAR messages. |
| 3231 // Other platforms currently match either Mac or Windows behavior, depending
on whether they send combined KeyDown events. | 3213 // Other platforms currently match either Mac or Windows behavior, depending
on whether they send combined KeyDown events. |
| 3232 bool matchedAnAccessKey = false; | 3214 bool matchedAnAccessKey = false; |
| 3233 if (initialKeyEvent.type() == PlatformEvent::KeyDown) | 3215 if (initialKeyEvent.type() == PlatformEvent::KeyDown) |
| 3234 matchedAnAccessKey = handleAccessKey(initialKeyEvent); | 3216 matchedAnAccessKey = handleAccessKey(initialKeyEvent); |
| 3235 | 3217 |
| 3236 // FIXME: it would be fair to let an input method handle KeyUp events before
DOM dispatch. | 3218 // FIXME: it would be fair to let an input method handle KeyUp events before
DOM dispatch. |
| 3237 if (initialKeyEvent.type() == PlatformEvent::KeyUp || initialKeyEvent.type()
== PlatformEvent::Char) { | 3219 if (initialKeyEvent.type() == PlatformEvent::KeyUp || initialKeyEvent.type()
== PlatformEvent::Char) { |
| 3238 RefPtrWillBeRawPtr<KeyboardEvent> domEvent = KeyboardEvent::create(initi
alKeyEvent, m_frame->document()->domWindow()); | 3220 RefPtrWillBeRawPtr<KeyboardEvent> domEvent = KeyboardEvent::create(initi
alKeyEvent, m_frame->document()->domWindow()); |
| 3239 | 3221 |
| 3240 bool dispatchResult = node->dispatchEvent(domEvent); | 3222 return node->dispatchEvent(domEvent); |
| 3241 return eventToEventResult(domEvent, dispatchResult); | |
| 3242 } | 3223 } |
| 3243 | 3224 |
| 3244 PlatformKeyboardEvent keyDownEvent = initialKeyEvent; | 3225 PlatformKeyboardEvent keyDownEvent = initialKeyEvent; |
| 3245 if (keyDownEvent.type() != PlatformEvent::RawKeyDown) | 3226 if (keyDownEvent.type() != PlatformEvent::RawKeyDown) |
| 3246 keyDownEvent.disambiguateKeyDownEvent(PlatformEvent::RawKeyDown); | 3227 keyDownEvent.disambiguateKeyDownEvent(PlatformEvent::RawKeyDown); |
| 3247 RefPtrWillBeRawPtr<KeyboardEvent> keydown = KeyboardEvent::create(keyDownEve
nt, m_frame->document()->domWindow()); | 3228 RefPtrWillBeRawPtr<KeyboardEvent> keydown = KeyboardEvent::create(keyDownEve
nt, m_frame->document()->domWindow()); |
| 3248 if (matchedAnAccessKey) | 3229 if (matchedAnAccessKey) |
| 3249 keydown->setDefaultPrevented(true); | 3230 keydown->setDefaultPrevented(true); |
| 3250 keydown->setTarget(node); | 3231 keydown->setTarget(node); |
| 3251 | 3232 |
| 3252 if (initialKeyEvent.type() == PlatformEvent::RawKeyDown) { | 3233 WebInputEventResult dispatchResult = node->dispatchEvent(keydown); |
| 3253 if (!node->dispatchEvent(keydown)) | 3234 if (dispatchResult != WebInputEventResult::NotHandled) |
| 3254 return eventToEventResult(keydown, false); | 3235 return dispatchResult; |
| 3255 // If frame changed as a result of keydown dispatch, then return true to
avoid sending a subsequent keypress message to the new frame. | |
| 3256 bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()
->focusController().focusedOrMainFrame(); | |
| 3257 if (changedFocusedFrame) | |
| 3258 return WebInputEventResult::HandledSystem; | |
| 3259 return WebInputEventResult::NotHandled; | |
| 3260 } | |
| 3261 | |
| 3262 if (!node->dispatchEvent(keydown)) | |
| 3263 return eventToEventResult(keydown, false); | |
| 3264 // If frame changed as a result of keydown dispatch, then return early to av
oid sending a subsequent keypress message to the new frame. | 3236 // If frame changed as a result of keydown dispatch, then return early to av
oid sending a subsequent keypress message to the new frame. |
| 3265 bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()->fo
cusController().focusedOrMainFrame(); | 3237 bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()->fo
cusController().focusedOrMainFrame(); |
| 3266 if (changedFocusedFrame) | 3238 if (changedFocusedFrame) |
| 3267 return WebInputEventResult::HandledSystem; | 3239 return WebInputEventResult::HandledSystem; |
| 3268 | 3240 |
| 3241 if (initialKeyEvent.type() == PlatformEvent::RawKeyDown) |
| 3242 return WebInputEventResult::NotHandled; |
| 3243 |
| 3269 // Focus may have changed during keydown handling, so refetch node. | 3244 // Focus may have changed during keydown handling, so refetch node. |
| 3270 // But if we are dispatching a fake backward compatibility keypress, then we
pretend that the keypress happened on the original node. | 3245 // But if we are dispatching a fake backward compatibility keypress, then we
pretend that the keypress happened on the original node. |
| 3271 node = eventTargetNodeForDocument(m_frame->document()); | 3246 node = eventTargetNodeForDocument(m_frame->document()); |
| 3272 if (!node) | 3247 if (!node) |
| 3273 return WebInputEventResult::NotHandled; | 3248 return WebInputEventResult::NotHandled; |
| 3274 | 3249 |
| 3275 PlatformKeyboardEvent keyPressEvent = initialKeyEvent; | 3250 PlatformKeyboardEvent keyPressEvent = initialKeyEvent; |
| 3276 keyPressEvent.disambiguateKeyDownEvent(PlatformEvent::Char); | 3251 keyPressEvent.disambiguateKeyDownEvent(PlatformEvent::Char); |
| 3277 if (keyPressEvent.text().isEmpty()) | 3252 if (keyPressEvent.text().isEmpty()) |
| 3278 return WebInputEventResult::NotHandled; | 3253 return WebInputEventResult::NotHandled; |
| 3279 RefPtrWillBeRawPtr<KeyboardEvent> keypress = KeyboardEvent::create(keyPressE
vent, m_frame->document()->domWindow()); | 3254 RefPtrWillBeRawPtr<KeyboardEvent> keypress = KeyboardEvent::create(keyPressE
vent, m_frame->document()->domWindow()); |
| 3280 keypress->setTarget(node); | 3255 keypress->setTarget(node); |
| 3281 bool dispatchResult = node->dispatchEvent(keypress); | 3256 return node->dispatchEvent(keypress); |
| 3282 return eventToEventResult(keypress, dispatchResult); | |
| 3283 } | 3257 } |
| 3284 | 3258 |
| 3285 static WebFocusType focusDirectionForKey(const AtomicString& keyIdentifier) | 3259 static WebFocusType focusDirectionForKey(const AtomicString& keyIdentifier) |
| 3286 { | 3260 { |
| 3287 DEFINE_STATIC_LOCAL(AtomicString, Down, ("Down", AtomicString::ConstructFrom
Literal)); | 3261 DEFINE_STATIC_LOCAL(AtomicString, Down, ("Down", AtomicString::ConstructFrom
Literal)); |
| 3288 DEFINE_STATIC_LOCAL(AtomicString, Up, ("Up", AtomicString::ConstructFromLite
ral)); | 3262 DEFINE_STATIC_LOCAL(AtomicString, Up, ("Up", AtomicString::ConstructFromLite
ral)); |
| 3289 DEFINE_STATIC_LOCAL(AtomicString, Left, ("Left", AtomicString::ConstructFrom
Literal)); | 3263 DEFINE_STATIC_LOCAL(AtomicString, Left, ("Left", AtomicString::ConstructFrom
Literal)); |
| 3290 DEFINE_STATIC_LOCAL(AtomicString, Right, ("Right", AtomicString::ConstructFr
omLiteral)); | 3264 DEFINE_STATIC_LOCAL(AtomicString, Right, ("Right", AtomicString::ConstructFr
omLiteral)); |
| 3291 | 3265 |
| 3292 WebFocusType retVal = WebFocusTypeNone; | 3266 WebFocusType retVal = WebFocusTypeNone; |
| (...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3856 continue; | 3830 continue; |
| 3857 | 3831 |
| 3858 const AtomicString& eventName(touchEventNameForTouchPointState(static_ca
st<PlatformTouchPoint::State>(state))); | 3832 const AtomicString& eventName(touchEventNameForTouchPointState(static_ca
st<PlatformTouchPoint::State>(state))); |
| 3859 for (const auto& eventTarget : changedTouches[state].m_targets) { | 3833 for (const auto& eventTarget : changedTouches[state].m_targets) { |
| 3860 EventTarget* touchEventTarget = eventTarget.get(); | 3834 EventTarget* touchEventTarget = eventTarget.get(); |
| 3861 RefPtrWillBeRawPtr<TouchEvent> touchEvent = TouchEvent::create( | 3835 RefPtrWillBeRawPtr<TouchEvent> touchEvent = TouchEvent::create( |
| 3862 touches.get(), touchesByTarget.get(touchEventTarget), changedTou
ches[state].m_touches.get(), | 3836 touches.get(), touchesByTarget.get(touchEventTarget), changedTou
ches[state].m_touches.get(), |
| 3863 eventName, touchEventTarget->toNode()->document().domWindow(), | 3837 eventName, touchEventTarget->toNode()->document().domWindow(), |
| 3864 event.modifiers(), event.cancelable(), event.causesScrollingIfUn
canceled(), event.timestamp()); | 3838 event.modifiers(), event.cancelable(), event.causesScrollingIfUn
canceled(), event.timestamp()); |
| 3865 | 3839 |
| 3866 bool dispatchResult = touchEventTarget->dispatchEvent(touchEvent.get
()); | 3840 eventResult = mergeEventResult(eventResult, touchEventTarget->dispat
chEvent(touchEvent.get())); |
| 3867 eventResult = mergeEventResult(eventResult, eventToEventResult(touch
Event, dispatchResult)); | |
| 3868 } | 3841 } |
| 3869 } | 3842 } |
| 3870 | 3843 |
| 3871 return eventResult; | 3844 return eventResult; |
| 3872 } | 3845 } |
| 3873 | 3846 |
| 3874 WebInputEventResult EventHandler::handleTouchEvent(const PlatformTouchEvent& eve
nt) | 3847 WebInputEventResult EventHandler::handleTouchEvent(const PlatformTouchEvent& eve
nt) |
| 3875 { | 3848 { |
| 3876 TRACE_EVENT0("blink", "EventHandler::handleTouchEvent"); | 3849 TRACE_EVENT0("blink", "EventHandler::handleTouchEvent"); |
| 3877 | 3850 |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4135 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() | 4108 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() |
| 4136 { | 4109 { |
| 4137 #if OS(MACOSX) | 4110 #if OS(MACOSX) |
| 4138 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); | 4111 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); |
| 4139 #else | 4112 #else |
| 4140 return PlatformEvent::AltKey; | 4113 return PlatformEvent::AltKey; |
| 4141 #endif | 4114 #endif |
| 4142 } | 4115 } |
| 4143 | 4116 |
| 4144 } // namespace blink | 4117 } // namespace blink |
| OLD | NEW |