Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1835)

Side by Side Diff: Source/core/input/EventHandler.cpp

Issue 1293973004: Removed a redundant mouse-state from EventHandler. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixed a raw-ptr issue on deleted node. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/input/EventHandler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 } 246 }
247 247
248 DEFINE_TRACE(EventHandler) 248 DEFINE_TRACE(EventHandler)
249 { 249 {
250 #if ENABLE(OILPAN) 250 #if ENABLE(OILPAN)
251 visitor->trace(m_frame); 251 visitor->trace(m_frame);
252 visitor->trace(m_mousePressNode); 252 visitor->trace(m_mousePressNode);
253 visitor->trace(m_resizeScrollableArea); 253 visitor->trace(m_resizeScrollableArea);
254 visitor->trace(m_capturingMouseEventsNode); 254 visitor->trace(m_capturingMouseEventsNode);
255 visitor->trace(m_nodeUnderMouse); 255 visitor->trace(m_nodeUnderMouse);
256 visitor->trace(m_lastNodeUnderMouse);
257 visitor->trace(m_lastMouseMoveEventSubframe); 256 visitor->trace(m_lastMouseMoveEventSubframe);
258 visitor->trace(m_lastScrollbarUnderMouse); 257 visitor->trace(m_lastScrollbarUnderMouse);
259 visitor->trace(m_clickNode); 258 visitor->trace(m_clickNode);
260 visitor->trace(m_dragTarget); 259 visitor->trace(m_dragTarget);
261 visitor->trace(m_frameSetBeingResized); 260 visitor->trace(m_frameSetBeingResized);
262 visitor->trace(m_previousWheelScrolledNode); 261 visitor->trace(m_previousWheelScrolledNode);
263 visitor->trace(m_scrollbarHandlingScrollGesture); 262 visitor->trace(m_scrollbarHandlingScrollGesture);
264 visitor->trace(m_targetForTouchID); 263 visitor->trace(m_targetForTouchID);
265 visitor->trace(m_touchSequenceDocument); 264 visitor->trace(m_touchSequenceDocument);
266 visitor->trace(m_scrollGestureHandlingNode); 265 visitor->trace(m_scrollGestureHandlingNode);
(...skipping 11 matching lines...) Expand all
278 } 277 }
279 278
280 void EventHandler::clear() 279 void EventHandler::clear()
281 { 280 {
282 m_hoverTimer.stop(); 281 m_hoverTimer.stop();
283 m_cursorUpdateTimer.stop(); 282 m_cursorUpdateTimer.stop();
284 m_fakeMouseMoveEventTimer.stop(); 283 m_fakeMouseMoveEventTimer.stop();
285 m_activeIntervalTimer.stop(); 284 m_activeIntervalTimer.stop();
286 m_resizeScrollableArea = nullptr; 285 m_resizeScrollableArea = nullptr;
287 m_nodeUnderMouse = nullptr; 286 m_nodeUnderMouse = nullptr;
288 m_lastNodeUnderMouse = nullptr;
289 m_lastMouseMoveEventSubframe = nullptr; 287 m_lastMouseMoveEventSubframe = nullptr;
290 m_lastScrollbarUnderMouse = nullptr; 288 m_lastScrollbarUnderMouse = nullptr;
291 m_clickCount = 0; 289 m_clickCount = 0;
292 m_clickNode = nullptr; 290 m_clickNode = nullptr;
293 m_frameSetBeingResized = nullptr; 291 m_frameSetBeingResized = nullptr;
294 m_dragTarget = nullptr; 292 m_dragTarget = nullptr;
295 m_shouldOnlyFireDragOverEvent = false; 293 m_shouldOnlyFireDragOverEvent = false;
296 m_mousePositionIsUnknown = true; 294 m_mousePositionIsUnknown = true;
297 m_lastKnownMousePosition = IntPoint(); 295 m_lastKnownMousePosition = IntPoint();
298 m_lastKnownMouseGlobalPosition = IntPoint(); 296 m_lastKnownMouseGlobalPosition = IntPoint();
(...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after
958 m_resizeScrollableArea = layer->scrollableArea(); 956 m_resizeScrollableArea = layer->scrollableArea();
959 m_resizeScrollableArea->setInResizeMode(true); 957 m_resizeScrollableArea->setInResizeMode(true);
960 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset FromResizeCorner(p)); 958 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset FromResizeCorner(p));
961 invalidateClick(); 959 invalidateClick();
962 return true; 960 return true;
963 } 961 }
964 } 962 }
965 963
966 m_frame->selection().setCaretBlinkingSuspended(true); 964 m_frame->selection().setCaretBlinkingSuspended(true);
967 965
968 bool swallowEvent = !dispatchMouseEvent(EventTypeNames::mousedown, mev.inner Node(), m_clickCount, mouseEvent, true); 966 bool swallowEvent = !dispatchMouseEvent(EventTypeNames::mousedown, mev.inner Node(), m_clickCount, mouseEvent);
969 // m_selectionInitiationState is initialized after dispatching mousedown 967 // m_selectionInitiationState is initialized after dispatching mousedown
970 // event in order not to keep the selection by DOM APIs Because we can't 968 // event in order not to keep the selection by DOM APIs Because we can't
971 // give the user the chance to handle the selection by user action like 969 // give the user the chance to handle the selection by user action like
972 // dragging if we keep the selection in case of mousedown. FireFox also has 970 // dragging if we keep the selection in case of mousedown. FireFox also has
973 // the same behavior and it's more compatible with other browsers. 971 // the same behavior and it's more compatible with other browsers.
974 selectionController().initializeSelectionState(); 972 selectionController().initializeSelectionState();
975 HitTestResult hitTestResult = hitTestResultInFrame(m_frame, mouseEvent.posit ion(), HitTestRequest::ReadOnly); 973 HitTestResult hitTestResult = hitTestResultInFrame(m_frame, mouseEvent.posit ion(), HitTestRequest::ReadOnly);
976 InputDeviceCapabilities* sourceCapabilities = mouseEvent.syntheticEventType( ) == PlatformMouseEvent::FromTouch ? InputDeviceCapabilities::firesTouchEventsSo urceCapabilities() : 974 InputDeviceCapabilities* sourceCapabilities = mouseEvent.syntheticEventType( ) == PlatformMouseEvent::FromTouch ? InputDeviceCapabilities::firesTouchEventsSo urceCapabilities() :
977 InputDeviceCapabilities::doesntFireTouchEventsSourceCapabilities(); 975 InputDeviceCapabilities::doesntFireTouchEventsSourceCapabilities();
978 swallowEvent = swallowEvent || handleMouseFocus(MouseEventWithHitTestResults (mouseEvent, hitTestResult), sourceCapabilities); 976 swallowEvent = swallowEvent || handleMouseFocus(MouseEventWithHitTestResults (mouseEvent, hitTestResult), sourceCapabilities);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 m_cursorUpdateTimer.stop(); 1085 m_cursorUpdateTimer.stop();
1088 1086
1089 cancelFakeMouseMoveEvent(); 1087 cancelFakeMouseMoveEvent();
1090 1088
1091 if (m_svgPan) { 1089 if (m_svgPan) {
1092 m_frame->document()->accessSVGExtensions().updatePan(m_frame->view()->ro otFrameToContents(m_lastKnownMousePosition)); 1090 m_frame->document()->accessSVGExtensions().updatePan(m_frame->view()->ro otFrameToContents(m_lastKnownMousePosition));
1093 return true; 1091 return true;
1094 } 1092 }
1095 1093
1096 if (m_frameSetBeingResized) 1094 if (m_frameSetBeingResized)
1097 return !dispatchMouseEvent(EventTypeNames::mousemove, m_frameSetBeingRes ized.get(), 0, mouseEvent, false); 1095 return !dispatchMouseEvent(EventTypeNames::mousemove, m_frameSetBeingRes ized.get(), 0, mouseEvent);
1098 1096
1099 // Send events right to a scrollbar if the mouse is pressed. 1097 // Send events right to a scrollbar if the mouse is pressed.
1100 if (m_lastScrollbarUnderMouse && m_mousePressed) { 1098 if (m_lastScrollbarUnderMouse && m_mousePressed) {
1101 m_lastScrollbarUnderMouse->mouseMoved(mouseEvent); 1099 m_lastScrollbarUnderMouse->mouseMoved(mouseEvent);
1102 return true; 1100 return true;
1103 } 1101 }
1104 1102
1105 // Mouse events simulated from touch should not hit-test again. 1103 // Mouse events simulated from touch should not hit-test again.
1106 ASSERT(!mouseEvent.fromTouch()); 1104 ASSERT(!mouseEvent.fromTouch());
1107 1105
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1147 1145
1148 bool swallowEvent = false; 1146 bool swallowEvent = false;
1149 RefPtrWillBeRawPtr<LocalFrame> newSubframe = m_capturingMouseEventsNode.get( ) ? subframeForTargetNode(m_capturingMouseEventsNode.get()) : subframeForHitTest Result(mev); 1147 RefPtrWillBeRawPtr<LocalFrame> newSubframe = m_capturingMouseEventsNode.get( ) ? subframeForTargetNode(m_capturingMouseEventsNode.get()) : subframeForHitTest Result(mev);
1150 1148
1151 // We want mouseouts to happen first, from the inside out. First send a mov e event to the last subframe so that it will fire mouseouts. 1149 // We want mouseouts to happen first, from the inside out. First send a mov e event to the last subframe so that it will fire mouseouts.
1152 if (m_lastMouseMoveEventSubframe && m_lastMouseMoveEventSubframe->tree().isD escendantOf(m_frame) && m_lastMouseMoveEventSubframe != newSubframe) 1150 if (m_lastMouseMoveEventSubframe && m_lastMouseMoveEventSubframe->tree().isD escendantOf(m_frame) && m_lastMouseMoveEventSubframe != newSubframe)
1153 m_lastMouseMoveEventSubframe->eventHandler().handleMouseLeaveEvent(mouse Event); 1151 m_lastMouseMoveEventSubframe->eventHandler().handleMouseLeaveEvent(mouse Event);
1154 1152
1155 if (newSubframe) { 1153 if (newSubframe) {
1156 // Update over/out state before passing the event to the subframe. 1154 // Update over/out state before passing the event to the subframe.
1157 updateMouseEventTargetNode(mev.innerNode(), mouseEvent, true); 1155 updateMouseEventTargetNode(mev.innerNode(), mouseEvent);
1158 1156
1159 // Event dispatch in updateMouseEventTargetNode may have caused the subf rame of the target 1157 // Event dispatch in updateMouseEventTargetNode may have caused the subf rame of the target
1160 // node to be detached from its FrameView, in which case the event shoul d not be passed. 1158 // node to be detached from its FrameView, in which case the event shoul d not be passed.
1161 if (newSubframe->view()) 1159 if (newSubframe->view())
1162 swallowEvent |= passMouseMoveEventToSubframe(mev, newSubframe.get(), hoveredNode); 1160 swallowEvent |= passMouseMoveEventToSubframe(mev, newSubframe.get(), hoveredNode);
1163 } else { 1161 } else {
1164 if (scrollbar && !m_mousePressed) 1162 if (scrollbar && !m_mousePressed)
1165 scrollbar->mouseMoved(mouseEvent); // Handle hover effects on platfo rms that support visual feedback on scrollbar hovering. 1163 scrollbar->mouseMoved(mouseEvent); // Handle hover effects on platfo rms that support visual feedback on scrollbar hovering.
1166 if (FrameView* view = m_frame->view()) { 1164 if (FrameView* view = m_frame->view()) {
1167 OptionalCursor optionalCursor = selectCursor(mev.hitTestResult()); 1165 OptionalCursor optionalCursor = selectCursor(mev.hitTestResult());
1168 if (optionalCursor.isCursorChange()) { 1166 if (optionalCursor.isCursorChange()) {
1169 view->setCursor(optionalCursor.cursor()); 1167 view->setCursor(optionalCursor.cursor());
1170 } 1168 }
1171 } 1169 }
1172 } 1170 }
1173 1171
1174 m_lastMouseMoveEventSubframe = newSubframe; 1172 m_lastMouseMoveEventSubframe = newSubframe;
1175 1173
1176 if (swallowEvent) 1174 if (swallowEvent)
1177 return true; 1175 return true;
1178 1176
1179 swallowEvent = !dispatchMouseEvent(EventTypeNames::mousemove, mev.innerNode( ), 0, mouseEvent, true); 1177 swallowEvent = !dispatchMouseEvent(EventTypeNames::mousemove, mev.innerNode( ), 0, mouseEvent);
1180 if (!swallowEvent) 1178 if (!swallowEvent)
1181 swallowEvent = handleMouseDraggedEvent(mev); 1179 swallowEvent = handleMouseDraggedEvent(mev);
1182 1180
1183 return swallowEvent; 1181 return swallowEvent;
1184 } 1182 }
1185 1183
1186 void EventHandler::invalidateClick() 1184 void EventHandler::invalidateClick()
1187 { 1185 {
1188 m_clickCount = 0; 1186 m_clickCount = 0;
1189 m_clickNode = nullptr; 1187 m_clickNode = nullptr;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1222 m_mousePressed = false; 1220 m_mousePressed = false;
1223 setLastKnownMousePosition(mouseEvent); 1221 setLastKnownMousePosition(mouseEvent);
1224 1222
1225 if (m_svgPan) { 1223 if (m_svgPan) {
1226 m_svgPan = false; 1224 m_svgPan = false;
1227 m_frame->document()->accessSVGExtensions().updatePan(m_frame->view()->ro otFrameToContents(m_lastKnownMousePosition)); 1225 m_frame->document()->accessSVGExtensions().updatePan(m_frame->view()->ro otFrameToContents(m_lastKnownMousePosition));
1228 return true; 1226 return true;
1229 } 1227 }
1230 1228
1231 if (m_frameSetBeingResized) 1229 if (m_frameSetBeingResized)
1232 return !dispatchMouseEvent(EventTypeNames::mouseup, m_frameSetBeingResiz ed.get(), m_clickCount, mouseEvent, false); 1230 return !dispatchMouseEvent(EventTypeNames::mouseup, m_frameSetBeingResiz ed.get(), m_clickCount, mouseEvent);
1233 1231
1234 if (m_lastScrollbarUnderMouse) { 1232 if (m_lastScrollbarUnderMouse) {
1235 invalidateClick(); 1233 invalidateClick();
1236 m_lastScrollbarUnderMouse->mouseUp(mouseEvent); 1234 m_lastScrollbarUnderMouse->mouseUp(mouseEvent);
1237 bool setUnder = false; 1235 return !dispatchMouseEvent(EventTypeNames::mouseup, m_nodeUnderMouse.get (), m_clickCount, mouseEvent);
1238 return !dispatchMouseEvent(EventTypeNames::mouseup, m_nodeUnderMouse.get (), m_clickCount, mouseEvent, setUnder);
1239 } 1236 }
1240 1237
1241 // Mouse events simulated from touch should not hit-test again. 1238 // Mouse events simulated from touch should not hit-test again.
1242 ASSERT(!mouseEvent.fromTouch()); 1239 ASSERT(!mouseEvent.fromTouch());
1243 1240
1244 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Release; 1241 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Release;
1245 HitTestRequest request(hitType); 1242 HitTestRequest request(hitType);
1246 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseEvent); 1243 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseEvent);
1247 LocalFrame* subframe = m_capturingMouseEventsNode.get() ? subframeForTargetN ode(m_capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); 1244 LocalFrame* subframe = m_capturingMouseEventsNode.get() ? subframeForTargetN ode(m_capturingMouseEventsNode.get()) : subframeForHitTestResult(mev);
1248 if (m_eventHandlerWillResetCapturingMouseEventsNode) 1245 if (m_eventHandlerWillResetCapturingMouseEventsNode)
1249 m_capturingMouseEventsNode = nullptr; 1246 m_capturingMouseEventsNode = nullptr;
1250 if (subframe && passMouseReleaseEventToSubframe(mev, subframe)) 1247 if (subframe && passMouseReleaseEventToSubframe(mev, subframe))
1251 return true; 1248 return true;
1252 1249
1253 bool swallowMouseUpEvent = !dispatchMouseEvent(EventTypeNames::mouseup, mev. innerNode(), m_clickCount, mouseEvent, false); 1250 bool swallowMouseUpEvent = !dispatchMouseEvent(EventTypeNames::mouseup, mev. innerNode(), m_clickCount, mouseEvent);
1254 1251
1255 bool contextMenuEvent = mouseEvent.button() == RightButton; 1252 bool contextMenuEvent = mouseEvent.button() == RightButton;
1256 #if OS(MACOSX) 1253 #if OS(MACOSX)
1257 // FIXME: The Mac port achieves the same behavior by checking whether the co ntext menu is currently open in WebPage::mouseEvent(). Consider merging the impl ementations. 1254 // FIXME: The Mac port achieves the same behavior by checking whether the co ntext menu is currently open in WebPage::mouseEvent(). Consider merging the impl ementations.
1258 if (mouseEvent.button() == LeftButton && mouseEvent.modifiers() & PlatformEv ent::CtrlKey) 1255 if (mouseEvent.button() == LeftButton && mouseEvent.modifiers() & PlatformEv ent::CtrlKey)
1259 contextMenuEvent = true; 1256 contextMenuEvent = true;
1260 #endif 1257 #endif
1261 1258
1262 bool swallowClickEvent = false; 1259 bool swallowClickEvent = false;
1263 if (m_clickCount > 0 && !contextMenuEvent && mev.innerNode() && m_clickNode && mev.innerNode()->canParticipateInComposedTree() && m_clickNode->canParticipat eInComposedTree()) { 1260 if (m_clickCount > 0 && !contextMenuEvent && mev.innerNode() && m_clickNode && mev.innerNode()->canParticipateInComposedTree() && m_clickNode->canParticipat eInComposedTree()) {
1264 // Updates distribution because a 'mouseup' event listener can make the 1261 // Updates distribution because a 'mouseup' event listener can make the
1265 // tree dirty at dispatchMouseEvent() invocation above. 1262 // tree dirty at dispatchMouseEvent() invocation above.
1266 // Unless distribution is updated, commonAncestor would hit ASSERT. 1263 // Unless distribution is updated, commonAncestor would hit ASSERT.
1267 // Both m_clickNode and mev.innerNode() don't need to be updated 1264 // Both m_clickNode and mev.innerNode() don't need to be updated
1268 // because commonAncestor() will exit early if their documents are diffe rent. 1265 // because commonAncestor() will exit early if their documents are diffe rent.
1269 m_clickNode->updateDistribution(); 1266 m_clickNode->updateDistribution();
1270 if (Node* clickTargetNode = mev.innerNode()->commonAncestor(*m_clickNode , parentForClickEvent)) 1267 if (Node* clickTargetNode = mev.innerNode()->commonAncestor(*m_clickNode , parentForClickEvent))
1271 swallowClickEvent = !dispatchMouseEvent(EventTypeNames::click, click TargetNode, m_clickCount, mouseEvent, true); 1268 swallowClickEvent = !dispatchMouseEvent(EventTypeNames::click, click TargetNode, m_clickCount, mouseEvent);
1272 } 1269 }
1273 1270
1274 if (m_resizeScrollableArea) { 1271 if (m_resizeScrollableArea) {
1275 m_resizeScrollableArea->setInResizeMode(false); 1272 m_resizeScrollableArea->setInResizeMode(false);
1276 m_resizeScrollableArea = nullptr; 1273 m_resizeScrollableArea = nullptr;
1277 } 1274 }
1278 1275
1279 bool swallowMouseReleaseEvent = false; 1276 bool swallowMouseReleaseEvent = false;
1280 if (!swallowMouseUpEvent) 1277 if (!swallowMouseUpEvent)
1281 swallowMouseReleaseEvent = handleMouseReleaseEvent(mev); 1278 swallowMouseReleaseEvent = handleMouseReleaseEvent(mev);
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1472 } 1469 }
1473 1470
1474 MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques t& request, const PlatformMouseEvent& mev) 1471 MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques t& request, const PlatformMouseEvent& mev)
1475 { 1472 {
1476 ASSERT(m_frame); 1473 ASSERT(m_frame);
1477 ASSERT(m_frame->document()); 1474 ASSERT(m_frame->document());
1478 1475
1479 return m_frame->document()->prepareMouseEvent(request, contentPointFromRootF rame(m_frame, mev.position()), mev); 1476 return m_frame->document()->prepareMouseEvent(request, contentPointFromRootF rame(m_frame, mev.position()), mev);
1480 } 1477 }
1481 1478
1482 void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMo useEvent& mouseEvent, bool fireMouseEvents) 1479 void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMo useEvent& mouseEvent)
1483 { 1480 {
1484 Node* result = targetNode; 1481 Node* result = targetNode;
1485 1482
1486 // If we're capturing, we always go right to that node. 1483 // If we're capturing, we always go right to that node.
1487 if (m_capturingMouseEventsNode) { 1484 if (m_capturingMouseEventsNode) {
1488 result = m_capturingMouseEventsNode.get(); 1485 result = m_capturingMouseEventsNode.get();
1489 } else { 1486 } else {
1490 // If the target node is a text node, dispatch on the parent node - rdar ://4196646 1487 // If the target node is a text node, dispatch on the parent node - rdar ://4196646
1491 if (result && result->isTextNode()) 1488 if (result && result->isTextNode())
1492 result = ComposedTreeTraversal::parent(*result); 1489 result = ComposedTreeTraversal::parent(*result);
1493 } 1490 }
1491 RefPtrWillBeMember<Node> lastNodeUnderMouse = m_nodeUnderMouse;
1494 m_nodeUnderMouse = result; 1492 m_nodeUnderMouse = result;
1495 1493
1496 if (fireMouseEvents) { 1494 DeprecatedPaintLayer* layerForLastNode = layerForNode(lastNodeUnderMouse.get ());
1497 DeprecatedPaintLayer* layerForLastNode = layerForNode(m_lastNodeUnderMou se.get()); 1495 DeprecatedPaintLayer* layerForNodeUnderMouse = layerForNode(m_nodeUnderMouse .get());
1498 DeprecatedPaintLayer* layerForNodeUnderMouse = layerForNode(m_nodeUnderM ouse.get()); 1496 Page* page = m_frame->page();
1499 Page* page = m_frame->page();
1500 1497
1501 if (m_lastNodeUnderMouse && (!m_nodeUnderMouse || m_nodeUnderMouse->docu ment() != m_frame->document())) { 1498 if (lastNodeUnderMouse && (!m_nodeUnderMouse || m_nodeUnderMouse->document() != m_frame->document())) {
1502 // The mouse has moved between frames. 1499 // The mouse has moved between frames.
1503 if (LocalFrame* frame = m_lastNodeUnderMouse->document().frame()) { 1500 if (LocalFrame* frame = lastNodeUnderMouse->document().frame()) {
1504 if (FrameView* frameView = frame->view()) 1501 if (FrameView* frameView = frame->view())
1505 frameView->mouseExitedContentArea(); 1502 frameView->mouseExitedContentArea();
1506 }
1507 } else if (page && (layerForLastNode && (!layerForNodeUnderMouse || laye rForNodeUnderMouse != layerForLastNode))) {
1508 // The mouse has moved between layers.
1509 if (ScrollableArea* scrollableAreaForLastNode = associatedScrollable Area(layerForLastNode))
1510 scrollableAreaForLastNode->mouseExitedContentArea();
1511 } 1503 }
1504 } else if (page && (layerForLastNode && (!layerForNodeUnderMouse || layerFor NodeUnderMouse != layerForLastNode))) {
1505 // The mouse has moved between layers.
1506 if (ScrollableArea* scrollableAreaForLastNode = associatedScrollableArea (layerForLastNode))
1507 scrollableAreaForLastNode->mouseExitedContentArea();
1508 }
1512 1509
1513 if (m_nodeUnderMouse && (!m_lastNodeUnderMouse || m_lastNodeUnderMouse-> document() != m_frame->document())) { 1510 if (m_nodeUnderMouse && (!lastNodeUnderMouse || lastNodeUnderMouse->document () != m_frame->document())) {
1514 // The mouse has moved between frames. 1511 // The mouse has moved between frames.
1515 if (LocalFrame* frame = m_nodeUnderMouse->document().frame()) { 1512 if (LocalFrame* frame = m_nodeUnderMouse->document().frame()) {
1516 if (FrameView* frameView = frame->view()) 1513 if (FrameView* frameView = frame->view())
1517 frameView->mouseEnteredContentArea(); 1514 frameView->mouseEnteredContentArea();
1518 }
1519 } else if (page && (layerForNodeUnderMouse && (!layerForLastNode || laye rForNodeUnderMouse != layerForLastNode))) {
1520 // The mouse has moved between layers.
1521 if (ScrollableArea* scrollableAreaForNodeUnderMouse = associatedScro llableArea(layerForNodeUnderMouse))
1522 scrollableAreaForNodeUnderMouse->mouseEnteredContentArea();
1523 } 1515 }
1516 } else if (page && (layerForNodeUnderMouse && (!layerForLastNode || layerFor NodeUnderMouse != layerForLastNode))) {
1517 // The mouse has moved between layers.
1518 if (ScrollableArea* scrollableAreaForNodeUnderMouse = associatedScrollab leArea(layerForNodeUnderMouse))
1519 scrollableAreaForNodeUnderMouse->mouseEnteredContentArea();
1520 }
1524 1521
1525 if (m_lastNodeUnderMouse && m_lastNodeUnderMouse->document() != m_frame- >document()) { 1522 if (lastNodeUnderMouse && lastNodeUnderMouse->document() != m_frame->documen t()) {
1526 m_lastNodeUnderMouse = nullptr; 1523 lastNodeUnderMouse = nullptr;
1527 m_lastScrollbarUnderMouse = nullptr; 1524 m_lastScrollbarUnderMouse = nullptr;
1528 } 1525 }
1529 1526
1530 if (m_lastNodeUnderMouse != m_nodeUnderMouse) 1527 if (lastNodeUnderMouse != m_nodeUnderMouse)
1531 sendMouseEventsForNodeTransition(m_lastNodeUnderMouse.get(), m_nodeU nderMouse.get(), mouseEvent); 1528 sendMouseEventsForNodeTransition(lastNodeUnderMouse.get(), m_nodeUnderMo use.get(), mouseEvent);
1532
1533 m_lastNodeUnderMouse = m_nodeUnderMouse;
1534 }
1535 } 1529 }
1536 1530
1537 void EventHandler::sendMouseEventsForNodeTransition(Node* exitedNode, Node* ente redNode, const PlatformMouseEvent& mouseEvent) 1531 void EventHandler::sendMouseEventsForNodeTransition(Node* exitedNode, Node* ente redNode, const PlatformMouseEvent& mouseEvent)
1538 { 1532 {
1539 ASSERT(exitedNode != enteredNode); 1533 ASSERT(exitedNode != enteredNode);
1540 1534
1541 // First, dispatch mouseout event (which bubbles to ancestors) 1535 // First, dispatch mouseout event (which bubbles to ancestors)
1542 if (isNodeInDocument(exitedNode)) 1536 if (isNodeInDocument(exitedNode))
1543 exitedNode->dispatchMouseEvent(mouseEvent, EventTypeNames::mouseout, 0, enteredNode); 1537 exitedNode->dispatchMouseEvent(mouseEvent, EventTypeNames::mouseout, 0, enteredNode);
1544 1538
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1616 } 1610 }
1617 1611
1618 // Send mouseenter events to appropriate entered ancestors, in parent-to-chi ld order. 1612 // Send mouseenter events to appropriate entered ancestors, in parent-to-chi ld order.
1619 for (size_t i = enteredAncestorIndex; i > 0; i--) { 1613 for (size_t i = enteredAncestorIndex; i > 0; i--) {
1620 if (enteredNodeHasCapturingAncestor || enteredAncestors[i-1]->hasEventLi steners(EventTypeNames::mouseenter)) 1614 if (enteredNodeHasCapturingAncestor || enteredAncestors[i-1]->hasEventLi steners(EventTypeNames::mouseenter))
1621 enteredAncestors[i-1]->dispatchMouseEvent(mouseEvent, EventTypeNames ::mouseenter, 0, exitedNode); 1615 enteredAncestors[i-1]->dispatchMouseEvent(mouseEvent, EventTypeNames ::mouseenter, 0, exitedNode);
1622 } 1616 }
1623 } 1617 }
1624 1618
1625 // The return value means 'continue default handling.' 1619 // The return value means 'continue default handling.'
1626 // TODO(mustaq): setUnder needs a more informative name. 1620 bool EventHandler::dispatchMouseEvent(const AtomicString& eventType, Node* targe tNode, int clickCount, const PlatformMouseEvent& mouseEvent)
1627 bool EventHandler::dispatchMouseEvent(const AtomicString& eventType, Node* targe tNode, int clickCount, const PlatformMouseEvent& mouseEvent, bool setUnder)
1628 { 1621 {
1629 updateMouseEventTargetNode(targetNode, mouseEvent, setUnder); 1622 updateMouseEventTargetNode(targetNode, mouseEvent);
1630 return !m_nodeUnderMouse || m_nodeUnderMouse->dispatchMouseEvent(mouseEvent, eventType, clickCount); 1623 return !m_nodeUnderMouse || m_nodeUnderMouse->dispatchMouseEvent(mouseEvent, eventType, clickCount);
1631 } 1624 }
1632 1625
1633 // The return value means 'swallow event' (was handled), as for other handle* fu nctions. 1626 // The return value means 'swallow event' (was handled), as for other handle* fu nctions.
1634 bool EventHandler::handleMouseFocus(const MouseEventWithHitTestResults& targeted Event, InputDeviceCapabilities* sourceCapabilities) 1627 bool EventHandler::handleMouseFocus(const MouseEventWithHitTestResults& targeted Event, InputDeviceCapabilities* sourceCapabilities)
1635 { 1628 {
1636 const PlatformMouseEvent& mouseEvent = targetedEvent.event(); 1629 const PlatformMouseEvent& mouseEvent = targetedEvent.event();
1637 1630
1638 // If clicking on a frame scrollbar, do not mess up with content focus. 1631 // If clicking on a frame scrollbar, do not mess up with content focus.
1639 if (FrameView* view = m_frame->view()) { 1632 if (FrameView* view = m_frame->view()) {
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
1998 1991
1999 // We use the adjusted position so the application isn't surprised to see a event with 1992 // We use the adjusted position so the application isn't surprised to see a event with
2000 // co-ordinates outside the target's bounds. 1993 // co-ordinates outside the target's bounds.
2001 IntPoint adjustedPoint = frameView->rootFrameToContents(gestureEvent.positio n()); 1994 IntPoint adjustedPoint = frameView->rootFrameToContents(gestureEvent.positio n());
2002 1995
2003 unsigned modifiers = gestureEvent.modifiers(); 1996 unsigned modifiers = gestureEvent.modifiers();
2004 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa lPosition(), 1997 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa lPosition(),
2005 NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0, 1998 NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0,
2006 static_cast<PlatformEvent::Modifiers>(modifiers), 1999 static_cast<PlatformEvent::Modifiers>(modifiers),
2007 PlatformMouseEvent::FromTouch, gestureEvent.timestamp()); 2000 PlatformMouseEvent::FromTouch, gestureEvent.timestamp());
2008 dispatchMouseEvent(EventTypeNames::mousemove, currentHitTest.innerNode(), 0, fakeMouseMove, true); 2001 dispatchMouseEvent(EventTypeNames::mousemove, currentHitTest.innerNode(), 0, fakeMouseMove);
2009 2002
2010 // Do a new hit-test in case the mousemove event changed the DOM. 2003 // Do a new hit-test in case the mousemove event changed the DOM.
2011 // Note that if the original hit test wasn't over an element (eg. was over a scrollbar) we 2004 // Note that if the original hit test wasn't over an element (eg. was over a scrollbar) we
2012 // don't want to re-hit-test because it may be in the wrong frame (and there 's no way the page 2005 // don't want to re-hit-test because it may be in the wrong frame (and there 's no way the page
2013 // could have seen the event anyway). 2006 // could have seen the event anyway).
2014 // Also note that the position of the frame may have changed, so we need to recompute the content 2007 // Also note that the position of the frame may have changed, so we need to recompute the content
2015 // co-ordinates (updating layout/style as hitTestResultAtPoint normally woul d). 2008 // co-ordinates (updating layout/style as hitTestResultAtPoint normally woul d).
2016 // FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug. com/398920 2009 // FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug. com/398920
2017 if (currentHitTest.innerNode()) { 2010 if (currentHitTest.innerNode()) {
2018 LocalFrame* mainFrame = m_frame->localFrameRoot(); 2011 LocalFrame* mainFrame = m_frame->localFrameRoot();
2019 if (mainFrame && mainFrame->view()) 2012 if (mainFrame && mainFrame->view())
2020 mainFrame->view()->updateAllLifecyclePhases(); 2013 mainFrame->view()->updateAllLifecyclePhases();
2021 adjustedPoint = frameView->rootFrameToContents(gestureEvent.position()); 2014 adjustedPoint = frameView->rootFrameToContents(gestureEvent.position());
2022 currentHitTest = hitTestResultInFrame(m_frame, adjustedPoint, hitType); 2015 currentHitTest = hitTestResultInFrame(m_frame, adjustedPoint, hitType);
2023 } 2016 }
2024 m_clickNode = currentHitTest.innerNode(); 2017 m_clickNode = currentHitTest.innerNode();
2025 2018
2026 // Capture data for showUnhandledTapUIIfNeeded. 2019 // Capture data for showUnhandledTapUIIfNeeded.
2027 RefPtrWillBeRawPtr<Node> tappedNode = m_clickNode; 2020 RefPtrWillBeRawPtr<Node> tappedNode = m_clickNode;
2028 IntPoint tappedPosition = gestureEvent.position(); 2021 IntPoint tappedPosition = gestureEvent.position();
2029 2022
2030 if (m_clickNode && m_clickNode->isTextNode()) 2023 if (m_clickNode && m_clickNode->isTextNode())
2031 m_clickNode = ComposedTreeTraversal::parent(*m_clickNode); 2024 m_clickNode = ComposedTreeTraversal::parent(*m_clickNode);
2032 2025
2033 PlatformMouseEvent fakeMouseDown(gestureEvent.position(), gestureEvent.globa lPosition(), 2026 PlatformMouseEvent fakeMouseDown(gestureEvent.position(), gestureEvent.globa lPosition(),
2034 LeftButton, PlatformEvent::MousePressed, gestureEvent.tapCount(), 2027 LeftButton, PlatformEvent::MousePressed, gestureEvent.tapCount(),
2035 static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::LeftBut tonDown), 2028 static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::LeftBut tonDown),
2036 PlatformMouseEvent::FromTouch, gestureEvent.timestamp()); 2029 PlatformMouseEvent::FromTouch, gestureEvent.timestamp());
2037 bool swallowMouseDownEvent = !dispatchMouseEvent(EventTypeNames::mousedown, currentHitTest.innerNode(), gestureEvent.tapCount(), fakeMouseDown, true); 2030 bool swallowMouseDownEvent = !dispatchMouseEvent(EventTypeNames::mousedown, currentHitTest.innerNode(), gestureEvent.tapCount(), fakeMouseDown);
2038 selectionController().initializeSelectionState(); 2031 selectionController().initializeSelectionState();
2039 if (!swallowMouseDownEvent) 2032 if (!swallowMouseDownEvent)
2040 swallowMouseDownEvent = handleMouseFocus(MouseEventWithHitTestResults(fa keMouseDown, currentHitTest), InputDeviceCapabilities::firesTouchEventsSourceCap abilities()); 2033 swallowMouseDownEvent = handleMouseFocus(MouseEventWithHitTestResults(fa keMouseDown, currentHitTest), InputDeviceCapabilities::firesTouchEventsSourceCap abilities());
2041 if (!swallowMouseDownEvent) 2034 if (!swallowMouseDownEvent)
2042 swallowMouseDownEvent = handleMousePressEvent(MouseEventWithHitTestResul ts(fakeMouseDown, currentHitTest)); 2035 swallowMouseDownEvent = handleMousePressEvent(MouseEventWithHitTestResul ts(fakeMouseDown, currentHitTest));
2043 2036
2044 if (currentHitTest.innerNode()) { 2037 if (currentHitTest.innerNode()) {
2045 ASSERT(gestureEvent.type() == PlatformEvent::GestureTap); 2038 ASSERT(gestureEvent.type() == PlatformEvent::GestureTap);
2046 HitTestResult result = currentHitTest; 2039 HitTestResult result = currentHitTest;
2047 result.setToShadowHostIfInUserAgentShadowRoot(); 2040 result.setToShadowHostIfInUserAgentShadowRoot();
2048 m_frame->chromeClient().onMouseDown(result.innerNode()); 2041 m_frame->chromeClient().onMouseDown(result.innerNode());
2049 } 2042 }
2050 2043
2051 // FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug. com/398920 2044 // FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug. com/398920
2052 if (currentHitTest.innerNode()) { 2045 if (currentHitTest.innerNode()) {
2053 LocalFrame* mainFrame = m_frame->localFrameRoot(); 2046 LocalFrame* mainFrame = m_frame->localFrameRoot();
2054 if (mainFrame && mainFrame->view()) 2047 if (mainFrame && mainFrame->view())
2055 mainFrame->view()->updateAllLifecyclePhases(); 2048 mainFrame->view()->updateAllLifecyclePhases();
2056 adjustedPoint = frameView->rootFrameToContents(gestureEvent.position()); 2049 adjustedPoint = frameView->rootFrameToContents(gestureEvent.position());
2057 currentHitTest = hitTestResultInFrame(m_frame, adjustedPoint, hitType); 2050 currentHitTest = hitTestResultInFrame(m_frame, adjustedPoint, hitType);
2058 } 2051 }
2059 PlatformMouseEvent fakeMouseUp(gestureEvent.position(), gestureEvent.globalP osition(), 2052 PlatformMouseEvent fakeMouseUp(gestureEvent.position(), gestureEvent.globalP osition(),
2060 LeftButton, PlatformEvent::MouseReleased, gestureEvent.tapCount(), 2053 LeftButton, PlatformEvent::MouseReleased, gestureEvent.tapCount(),
2061 static_cast<PlatformEvent::Modifiers>(modifiers), 2054 static_cast<PlatformEvent::Modifiers>(modifiers),
2062 PlatformMouseEvent::FromTouch, gestureEvent.timestamp()); 2055 PlatformMouseEvent::FromTouch, gestureEvent.timestamp());
2063 bool swallowMouseUpEvent = !dispatchMouseEvent(EventTypeNames::mouseup, curr entHitTest.innerNode(), gestureEvent.tapCount(), fakeMouseUp, false); 2056 bool swallowMouseUpEvent = !dispatchMouseEvent(EventTypeNames::mouseup, curr entHitTest.innerNode(), gestureEvent.tapCount(), fakeMouseUp);
2064 2057
2065 bool swallowClickEvent = false; 2058 bool swallowClickEvent = false;
2066 if (m_clickNode) { 2059 if (m_clickNode) {
2067 if (currentHitTest.innerNode()) { 2060 if (currentHitTest.innerNode()) {
2068 // Updates distribution because a mouseup (or mousedown) event liste ner can make the 2061 // Updates distribution because a mouseup (or mousedown) event liste ner can make the
2069 // tree dirty at dispatchMouseEvent() invocation above. 2062 // tree dirty at dispatchMouseEvent() invocation above.
2070 // Unless distribution is updated, commonAncestor would hit ASSERT. 2063 // Unless distribution is updated, commonAncestor would hit ASSERT.
2071 // Both m_clickNode and currentHitTest.innerNode()) don't need to be updated 2064 // Both m_clickNode and currentHitTest.innerNode()) don't need to be updated
2072 // because commonAncestor() will exit early if their documents are d ifferent. 2065 // because commonAncestor() will exit early if their documents are d ifferent.
2073 m_clickNode->updateDistribution(); 2066 m_clickNode->updateDistribution();
2074 Node* clickTargetNode = currentHitTest.innerNode()->commonAncestor(* m_clickNode, parentForClickEvent); 2067 Node* clickTargetNode = currentHitTest.innerNode()->commonAncestor(* m_clickNode, parentForClickEvent);
2075 swallowClickEvent = !dispatchMouseEvent(EventTypeNames::click, click TargetNode, gestureEvent.tapCount(), fakeMouseUp, true); 2068 swallowClickEvent = !dispatchMouseEvent(EventTypeNames::click, click TargetNode, gestureEvent.tapCount(), fakeMouseUp);
2076 } 2069 }
2077 m_clickNode = nullptr; 2070 m_clickNode = nullptr;
2078 } 2071 }
2079 2072
2080 if (!swallowMouseUpEvent) 2073 if (!swallowMouseUpEvent)
2081 swallowMouseUpEvent = handleMouseReleaseEvent(MouseEventWithHitTestResul ts(fakeMouseUp, currentHitTest)); 2074 swallowMouseUpEvent = handleMouseReleaseEvent(MouseEventWithHitTestResul ts(fakeMouseUp, currentHitTest));
2082 2075
2083 bool swallowed = swallowMouseDownEvent | swallowMouseUpEvent | swallowClickE vent; 2076 bool swallowed = swallowMouseDownEvent | swallowMouseUpEvent | swallowClickE vent;
2084 if (!swallowed && tappedNode && m_frame->page()) { 2077 if (!swallowed && tappedNode && m_frame->page()) {
2085 bool domTreeChanged = preDispatchDomTreeVersion != m_frame->document()-> domTreeVersion(); 2078 bool domTreeChanged = preDispatchDomTreeVersion != m_frame->document()-> domTreeVersion();
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
2517 enteredFrameChain.append(enteredFrameInDocument); 2510 enteredFrameChain.append(enteredFrameInDocument);
2518 Frame* parentFrame = enteredFrameInDocument->tree().parent(); 2511 Frame* parentFrame = enteredFrameInDocument->tree().parent();
2519 enteredFrameInDocument = parentFrame && parentFrame->isLocalFrame() ? to LocalFrame(parentFrame) : nullptr; 2512 enteredFrameInDocument = parentFrame && parentFrame->isLocalFrame() ? to LocalFrame(parentFrame) : nullptr;
2520 } 2513 }
2521 2514
2522 size_t indexEnteredFrameChain = enteredFrameChain.size(); 2515 size_t indexEnteredFrameChain = enteredFrameChain.size();
2523 LocalFrame* exitedFrameInDocument = m_frame; 2516 LocalFrame* exitedFrameInDocument = m_frame;
2524 WillBeHeapVector<LocalFrame*> exitedFrameChain; 2517 WillBeHeapVector<LocalFrame*> exitedFrameChain;
2525 // Insert the frame from the disagreement between last frames and entered fr ames 2518 // Insert the frame from the disagreement between last frames and entered fr ames
2526 while (exitedFrameInDocument) { 2519 while (exitedFrameInDocument) {
2527 Node* lastNodeUnderTap = exitedFrameInDocument->eventHandler().m_lastNod eUnderMouse.get(); 2520 Node* lastNodeUnderTap = exitedFrameInDocument->eventHandler().m_nodeUnd erMouse.get();
2528 if (!lastNodeUnderTap) 2521 if (!lastNodeUnderTap)
2529 break; 2522 break;
2530 2523
2531 LocalFrame* nextExitedFrameInDocument = nullptr; 2524 LocalFrame* nextExitedFrameInDocument = nullptr;
2532 if (lastNodeUnderTap->isFrameOwnerElement()) { 2525 if (lastNodeUnderTap->isFrameOwnerElement()) {
2533 HTMLFrameOwnerElement* owner = toHTMLFrameOwnerElement(lastNodeUnder Tap); 2526 HTMLFrameOwnerElement* owner = toHTMLFrameOwnerElement(lastNodeUnder Tap);
2534 if (owner->contentFrame() && owner->contentFrame()->isLocalFrame()) 2527 if (owner->contentFrame() && owner->contentFrame()->isLocalFrame())
2535 nextExitedFrameInDocument = toLocalFrame(owner->contentFrame()); 2528 nextExitedFrameInDocument = toLocalFrame(owner->contentFrame());
2536 } 2529 }
2537 2530
(...skipping 13 matching lines...) Expand all
2551 unsigned modifiers = gestureEvent.modifiers(); 2544 unsigned modifiers = gestureEvent.modifiers();
2552 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa lPosition(), 2545 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa lPosition(),
2553 NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0, 2546 NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0,
2554 static_cast<PlatformEvent::Modifiers>(modifiers), 2547 static_cast<PlatformEvent::Modifiers>(modifiers),
2555 PlatformMouseEvent::FromTouch, gestureEvent.timestamp()); 2548 PlatformMouseEvent::FromTouch, gestureEvent.timestamp());
2556 2549
2557 // Update the mouseout/mouseleave event 2550 // Update the mouseout/mouseleave event
2558 size_t indexExitedFrameChain = exitedFrameChain.size(); 2551 size_t indexExitedFrameChain = exitedFrameChain.size();
2559 while (indexExitedFrameChain) { 2552 while (indexExitedFrameChain) {
2560 LocalFrame* leaveFrame = exitedFrameChain[--indexExitedFrameChain]; 2553 LocalFrame* leaveFrame = exitedFrameChain[--indexExitedFrameChain];
2561 leaveFrame->eventHandler().updateMouseEventTargetNode(nullptr, fakeMouse Move, true); 2554 leaveFrame->eventHandler().updateMouseEventTargetNode(nullptr, fakeMouse Move);
2562 } 2555 }
2563 2556
2564 // update the mouseover/mouseenter event 2557 // update the mouseover/mouseenter event
2565 while (indexEnteredFrameChain) { 2558 while (indexEnteredFrameChain) {
2566 Frame* parentFrame = enteredFrameChain[--indexEnteredFrameChain]->tree() .parent(); 2559 Frame* parentFrame = enteredFrameChain[--indexEnteredFrameChain]->tree() .parent();
2567 if (parentFrame && parentFrame->isLocalFrame()) 2560 if (parentFrame && parentFrame->isLocalFrame())
2568 toLocalFrame(parentFrame)->eventHandler().updateMouseEventTargetNode (toHTMLFrameOwnerElement(enteredFrameChain[indexEnteredFrameChain]->owner()), fa keMouseMove, true); 2561 toLocalFrame(parentFrame)->eventHandler().updateMouseEventTargetNode (toHTMLFrameOwnerElement(enteredFrameChain[indexEnteredFrameChain]->owner()), fa keMouseMove);
2569 } 2562 }
2570 } 2563 }
2571 2564
2572 GestureEventWithHitTestResults EventHandler::targetGestureEvent(const PlatformGe stureEvent& gestureEvent, bool readOnly) 2565 GestureEventWithHitTestResults EventHandler::targetGestureEvent(const PlatformGe stureEvent& gestureEvent, bool readOnly)
2573 { 2566 {
2574 TRACE_EVENT0("input", "EventHandler::targetGestureEvent"); 2567 TRACE_EVENT0("input", "EventHandler::targetGestureEvent");
2575 2568
2576 ASSERT(m_frame == m_frame->localFrameRoot()); 2569 ASSERT(m_frame == m_frame->localFrameRoot());
2577 // Scrolling events get hit tested per frame (like wheel events do). 2570 // Scrolling events get hit tested per frame (like wheel events do).
2578 ASSERT(!gestureEvent.isScrollEvent()); 2571 ASSERT(!gestureEvent.isScrollEvent());
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
2711 2704
2712 // Clear mouse press state to avoid initiating a drag while context menu is up. 2705 // Clear mouse press state to avoid initiating a drag while context menu is up.
2713 m_mousePressed = false; 2706 m_mousePressed = false;
2714 LayoutPoint positionInContents = v->rootFrameToContents(event.position()); 2707 LayoutPoint positionInContents = v->rootFrameToContents(event.position());
2715 HitTestRequest request(HitTestRequest::Active); 2708 HitTestRequest request(HitTestRequest::Active);
2716 MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(re quest, positionInContents, event); 2709 MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(re quest, positionInContents, event);
2717 2710
2718 selectionController().sendContextMenuEvent(mev, positionInContents); 2711 selectionController().sendContextMenuEvent(mev, positionInContents);
2719 2712
2720 Node* targetNode = overrideTargetNode ? overrideTargetNode : mev.innerNode() ; 2713 Node* targetNode = overrideTargetNode ? overrideTargetNode : mev.innerNode() ;
2721 return !dispatchMouseEvent(EventTypeNames::contextmenu, targetNode, 0, event , false); 2714 return !dispatchMouseEvent(EventTypeNames::contextmenu, targetNode, 0, event );
2722 } 2715 }
2723 2716
2724 bool EventHandler::sendContextMenuEventForKey(Element* overrideTargetElement) 2717 bool EventHandler::sendContextMenuEventForKey(Element* overrideTargetElement)
2725 { 2718 {
2726 FrameView* view = m_frame->view(); 2719 FrameView* view = m_frame->view();
2727 if (!view) 2720 if (!view)
2728 return false; 2721 return false;
2729 2722
2730 Document* doc = m_frame->document(); 2723 Document* doc = m_frame->document();
2731 if (!doc) 2724 if (!doc)
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
2797 bool EventHandler::sendContextMenuEventForGesture(const GestureEventWithHitTestR esults& targetedEvent) 2790 bool EventHandler::sendContextMenuEventForGesture(const GestureEventWithHitTestR esults& targetedEvent)
2798 { 2791 {
2799 const PlatformGestureEvent& gestureEvent = targetedEvent.event(); 2792 const PlatformGestureEvent& gestureEvent = targetedEvent.event();
2800 unsigned modifiers = gestureEvent.modifiers(); 2793 unsigned modifiers = gestureEvent.modifiers();
2801 2794
2802 // Send MouseMoved event prior to handling (https://crbug.com/485290). 2795 // Send MouseMoved event prior to handling (https://crbug.com/485290).
2803 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa lPosition(), 2796 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa lPosition(),
2804 NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0, 2797 NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0,
2805 static_cast<PlatformEvent::Modifiers>(modifiers), 2798 static_cast<PlatformEvent::Modifiers>(modifiers),
2806 PlatformMouseEvent::FromTouch, gestureEvent.timestamp()); 2799 PlatformMouseEvent::FromTouch, gestureEvent.timestamp());
2807 dispatchMouseEvent(EventTypeNames::mousemove, targetedEvent.hitTestResult(). innerNode(), 0, fakeMouseMove, true); 2800 dispatchMouseEvent(EventTypeNames::mousemove, targetedEvent.hitTestResult(). innerNode(), 0, fakeMouseMove);
2808 2801
2809 PlatformEvent::Type eventType = PlatformEvent::MousePressed; 2802 PlatformEvent::Type eventType = PlatformEvent::MousePressed;
2810 2803
2811 if (m_frame->settings()->showContextMenuOnMouseUp()) 2804 if (m_frame->settings()->showContextMenuOnMouseUp())
2812 eventType = PlatformEvent::MouseReleased; 2805 eventType = PlatformEvent::MouseReleased;
2813 else 2806 else
2814 modifiers |= PlatformEvent::RightButtonDown; 2807 modifiers |= PlatformEvent::RightButtonDown;
2815 2808
2816 PlatformMouseEvent mouseEvent(targetedEvent.event().position(), targetedEven t.event().globalPosition(), RightButton, eventType, 1, 2809 PlatformMouseEvent mouseEvent(targetedEvent.event().position(), targetedEven t.event().globalPosition(), RightButton, eventType, 1,
2817 static_cast<PlatformEvent::Modifiers>(modifiers), 2810 static_cast<PlatformEvent::Modifiers>(modifiers),
(...skipping 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after
3996 unsigned EventHandler::accessKeyModifiers() 3989 unsigned EventHandler::accessKeyModifiers()
3997 { 3990 {
3998 #if OS(MACOSX) 3991 #if OS(MACOSX)
3999 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; 3992 return PlatformEvent::CtrlKey | PlatformEvent::AltKey;
4000 #else 3993 #else
4001 return PlatformEvent::AltKey; 3994 return PlatformEvent::AltKey;
4002 #endif 3995 #endif
4003 } 3996 }
4004 3997
4005 } // namespace blink 3998 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/input/EventHandler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698