Index: third_party/WebKit/Source/core/input/EventHandler.cpp |
diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp |
index 1363f3f9af1553b6fb15cbd6fdd50d13be42f65e..cc0d0f1fedc6f30de1189781c9f2213d17442a33 100644 |
--- a/third_party/WebKit/Source/core/input/EventHandler.cpp |
+++ b/third_party/WebKit/Source/core/input/EventHandler.cpp |
@@ -119,21 +119,6 @@ WebInputEventResult mergeEventResult(WebInputEventResult responseA, WebInputEven |
return static_cast<WebInputEventResult>(max(static_cast<int>(responseA), static_cast<int>(responseB))); |
} |
-WebInputEventResult eventToEventResult(PassRefPtrWillBeRawPtr<Event> event, bool res) |
-{ |
- if (event->defaultPrevented()) |
- return WebInputEventResult::HandledApplication; |
- if (event->defaultHandled()) |
- return WebInputEventResult::HandledSystem; |
- |
- // TODO(dtapuska): There are cases in the code where dispatchEvent |
- // returns false (indicated handled) but event is not marked |
- // as default handled or default prevented. crbug.com/560355 |
- if (!res) |
- return WebInputEventResult::HandledSuppressed; |
- return WebInputEventResult::NotHandled; |
-} |
- |
bool isNodeInDocument(Node* n) |
{ |
return n && n->inDocument(); |
@@ -1381,10 +1366,8 @@ WebInputEventResult EventHandler::handleMouseReleaseEvent(const PlatformMouseEve |
// because the mouseup dispatch above has already updated it |
// correctly. Moreover, clickTargetNode is different from |
// mev.innerNode at drag-release. |
- if (clickTargetNode->dispatchMouseEvent(mouseEvent, |
- EventTypeNames::click, m_clickCount)) { |
- clickEventResult = WebInputEventResult::HandledApplication; |
- } |
+ clickEventResult = clickTargetNode->dispatchMouseEvent(mouseEvent, |
+ EventTypeNames::click, m_clickCount); |
} |
} |
@@ -1416,8 +1399,7 @@ WebInputEventResult EventHandler::dispatchDragEvent(const AtomicString& eventTyp |
event.modifiers(), |
0, MouseEvent::platformModifiersToButtons(event.modifiers()), nullptr, event.timestamp(), dataTransfer, event.syntheticEventType()); |
- bool dispatchResult = dragTarget->dispatchEvent(me.get()); |
- return eventToEventResult(me, dispatchResult); |
+ return dragTarget->dispatchEvent(me.get()); |
} |
static bool targetIsFrame(Node* target, LocalFrame*& frame) |
@@ -1656,8 +1638,7 @@ WebInputEventResult EventHandler::dispatchPointerEvent(Node* target, const Atomi |
RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.create(eventType, |
mouseEvent, relatedTarget, m_frame->document()->domWindow()); |
- bool dispatchResult = target->dispatchEvent(pointerEvent.get()); |
- return eventToEventResult(pointerEvent, dispatchResult); |
+ return target->dispatchEvent(pointerEvent.get()); |
} |
void EventHandler::sendMouseEventsForNodeTransition(Node* exitedNode, Node* enteredNode, |
@@ -1770,8 +1751,7 @@ WebInputEventResult EventHandler::dispatchMouseEvent(const AtomicString& eventTy |
return WebInputEventResult::NotHandled; |
RefPtrWillBeRawPtr<MouseEvent> event = MouseEvent::create(eventType, m_nodeUnderMouse->document().domWindow(), mouseEvent, clickCount, nullptr); |
- bool dispatchResult = m_nodeUnderMouse->dispatchEvent(event); |
- return eventToEventResult(event, dispatchResult); |
+ return m_nodeUnderMouse->dispatchEvent(event); |
} |
// TODO(mustaq): Make PE drive ME dispatch & bookkeeping in EventHandler. |
@@ -1795,8 +1775,7 @@ WebInputEventResult EventHandler::updatePointerTargetAndDispatchEvents(const Ato |
if (!m_preventMouseEventForPointerTypeMouse) { |
RefPtrWillBeRawPtr<MouseEvent> event = MouseEvent::create(mouseEventType, m_nodeUnderMouse->document().domWindow(), mouseEvent, clickCount, nullptr); |
- bool dispatchResult = m_nodeUnderMouse->dispatchEvent(event); |
- result = mergeEventResult(result, eventToEventResult(event, dispatchResult)); |
+ result = mergeEventResult(result, m_nodeUnderMouse->dispatchEvent(event)); |
} |
return result; |
@@ -1967,9 +1946,10 @@ WebInputEventResult EventHandler::handleWheelEvent(const PlatformWheelEvent& eve |
} |
RefPtrWillBeRawPtr<Event> domEvent = WheelEvent::create(event, node->document().domWindow()); |
- if (!node->dispatchEvent(domEvent)) { |
+ WebInputEventResult domEventResult = node->dispatchEvent(domEvent); |
+ if (domEventResult != WebInputEventResult::NotHandled) { |
setFrameWasScrolledByUser(); |
- return eventToEventResult(domEvent, false); |
+ return domEventResult; |
} |
} |
@@ -2100,10 +2080,11 @@ WebInputEventResult EventHandler::handleGestureEventInFrame(const GestureEventWi |
if (eventTarget) { |
RefPtrWillBeRawPtr<GestureEvent> gestureDomEvent = GestureEvent::create(eventTarget->document().domWindow(), gestureEvent); |
- // TODO(dtapuska): dispatchEvent is inverted for Gesture Events |
- // crbug.com/560357 |
- if (gestureDomEvent.get() && eventTarget->dispatchEvent(gestureDomEvent)) |
- return eventToEventResult(gestureDomEvent, false); |
+ if (gestureDomEvent.get()) { |
+ WebInputEventResult gestureDomEventResult = eventTarget->dispatchEvent(gestureDomEvent); |
+ if (gestureDomEventResult != WebInputEventResult::NotHandled) |
+ return gestureDomEventResult; |
+ } |
} |
switch (gestureEvent.type()) { |
@@ -2179,10 +2160,11 @@ WebInputEventResult EventHandler::handleGestureScrollEvent(const PlatformGesture |
return WebInputEventResult::HandledSuppressed; |
RefPtrWillBeRawPtr<GestureEvent> gestureDomEvent = GestureEvent::create(eventTarget->document().domWindow(), gestureEvent); |
- // TODO(dtapuska): dispatchEvent is inverted for Gesture Events |
- // crbug.com/560357 |
- if (gestureDomEvent.get() && eventTarget->dispatchEvent(gestureDomEvent)) |
- return eventToEventResult(gestureDomEvent, false); |
+ if (gestureDomEvent.get()) { |
+ WebInputEventResult gestureDomEventResult = eventTarget->dispatchEvent(gestureDomEvent); |
+ if (gestureDomEventResult != WebInputEventResult::NotHandled) |
+ return gestureDomEventResult; |
+ } |
} |
switch (gestureEvent.type()) { |
@@ -3237,8 +3219,7 @@ WebInputEventResult EventHandler::keyEvent(const PlatformKeyboardEvent& initialK |
if (initialKeyEvent.type() == PlatformEvent::KeyUp || initialKeyEvent.type() == PlatformEvent::Char) { |
RefPtrWillBeRawPtr<KeyboardEvent> domEvent = KeyboardEvent::create(initialKeyEvent, m_frame->document()->domWindow()); |
- bool dispatchResult = node->dispatchEvent(domEvent); |
- return eventToEventResult(domEvent, dispatchResult); |
+ return node->dispatchEvent(domEvent); |
} |
PlatformKeyboardEvent keyDownEvent = initialKeyEvent; |
@@ -3249,23 +3230,17 @@ WebInputEventResult EventHandler::keyEvent(const PlatformKeyboardEvent& initialK |
keydown->setDefaultPrevented(true); |
keydown->setTarget(node); |
- if (initialKeyEvent.type() == PlatformEvent::RawKeyDown) { |
- if (!node->dispatchEvent(keydown)) |
- return eventToEventResult(keydown, false); |
- // If frame changed as a result of keydown dispatch, then return true to avoid sending a subsequent keypress message to the new frame. |
- bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()->focusController().focusedOrMainFrame(); |
- if (changedFocusedFrame) |
- return WebInputEventResult::HandledSystem; |
- return WebInputEventResult::NotHandled; |
- } |
- |
- if (!node->dispatchEvent(keydown)) |
- return eventToEventResult(keydown, false); |
+ WebInputEventResult dispatchResult = node->dispatchEvent(keydown); |
+ if (dispatchResult != WebInputEventResult::NotHandled) |
+ return dispatchResult; |
// If frame changed as a result of keydown dispatch, then return early to avoid sending a subsequent keypress message to the new frame. |
bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()->focusController().focusedOrMainFrame(); |
if (changedFocusedFrame) |
return WebInputEventResult::HandledSystem; |
+ if (initialKeyEvent.type() == PlatformEvent::RawKeyDown) |
+ return WebInputEventResult::NotHandled; |
+ |
// Focus may have changed during keydown handling, so refetch node. |
// But if we are dispatching a fake backward compatibility keypress, then we pretend that the keypress happened on the original node. |
node = eventTargetNodeForDocument(m_frame->document()); |
@@ -3278,8 +3253,7 @@ WebInputEventResult EventHandler::keyEvent(const PlatformKeyboardEvent& initialK |
return WebInputEventResult::NotHandled; |
RefPtrWillBeRawPtr<KeyboardEvent> keypress = KeyboardEvent::create(keyPressEvent, m_frame->document()->domWindow()); |
keypress->setTarget(node); |
- bool dispatchResult = node->dispatchEvent(keypress); |
- return eventToEventResult(keypress, dispatchResult); |
+ return node->dispatchEvent(keypress); |
} |
static WebFocusType focusDirectionForKey(const AtomicString& keyIdentifier) |
@@ -3863,8 +3837,7 @@ WebInputEventResult EventHandler::dispatchTouchEvents(const PlatformTouchEvent& |
eventName, touchEventTarget->toNode()->document().domWindow(), |
event.modifiers(), event.cancelable(), event.causesScrollingIfUncanceled(), event.timestamp()); |
- bool dispatchResult = touchEventTarget->dispatchEvent(touchEvent.get()); |
- eventResult = mergeEventResult(eventResult, eventToEventResult(touchEvent, dispatchResult)); |
+ eventResult = mergeEventResult(eventResult, touchEventTarget->dispatchEvent(touchEvent.get())); |
} |
} |