| 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 271 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 282     , m_svgPan(false) | 282     , m_svgPan(false) | 
| 283     , m_resizeScrollableArea(0) | 283     , m_resizeScrollableArea(0) | 
| 284     , m_eventHandlerWillResetCapturingMouseEventsNode(0) | 284     , m_eventHandlerWillResetCapturingMouseEventsNode(0) | 
| 285     , m_clickCount(0) | 285     , m_clickCount(0) | 
| 286     , m_shouldOnlyFireDragOverEvent(false) | 286     , m_shouldOnlyFireDragOverEvent(false) | 
| 287     , m_mousePositionIsUnknown(true) | 287     , m_mousePositionIsUnknown(true) | 
| 288     , m_mouseDownTimestamp(0) | 288     , m_mouseDownTimestamp(0) | 
| 289     , m_widgetIsLatched(false) | 289     , m_widgetIsLatched(false) | 
| 290     , m_originatingTouchPointTargetKey(0) | 290     , m_originatingTouchPointTargetKey(0) | 
| 291     , m_touchPressed(false) | 291     , m_touchPressed(false) | 
| 292     , m_scrollGestureHandlingNode(0) | 292     , m_scrollGestureHandlingNode(nullptr) | 
| 293     , m_lastHitTestResultOverWidget(false) | 293     , m_lastHitTestResultOverWidget(false) | 
| 294     , m_maxMouseMovedDuration(0) | 294     , m_maxMouseMovedDuration(0) | 
| 295     , m_baseEventType(PlatformEvent::NoType) | 295     , m_baseEventType(PlatformEvent::NoType) | 
| 296     , m_didStartDrag(false) | 296     , m_didStartDrag(false) | 
| 297     , m_longTapShouldInvokeContextMenu(false) | 297     , m_longTapShouldInvokeContextMenu(false) | 
| 298     , m_syntheticPageScaleFactor(0) | 298     , m_syntheticPageScaleFactor(0) | 
| 299     , m_activeIntervalTimer(this, &EventHandler::activeIntervalTimerFired) | 299     , m_activeIntervalTimer(this, &EventHandler::activeIntervalTimerFired) | 
| 300     , m_lastShowPressTimestamp(0) | 300     , m_lastShowPressTimestamp(0) | 
| 301 { | 301 { | 
| 302 } | 302 } | 
| 303 | 303 | 
| 304 EventHandler::~EventHandler() | 304 EventHandler::~EventHandler() | 
| 305 { | 305 { | 
| 306     ASSERT(!m_fakeMouseMoveEventTimer.isActive()); | 306     ASSERT(!m_fakeMouseMoveEventTimer.isActive()); | 
| 307 } | 307 } | 
| 308 | 308 | 
| 309 DragState& EventHandler::dragState() | 309 DragState& EventHandler::dragState() | 
| 310 { | 310 { | 
| 311     DEFINE_STATIC_LOCAL(DragState, state, ()); | 311     DEFINE_STATIC_LOCAL(DragState, state, ()); | 
| 312     return state; | 312     return state; | 
| 313 } | 313 } | 
| 314 | 314 | 
| 315 void EventHandler::clear() | 315 void EventHandler::clear() | 
| 316 { | 316 { | 
| 317     m_hoverTimer.stop(); | 317     m_hoverTimer.stop(); | 
| 318     m_cursorUpdateTimer.stop(); | 318     m_cursorUpdateTimer.stop(); | 
| 319     m_fakeMouseMoveEventTimer.stop(); | 319     m_fakeMouseMoveEventTimer.stop(); | 
| 320     m_activeIntervalTimer.stop(); | 320     m_activeIntervalTimer.stop(); | 
| 321     m_resizeScrollableArea = 0; | 321     m_resizeScrollableArea = 0; | 
| 322     m_nodeUnderMouse = 0; | 322     m_nodeUnderMouse = nullptr; | 
| 323     m_lastNodeUnderMouse = 0; | 323     m_lastNodeUnderMouse = nullptr; | 
| 324     m_instanceUnderMouse = 0; | 324     m_instanceUnderMouse = nullptr; | 
| 325     m_lastInstanceUnderMouse = 0; | 325     m_lastInstanceUnderMouse = nullptr; | 
| 326     m_lastMouseMoveEventSubframe = 0; | 326     m_lastMouseMoveEventSubframe = nullptr; | 
| 327     m_lastScrollbarUnderMouse = 0; | 327     m_lastScrollbarUnderMouse = nullptr; | 
| 328     m_clickCount = 0; | 328     m_clickCount = 0; | 
| 329     m_clickNode = 0; | 329     m_clickNode = nullptr; | 
| 330     m_frameSetBeingResized = 0; | 330     m_frameSetBeingResized = nullptr; | 
| 331     m_dragTarget = 0; | 331     m_dragTarget = nullptr; | 
| 332     m_shouldOnlyFireDragOverEvent = false; | 332     m_shouldOnlyFireDragOverEvent = false; | 
| 333     m_mousePositionIsUnknown = true; | 333     m_mousePositionIsUnknown = true; | 
| 334     m_lastKnownMousePosition = IntPoint(); | 334     m_lastKnownMousePosition = IntPoint(); | 
| 335     m_lastKnownMouseGlobalPosition = IntPoint(); | 335     m_lastKnownMouseGlobalPosition = IntPoint(); | 
| 336     m_lastMouseDownUserGestureToken.clear(); | 336     m_lastMouseDownUserGestureToken.clear(); | 
| 337     m_mousePressNode = 0; | 337     m_mousePressNode = nullptr; | 
| 338     m_mousePressed = false; | 338     m_mousePressed = false; | 
| 339     m_capturesDragging = false; | 339     m_capturesDragging = false; | 
| 340     m_capturingMouseEventsNode = 0; | 340     m_capturingMouseEventsNode = nullptr; | 
| 341     m_latchedWheelEventNode = 0; | 341     m_latchedWheelEventNode = nullptr; | 
| 342     m_previousWheelScrolledNode = 0; | 342     m_previousWheelScrolledNode = nullptr; | 
| 343     m_originatingTouchPointTargets.clear(); | 343     m_originatingTouchPointTargets.clear(); | 
| 344     m_originatingTouchPointDocument.clear(); | 344     m_originatingTouchPointDocument.clear(); | 
| 345     m_originatingTouchPointTargetKey = 0; | 345     m_originatingTouchPointTargetKey = 0; | 
| 346     m_scrollGestureHandlingNode = 0; | 346     m_scrollGestureHandlingNode = nullptr; | 
| 347     m_lastHitTestResultOverWidget = false; | 347     m_lastHitTestResultOverWidget = false; | 
| 348     m_previousGestureScrolledNode = 0; | 348     m_previousGestureScrolledNode = nullptr; | 
| 349     m_scrollbarHandlingScrollGesture = 0; | 349     m_scrollbarHandlingScrollGesture = nullptr; | 
| 350     m_maxMouseMovedDuration = 0; | 350     m_maxMouseMovedDuration = 0; | 
| 351     m_baseEventType = PlatformEvent::NoType; | 351     m_baseEventType = PlatformEvent::NoType; | 
| 352     m_didStartDrag = false; | 352     m_didStartDrag = false; | 
| 353     m_touchPressed = false; | 353     m_touchPressed = false; | 
| 354     m_mouseDownMayStartSelect = false; | 354     m_mouseDownMayStartSelect = false; | 
| 355     m_mouseDownMayStartDrag = false; | 355     m_mouseDownMayStartDrag = false; | 
| 356     m_lastShowPressTimestamp = 0; | 356     m_lastShowPressTimestamp = 0; | 
| 357     m_lastDeferredTapElement = 0; | 357     m_lastDeferredTapElement = nullptr; | 
| 358 } | 358 } | 
| 359 | 359 | 
| 360 void EventHandler::nodeWillBeRemoved(Node& nodeToBeRemoved) | 360 void EventHandler::nodeWillBeRemoved(Node& nodeToBeRemoved) | 
| 361 { | 361 { | 
| 362     if (!nodeToBeRemoved.containsIncludingShadowDOM(m_clickNode.get())) | 362     if (!nodeToBeRemoved.containsIncludingShadowDOM(m_clickNode.get())) | 
| 363         return; | 363         return; | 
| 364     if (nodeToBeRemoved.isInShadowTree()) { | 364     if (nodeToBeRemoved.isInShadowTree()) { | 
| 365         m_clickNode = nodeToBeRemoved.parentOrShadowHostNode(); | 365         m_clickNode = nodeToBeRemoved.parentOrShadowHostNode(); | 
| 366     } else { | 366     } else { | 
| 367         // We don't dispatch click events if the mousedown node is removed | 367         // We don't dispatch click events if the mousedown node is removed | 
| 368         // before a mouseup event. It is compatible with IE and Firefox. | 368         // before a mouseup event. It is compatible with IE and Firefox. | 
| 369         m_clickNode = 0; | 369         m_clickNode = nullptr; | 
| 370     } | 370     } | 
| 371 } | 371 } | 
| 372 | 372 | 
| 373 static void setSelectionIfNeeded(FrameSelection& selection, const VisibleSelecti
      on& newSelection) | 373 static void setSelectionIfNeeded(FrameSelection& selection, const VisibleSelecti
      on& newSelection) | 
| 374 { | 374 { | 
| 375     if (selection.selection() != newSelection) | 375     if (selection.selection() != newSelection) | 
| 376         selection.setSelection(newSelection); | 376         selection.setSelection(newSelection); | 
| 377 } | 377 } | 
| 378 | 378 | 
| 379 static inline bool dispatchSelectStart(Node* node) | 379 static inline bool dispatchSelectStart(Node* node) | 
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 607 | 607 | 
| 608     if (!node->canStartSelection()) | 608     if (!node->canStartSelection()) | 
| 609         return false; | 609         return false; | 
| 610 | 610 | 
| 611     return true; | 611     return true; | 
| 612 } | 612 } | 
| 613 | 613 | 
| 614 bool EventHandler::handleMousePressEvent(const MouseEventWithHitTestResults& eve
      nt) | 614 bool EventHandler::handleMousePressEvent(const MouseEventWithHitTestResults& eve
      nt) | 
| 615 { | 615 { | 
| 616     // Reset drag state. | 616     // Reset drag state. | 
| 617     dragState().m_dragSrc = 0; | 617     dragState().m_dragSrc = nullptr; | 
| 618 | 618 | 
| 619     cancelFakeMouseMoveEvent(); | 619     cancelFakeMouseMoveEvent(); | 
| 620 | 620 | 
| 621     m_frame->document()->updateLayoutIgnorePendingStylesheets(); | 621     m_frame->document()->updateLayoutIgnorePendingStylesheets(); | 
| 622 | 622 | 
| 623     if (ScrollView* scrollView = m_frame->view()) { | 623     if (ScrollView* scrollView = m_frame->view()) { | 
| 624         if (scrollView->isPointInScrollbarCorner(event.event().position())) | 624         if (scrollView->isPointInScrollbarCorner(event.event().position())) | 
| 625             return false; | 625             return false; | 
| 626     } | 626     } | 
| 627 | 627 | 
| (...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1281 | 1281 | 
| 1282     bool defaultPrevented = dispatchSyntheticTouchEventIfEnabled(mouseEvent); | 1282     bool defaultPrevented = dispatchSyntheticTouchEventIfEnabled(mouseEvent); | 
| 1283     if (defaultPrevented) | 1283     if (defaultPrevented) | 
| 1284         return true; | 1284         return true; | 
| 1285 | 1285 | 
| 1286     UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); | 1286     UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); | 
| 1287     m_frame->tree().top()->eventHandler().m_lastMouseDownUserGestureToken = gest
      ureIndicator.currentToken(); | 1287     m_frame->tree().top()->eventHandler().m_lastMouseDownUserGestureToken = gest
      ureIndicator.currentToken(); | 
| 1288 | 1288 | 
| 1289     cancelFakeMouseMoveEvent(); | 1289     cancelFakeMouseMoveEvent(); | 
| 1290     if (m_eventHandlerWillResetCapturingMouseEventsNode) | 1290     if (m_eventHandlerWillResetCapturingMouseEventsNode) | 
| 1291         m_capturingMouseEventsNode = 0; | 1291         m_capturingMouseEventsNode = nullptr; | 
| 1292     m_mousePressed = true; | 1292     m_mousePressed = true; | 
| 1293     m_capturesDragging = true; | 1293     m_capturesDragging = true; | 
| 1294     setLastKnownMousePosition(mouseEvent); | 1294     setLastKnownMousePosition(mouseEvent); | 
| 1295     m_mouseDownTimestamp = mouseEvent.timestamp(); | 1295     m_mouseDownTimestamp = mouseEvent.timestamp(); | 
| 1296     m_mouseDownMayStartDrag = false; | 1296     m_mouseDownMayStartDrag = false; | 
| 1297     m_mouseDownMayStartSelect = false; | 1297     m_mouseDownMayStartSelect = false; | 
| 1298     m_mouseDownMayStartAutoscroll = false; | 1298     m_mouseDownMayStartAutoscroll = false; | 
| 1299     if (FrameView* view = m_frame->view()) | 1299     if (FrameView* view = m_frame->view()) | 
| 1300         m_mouseDownPos = view->windowToContents(mouseEvent.position()); | 1300         m_mouseDownPos = view->windowToContents(mouseEvent.position()); | 
| 1301     else { | 1301     else { | 
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1366     bool swallowEvent = !dispatchMouseEvent(EventTypeNames::mousedown, mev.targe
      tNode(), true, m_clickCount, mouseEvent, true); | 1366     bool swallowEvent = !dispatchMouseEvent(EventTypeNames::mousedown, mev.targe
      tNode(), true, m_clickCount, mouseEvent, true); | 
| 1367     m_capturesDragging = !swallowEvent || mev.scrollbar(); | 1367     m_capturesDragging = !swallowEvent || mev.scrollbar(); | 
| 1368 | 1368 | 
| 1369     // If the hit testing originally determined the event was in a scrollbar, re
      fetch the MouseEventWithHitTestResults | 1369     // If the hit testing originally determined the event was in a scrollbar, re
      fetch the MouseEventWithHitTestResults | 
| 1370     // in case the scrollbar widget was destroyed when the mouse event was handl
      ed. | 1370     // in case the scrollbar widget was destroyed when the mouse event was handl
      ed. | 
| 1371     if (mev.scrollbar()) { | 1371     if (mev.scrollbar()) { | 
| 1372         const bool wasLastScrollBar = mev.scrollbar() == m_lastScrollbarUnderMou
      se.get(); | 1372         const bool wasLastScrollBar = mev.scrollbar() == m_lastScrollbarUnderMou
      se.get(); | 
| 1373         HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active
       | HitTestRequest::ConfusingAndOftenMisusedDisallowShadowContent); | 1373         HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active
       | HitTestRequest::ConfusingAndOftenMisusedDisallowShadowContent); | 
| 1374         mev = m_frame->document()->prepareMouseEvent(request, documentPoint, mou
      seEvent); | 1374         mev = m_frame->document()->prepareMouseEvent(request, documentPoint, mou
      seEvent); | 
| 1375         if (wasLastScrollBar && mev.scrollbar() != m_lastScrollbarUnderMouse.get
      ()) | 1375         if (wasLastScrollBar && mev.scrollbar() != m_lastScrollbarUnderMouse.get
      ()) | 
| 1376             m_lastScrollbarUnderMouse = 0; | 1376             m_lastScrollbarUnderMouse = nullptr; | 
| 1377     } | 1377     } | 
| 1378 | 1378 | 
| 1379     if (swallowEvent) { | 1379     if (swallowEvent) { | 
| 1380         // scrollbars should get events anyway, even disabled controls might be 
      scrollable | 1380         // scrollbars should get events anyway, even disabled controls might be 
      scrollable | 
| 1381         Scrollbar* scrollbar = mev.scrollbar(); | 1381         Scrollbar* scrollbar = mev.scrollbar(); | 
| 1382 | 1382 | 
| 1383         updateLastScrollbarUnderMouse(scrollbar, true); | 1383         updateLastScrollbarUnderMouse(scrollbar, true); | 
| 1384 | 1384 | 
| 1385         if (scrollbar) | 1385         if (scrollbar) | 
| 1386             passMousePressEventToScrollbar(mev, scrollbar); | 1386             passMousePressEventToScrollbar(mev, scrollbar); | 
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1582     swallowEvent = !dispatchMouseEvent(EventTypeNames::mousemove, mev.targetNode
      (), false, 0, mouseEvent, true); | 1582     swallowEvent = !dispatchMouseEvent(EventTypeNames::mousemove, mev.targetNode
      (), false, 0, mouseEvent, true); | 
| 1583     if (!swallowEvent) | 1583     if (!swallowEvent) | 
| 1584         swallowEvent = handleMouseDraggedEvent(mev); | 1584         swallowEvent = handleMouseDraggedEvent(mev); | 
| 1585 | 1585 | 
| 1586     return swallowEvent; | 1586     return swallowEvent; | 
| 1587 } | 1587 } | 
| 1588 | 1588 | 
| 1589 void EventHandler::invalidateClick() | 1589 void EventHandler::invalidateClick() | 
| 1590 { | 1590 { | 
| 1591     m_clickCount = 0; | 1591     m_clickCount = 0; | 
| 1592     m_clickNode = 0; | 1592     m_clickNode = nullptr; | 
| 1593 } | 1593 } | 
| 1594 | 1594 | 
| 1595 static Node* parentForClickEvent(const Node& node) | 1595 static Node* parentForClickEvent(const Node& node) | 
| 1596 { | 1596 { | 
| 1597     // IE doesn't dispatch click events for mousedown/mouseup events across form | 1597     // IE doesn't dispatch click events for mousedown/mouseup events across form | 
| 1598     // controls. | 1598     // controls. | 
| 1599     if (node.isHTMLElement() && toHTMLElement(node).isInteractiveContent()) | 1599     if (node.isHTMLElement() && toHTMLElement(node).isInteractiveContent()) | 
| 1600         return 0; | 1600         return 0; | 
| 1601     return node.parentOrShadowHostNode(); | 1601     return node.parentOrShadowHostNode(); | 
| 1602 } | 1602 } | 
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1643         return !dispatchMouseEvent(EventTypeNames::mouseup, m_lastNodeUnderMouse
      .get(), cancelable, m_clickCount, mouseEvent, setUnder); | 1643         return !dispatchMouseEvent(EventTypeNames::mouseup, m_lastNodeUnderMouse
      .get(), cancelable, m_clickCount, mouseEvent, setUnder); | 
| 1644     } | 1644     } | 
| 1645 | 1645 | 
| 1646     HitTestRequest::HitTestRequestType hitType = HitTestRequest::Release | HitTe
      stRequest::ConfusingAndOftenMisusedDisallowShadowContent; | 1646     HitTestRequest::HitTestRequestType hitType = HitTestRequest::Release | HitTe
      stRequest::ConfusingAndOftenMisusedDisallowShadowContent; | 
| 1647     if (mouseEvent.fromTouch()) | 1647     if (mouseEvent.fromTouch()) | 
| 1648         hitType |= HitTestRequest::ReadOnly; | 1648         hitType |= HitTestRequest::ReadOnly; | 
| 1649     HitTestRequest request(hitType); | 1649     HitTestRequest request(hitType); | 
| 1650     MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseEvent); | 1650     MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseEvent); | 
| 1651     Frame* subframe = m_capturingMouseEventsNode.get() ? subframeForTargetNode(m
      _capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); | 1651     Frame* subframe = m_capturingMouseEventsNode.get() ? subframeForTargetNode(m
      _capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); | 
| 1652     if (m_eventHandlerWillResetCapturingMouseEventsNode) | 1652     if (m_eventHandlerWillResetCapturingMouseEventsNode) | 
| 1653         m_capturingMouseEventsNode = 0; | 1653         m_capturingMouseEventsNode = nullptr; | 
| 1654     if (subframe && passMouseReleaseEventToSubframe(mev, subframe)) | 1654     if (subframe && passMouseReleaseEventToSubframe(mev, subframe)) | 
| 1655         return true; | 1655         return true; | 
| 1656 | 1656 | 
| 1657     bool swallowMouseUpEvent = !dispatchMouseEvent(EventTypeNames::mouseup, mev.
      targetNode(), true, m_clickCount, mouseEvent, false); | 1657     bool swallowMouseUpEvent = !dispatchMouseEvent(EventTypeNames::mouseup, mev.
      targetNode(), true, m_clickCount, mouseEvent, false); | 
| 1658 | 1658 | 
| 1659     bool contextMenuEvent = mouseEvent.button() == RightButton; | 1659     bool contextMenuEvent = mouseEvent.button() == RightButton; | 
| 1660 #if OS(MACOSX) | 1660 #if OS(MACOSX) | 
| 1661     // 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. | 1661     // 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. | 
| 1662     if (mouseEvent.button() == LeftButton && mouseEvent.modifiers() & PlatformEv
      ent::CtrlKey) | 1662     if (mouseEvent.button() == LeftButton && mouseEvent.modifiers() & PlatformEv
      ent::CtrlKey) | 
| 1663         contextMenuEvent = true; | 1663         contextMenuEvent = true; | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1721 | 1721 | 
| 1722     // FIXME: We might want to dispatch a dragleave even if the view is gone. | 1722     // FIXME: We might want to dispatch a dragleave even if the view is gone. | 
| 1723     if (!view) | 1723     if (!view) | 
| 1724         return false; | 1724         return false; | 
| 1725 | 1725 | 
| 1726     RefPtr<MouseEvent> me = MouseEvent::create(eventType, | 1726     RefPtr<MouseEvent> me = MouseEvent::create(eventType, | 
| 1727         true, true, m_frame->document()->domWindow(), | 1727         true, true, m_frame->document()->domWindow(), | 
| 1728         0, event.globalPosition().x(), event.globalPosition().y(), event.positio
      n().x(), event.position().y(), | 1728         0, event.globalPosition().x(), event.globalPosition().y(), event.positio
      n().x(), event.position().y(), | 
| 1729         event.movementDelta().x(), event.movementDelta().y(), | 1729         event.movementDelta().x(), event.movementDelta().y(), | 
| 1730         event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), | 1730         event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), | 
| 1731         0, 0, clipboard); | 1731         0, nullptr, clipboard); | 
| 1732 | 1732 | 
| 1733     dragTarget->dispatchEvent(me.get(), IGNORE_EXCEPTION); | 1733     dragTarget->dispatchEvent(me.get(), IGNORE_EXCEPTION); | 
| 1734     return me->defaultPrevented(); | 1734     return me->defaultPrevented(); | 
| 1735 } | 1735 } | 
| 1736 | 1736 | 
| 1737 static bool targetIsFrame(Node* target, Frame*& frame) | 1737 static bool targetIsFrame(Node* target, Frame*& frame) | 
| 1738 { | 1738 { | 
| 1739     if (!target) | 1739     if (!target) | 
| 1740         return false; | 1740         return false; | 
| 1741 | 1741 | 
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1877             preventedDefault = targetFrame->eventHandler().performDragAndDrop(ev
      ent, clipboard); | 1877             preventedDefault = targetFrame->eventHandler().performDragAndDrop(ev
      ent, clipboard); | 
| 1878     } else if (m_dragTarget.get()) | 1878     } else if (m_dragTarget.get()) | 
| 1879         preventedDefault = dispatchDragEvent(EventTypeNames::drop, m_dragTarget.
      get(), event, clipboard); | 1879         preventedDefault = dispatchDragEvent(EventTypeNames::drop, m_dragTarget.
      get(), event, clipboard); | 
| 1880     clearDragState(); | 1880     clearDragState(); | 
| 1881     return preventedDefault; | 1881     return preventedDefault; | 
| 1882 } | 1882 } | 
| 1883 | 1883 | 
| 1884 void EventHandler::clearDragState() | 1884 void EventHandler::clearDragState() | 
| 1885 { | 1885 { | 
| 1886     stopAutoscroll(); | 1886     stopAutoscroll(); | 
| 1887     m_dragTarget = 0; | 1887     m_dragTarget = nullptr; | 
| 1888     m_capturingMouseEventsNode = 0; | 1888     m_capturingMouseEventsNode = nullptr; | 
| 1889     m_shouldOnlyFireDragOverEvent = false; | 1889     m_shouldOnlyFireDragOverEvent = false; | 
| 1890 } | 1890 } | 
| 1891 | 1891 | 
| 1892 void EventHandler::setCapturingMouseEventsNode(PassRefPtr<Node> n) | 1892 void EventHandler::setCapturingMouseEventsNode(PassRefPtr<Node> n) | 
| 1893 { | 1893 { | 
| 1894     m_capturingMouseEventsNode = n; | 1894     m_capturingMouseEventsNode = n; | 
| 1895     m_eventHandlerWillResetCapturingMouseEventsNode = false; | 1895     m_eventHandlerWillResetCapturingMouseEventsNode = false; | 
| 1896 } | 1896 } | 
| 1897 | 1897 | 
| 1898 MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques
      t& request, const PlatformMouseEvent& mev) | 1898 MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques
      t& request, const PlatformMouseEvent& mev) | 
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1989                 if (FrameView* frameView = frame->view()) | 1989                 if (FrameView* frameView = frame->view()) | 
| 1990                     frameView->mouseEnteredContentArea(); | 1990                     frameView->mouseEnteredContentArea(); | 
| 1991             } | 1991             } | 
| 1992         } else if (page && (layerForNodeUnderMouse && (!layerForLastNode || laye
      rForNodeUnderMouse != layerForLastNode))) { | 1992         } else if (page && (layerForNodeUnderMouse && (!layerForLastNode || laye
      rForNodeUnderMouse != layerForLastNode))) { | 
| 1993             // The mouse has moved between layers. | 1993             // The mouse has moved between layers. | 
| 1994             if (ScrollableArea* scrollableAreaForNodeUnderMouse = associatedScro
      llableArea(layerForNodeUnderMouse)) | 1994             if (ScrollableArea* scrollableAreaForNodeUnderMouse = associatedScro
      llableArea(layerForNodeUnderMouse)) | 
| 1995                 scrollableAreaForNodeUnderMouse->mouseEnteredContentArea(); | 1995                 scrollableAreaForNodeUnderMouse->mouseEnteredContentArea(); | 
| 1996         } | 1996         } | 
| 1997 | 1997 | 
| 1998         if (m_lastNodeUnderMouse && m_lastNodeUnderMouse->document() != m_frame-
      >document()) { | 1998         if (m_lastNodeUnderMouse && m_lastNodeUnderMouse->document() != m_frame-
      >document()) { | 
| 1999             m_lastNodeUnderMouse = 0; | 1999             m_lastNodeUnderMouse = nullptr; | 
| 2000             m_lastScrollbarUnderMouse = 0; | 2000             m_lastScrollbarUnderMouse = nullptr; | 
| 2001             m_lastInstanceUnderMouse = 0; | 2001             m_lastInstanceUnderMouse = nullptr; | 
| 2002         } | 2002         } | 
| 2003 | 2003 | 
| 2004         if (m_lastNodeUnderMouse != m_nodeUnderMouse) { | 2004         if (m_lastNodeUnderMouse != m_nodeUnderMouse) { | 
| 2005             // send mouseout event to the old node | 2005             // send mouseout event to the old node | 
| 2006             if (m_lastNodeUnderMouse) | 2006             if (m_lastNodeUnderMouse) | 
| 2007                 m_lastNodeUnderMouse->dispatchMouseEvent(mouseEvent, EventTypeNa
      mes::mouseout, 0, m_nodeUnderMouse.get()); | 2007                 m_lastNodeUnderMouse->dispatchMouseEvent(mouseEvent, EventTypeNa
      mes::mouseout, 0, m_nodeUnderMouse.get()); | 
| 2008             // send mouseover event to the new node | 2008             // send mouseover event to the new node | 
| 2009             if (m_nodeUnderMouse) | 2009             if (m_nodeUnderMouse) | 
| 2010                 m_nodeUnderMouse->dispatchMouseEvent(mouseEvent, EventTypeNames:
      :mouseover, 0, m_lastNodeUnderMouse.get()); | 2010                 m_nodeUnderMouse->dispatchMouseEvent(mouseEvent, EventTypeNames:
      :mouseover, 0, m_lastNodeUnderMouse.get()); | 
| 2011         } | 2011         } | 
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2143     if (e.useLatchedEventNode()) { | 2143     if (e.useLatchedEventNode()) { | 
| 2144         if (!m_latchedWheelEventNode) { | 2144         if (!m_latchedWheelEventNode) { | 
| 2145             m_latchedWheelEventNode = node; | 2145             m_latchedWheelEventNode = node; | 
| 2146             m_widgetIsLatched = result.isOverWidget(); | 2146             m_widgetIsLatched = result.isOverWidget(); | 
| 2147         } else | 2147         } else | 
| 2148             node = m_latchedWheelEventNode.get(); | 2148             node = m_latchedWheelEventNode.get(); | 
| 2149 | 2149 | 
| 2150         isOverWidget = m_widgetIsLatched; | 2150         isOverWidget = m_widgetIsLatched; | 
| 2151     } else { | 2151     } else { | 
| 2152         if (m_latchedWheelEventNode) | 2152         if (m_latchedWheelEventNode) | 
| 2153             m_latchedWheelEventNode = 0; | 2153             m_latchedWheelEventNode = nullptr; | 
| 2154         if (m_previousWheelScrolledNode) | 2154         if (m_previousWheelScrolledNode) | 
| 2155             m_previousWheelScrolledNode = 0; | 2155             m_previousWheelScrolledNode = nullptr; | 
| 2156 | 2156 | 
| 2157         isOverWidget = result.isOverWidget(); | 2157         isOverWidget = result.isOverWidget(); | 
| 2158     } | 2158     } | 
| 2159 | 2159 | 
| 2160     // FIXME: It should not be necessary to do this mutation here. | 2160     // FIXME: It should not be necessary to do this mutation here. | 
| 2161     // Instead, the handlers should know convert vertical scrolls | 2161     // Instead, the handlers should know convert vertical scrolls | 
| 2162     // appropriately. | 2162     // appropriately. | 
| 2163     PlatformWheelEvent event = e; | 2163     PlatformWheelEvent event = e; | 
| 2164     if (m_baseEventType == PlatformEvent::NoType && shouldTurnVerticalTicksIntoH
      orizontal(result, e)) | 2164     if (m_baseEventType == PlatformEvent::NoType && shouldTurnVerticalTicksIntoH
      orizontal(result, e)) | 
| 2165         event = event.copyTurningVerticalTicksIntoHorizontalTicks(); | 2165         event = event.copyTurningVerticalTicksIntoHorizontalTicks(); | 
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2232         ScrollAnimator* animator = sa->scrollAnimator(); | 2232         ScrollAnimator* animator = sa->scrollAnimator(); | 
| 2233         if (animator) | 2233         if (animator) | 
| 2234             animator->cancelAnimations(); | 2234             animator->cancelAnimations(); | 
| 2235     } | 2235     } | 
| 2236     return false; | 2236     return false; | 
| 2237 } | 2237 } | 
| 2238 | 2238 | 
| 2239 bool EventHandler::handleGestureEvent(const PlatformGestureEvent& gestureEvent) | 2239 bool EventHandler::handleGestureEvent(const PlatformGestureEvent& gestureEvent) | 
| 2240 { | 2240 { | 
| 2241     IntPoint adjustedPoint = gestureEvent.position(); | 2241     IntPoint adjustedPoint = gestureEvent.position(); | 
| 2242     RefPtr<Frame> subframe = 0; | 2242     RefPtr<Frame> subframe = nullptr; | 
| 2243     switch (gestureEvent.type()) { | 2243     switch (gestureEvent.type()) { | 
| 2244     case PlatformEvent::GestureScrollBegin: | 2244     case PlatformEvent::GestureScrollBegin: | 
| 2245     case PlatformEvent::GestureScrollUpdate: | 2245     case PlatformEvent::GestureScrollUpdate: | 
| 2246     case PlatformEvent::GestureScrollUpdateWithoutPropagation: | 2246     case PlatformEvent::GestureScrollUpdateWithoutPropagation: | 
| 2247     case PlatformEvent::GestureScrollEnd: | 2247     case PlatformEvent::GestureScrollEnd: | 
| 2248     case PlatformEvent::GestureFlingStart: | 2248     case PlatformEvent::GestureFlingStart: | 
| 2249         // Handle directly in main frame | 2249         // Handle directly in main frame | 
| 2250         break; | 2250         break; | 
| 2251 | 2251 | 
| 2252     case PlatformEvent::GestureTap: | 2252     case PlatformEvent::GestureTap: | 
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2321             scrollbar = result.scrollbar(); | 2321             scrollbar = result.scrollbar(); | 
| 2322     } | 2322     } | 
| 2323 | 2323 | 
| 2324     if (scrollbar) { | 2324     if (scrollbar) { | 
| 2325         bool eventSwallowed = scrollbar->gestureEvent(gestureEvent); | 2325         bool eventSwallowed = scrollbar->gestureEvent(gestureEvent); | 
| 2326         if (gestureEvent.type() == PlatformEvent::GestureTapDown && eventSwallow
      ed) { | 2326         if (gestureEvent.type() == PlatformEvent::GestureTapDown && eventSwallow
      ed) { | 
| 2327             m_scrollbarHandlingScrollGesture = scrollbar; | 2327             m_scrollbarHandlingScrollGesture = scrollbar; | 
| 2328         } else if (gestureEvent.type() == PlatformEvent::GestureScrollEnd | 2328         } else if (gestureEvent.type() == PlatformEvent::GestureScrollEnd | 
| 2329             || gestureEvent.type() == PlatformEvent::GestureFlingStart | 2329             || gestureEvent.type() == PlatformEvent::GestureFlingStart | 
| 2330             || !eventSwallowed) { | 2330             || !eventSwallowed) { | 
| 2331             m_scrollbarHandlingScrollGesture = 0; | 2331             m_scrollbarHandlingScrollGesture = nullptr; | 
| 2332         } | 2332         } | 
| 2333 | 2333 | 
| 2334         if (eventSwallowed) | 2334         if (eventSwallowed) | 
| 2335             return true; | 2335             return true; | 
| 2336     } | 2336     } | 
| 2337 | 2337 | 
| 2338     if (eventTarget) { | 2338     if (eventTarget) { | 
| 2339         bool eventSwallowed = false; | 2339         bool eventSwallowed = false; | 
| 2340         if (handleScrollGestureOnResizer(eventTarget, gestureEvent)) | 2340         if (handleScrollGestureOnResizer(eventTarget, gestureEvent)) | 
| 2341             eventSwallowed = true; | 2341             eventSwallowed = true; | 
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2428         PlatformMouseEvent mouseDownEvent(adjustedPoint, gestureEvent.globalPosi
      tion(), LeftButton, PlatformEvent::MousePressed, 1, | 2428         PlatformMouseEvent mouseDownEvent(adjustedPoint, gestureEvent.globalPosi
      tion(), LeftButton, PlatformEvent::MousePressed, 1, | 
| 2429             gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey
      (), gestureEvent.metaKey(), WTF::currentTime()); | 2429             gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey
      (), gestureEvent.metaKey(), WTF::currentTime()); | 
| 2430         m_mouseDown = mouseDownEvent; | 2430         m_mouseDown = mouseDownEvent; | 
| 2431 | 2431 | 
| 2432         PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi
      tion(), LeftButton, PlatformEvent::MouseMoved, 1, | 2432         PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi
      tion(), LeftButton, PlatformEvent::MouseMoved, 1, | 
| 2433             gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey
      (), gestureEvent.metaKey(), WTF::currentTime()); | 2433             gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey
      (), gestureEvent.metaKey(), WTF::currentTime()); | 
| 2434         HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Confus
      ingAndOftenMisusedDisallowShadowContent); | 2434         HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Confus
      ingAndOftenMisusedDisallowShadowContent); | 
| 2435         MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE
      vent); | 2435         MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE
      vent); | 
| 2436         m_didStartDrag = false; | 2436         m_didStartDrag = false; | 
| 2437         m_mouseDownMayStartDrag = true; | 2437         m_mouseDownMayStartDrag = true; | 
| 2438         dragState().m_dragSrc = 0; | 2438         dragState().m_dragSrc = nullptr; | 
| 2439         m_mouseDownPos = m_frame->view()->windowToContents(mouseDragEvent.positi
      on()); | 2439         m_mouseDownPos = m_frame->view()->windowToContents(mouseDragEvent.positi
      on()); | 
| 2440         RefPtr<FrameView> protector(m_frame->view()); | 2440         RefPtr<FrameView> protector(m_frame->view()); | 
| 2441         handleDrag(mev, DontCheckDragHysteresis); | 2441         handleDrag(mev, DontCheckDragHysteresis); | 
| 2442         if (m_didStartDrag) { | 2442         if (m_didStartDrag) { | 
| 2443             m_longTapShouldInvokeContextMenu = true; | 2443             m_longTapShouldInvokeContextMenu = true; | 
| 2444             return true; | 2444             return true; | 
| 2445         } | 2445         } | 
| 2446     } | 2446     } | 
| 2447 #if OS(ANDROID) | 2447 #if OS(ANDROID) | 
| 2448     bool shouldLongPressSelectWord = true; | 2448     bool shouldLongPressSelectWord = true; | 
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2549     if (!view) | 2549     if (!view) | 
| 2550         return false; | 2550         return false; | 
| 2551 | 2551 | 
| 2552     LayoutPoint viewPoint = view->windowToContents(gestureEvent.position()); | 2552     LayoutPoint viewPoint = view->windowToContents(gestureEvent.position()); | 
| 2553     HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::ConfusingA
      ndOftenMisusedDisallowShadowContent); | 2553     HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::ConfusingA
      ndOftenMisusedDisallowShadowContent); | 
| 2554     HitTestResult result(viewPoint); | 2554     HitTestResult result(viewPoint); | 
| 2555     document->renderView()->hitTest(request, result); | 2555     document->renderView()->hitTest(request, result); | 
| 2556 | 2556 | 
| 2557     m_lastHitTestResultOverWidget = result.isOverWidget(); | 2557     m_lastHitTestResultOverWidget = result.isOverWidget(); | 
| 2558     m_scrollGestureHandlingNode = result.innerNode(); | 2558     m_scrollGestureHandlingNode = result.innerNode(); | 
| 2559     m_previousGestureScrolledNode = 0; | 2559     m_previousGestureScrolledNode = nullptr; | 
| 2560 | 2560 | 
| 2561     // If there's no renderer on the node, send the event to the nearest ancesto
      r with a renderer. | 2561     // If there's no renderer on the node, send the event to the nearest ancesto
      r with a renderer. | 
| 2562     // Needed for <option> and <optgroup> elements so we can touch scroll <selec
      t>s | 2562     // Needed for <option> and <optgroup> elements so we can touch scroll <selec
      t>s | 
| 2563     while (m_scrollGestureHandlingNode && !m_scrollGestureHandlingNode->renderer
      ()) | 2563     while (m_scrollGestureHandlingNode && !m_scrollGestureHandlingNode->renderer
      ()) | 
| 2564         m_scrollGestureHandlingNode = m_scrollGestureHandlingNode->parentOrShado
      wHostNode(); | 2564         m_scrollGestureHandlingNode = m_scrollGestureHandlingNode->parentOrShado
      wHostNode(); | 
| 2565 | 2565 | 
| 2566     if (!m_scrollGestureHandlingNode) | 2566     if (!m_scrollGestureHandlingNode) | 
| 2567         return false; | 2567         return false; | 
| 2568 | 2568 | 
| 2569     passGestureEventToWidgetIfPossible(gestureEvent, m_scrollGestureHandlingNode
      ->renderer()); | 2569     passGestureEventToWidgetIfPossible(gestureEvent, m_scrollGestureHandlingNode
      ->renderer()); | 
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2649 { | 2649 { | 
| 2650     PlatformMouseEvent mouseDown(touchAdjustedPoint, gestureEvent.globalPosition
      (), LeftButton, PlatformEvent::MousePressed, 1, | 2650     PlatformMouseEvent mouseDown(touchAdjustedPoint, gestureEvent.globalPosition
      (), LeftButton, PlatformEvent::MousePressed, 1, | 
| 2651         gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), 
      gestureEvent.metaKey(), gestureEvent.timestamp()); | 2651         gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), 
      gestureEvent.metaKey(), gestureEvent.timestamp()); | 
| 2652     HitTestRequest request(HitTestRequest::ReadOnly); | 2652     HitTestRequest request(HitTestRequest::ReadOnly); | 
| 2653     MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDown); | 2653     MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDown); | 
| 2654     return subframeForHitTestResult(mev); | 2654     return subframeForHitTestResult(mev); | 
| 2655 } | 2655 } | 
| 2656 | 2656 | 
| 2657 void EventHandler::clearGestureScrollNodes() | 2657 void EventHandler::clearGestureScrollNodes() | 
| 2658 { | 2658 { | 
| 2659     m_scrollGestureHandlingNode = 0; | 2659     m_scrollGestureHandlingNode = nullptr; | 
| 2660     m_previousGestureScrolledNode = 0; | 2660     m_previousGestureScrolledNode = nullptr; | 
| 2661 } | 2661 } | 
| 2662 | 2662 | 
| 2663 bool EventHandler::isScrollbarHandlingGestures() const | 2663 bool EventHandler::isScrollbarHandlingGestures() const | 
| 2664 { | 2664 { | 
| 2665     return m_scrollbarHandlingScrollGesture.get(); | 2665     return m_scrollbarHandlingScrollGesture.get(); | 
| 2666 } | 2666 } | 
| 2667 | 2667 | 
| 2668 bool EventHandler::shouldApplyTouchAdjustment(const PlatformGestureEvent& event)
       const | 2668 bool EventHandler::shouldApplyTouchAdjustment(const PlatformGestureEvent& event)
       const | 
| 2669 { | 2669 { | 
| 2670     if (m_frame->settings() && !m_frame->settings()->touchAdjustmentEnabled()) | 2670     if (m_frame->settings() && !m_frame->settings()->touchAdjustmentEnabled()) | 
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2999     m_activeIntervalTimer.stop(); | 2999     m_activeIntervalTimer.stop(); | 
| 3000 | 3000 | 
| 3001     if (m_frame | 3001     if (m_frame | 
| 3002         && m_frame->document() | 3002         && m_frame->document() | 
| 3003         && m_lastDeferredTapElement) { | 3003         && m_lastDeferredTapElement) { | 
| 3004         // FIXME: Enable condition when http://crbug.com/226842 lands | 3004         // FIXME: Enable condition when http://crbug.com/226842 lands | 
| 3005         // m_lastDeferredTapElement.get() == m_frame->document()->activeElement(
      ) | 3005         // m_lastDeferredTapElement.get() == m_frame->document()->activeElement(
      ) | 
| 3006         HitTestRequest request(HitTestRequest::TouchEvent | HitTestRequest::Rele
      ase); | 3006         HitTestRequest request(HitTestRequest::TouchEvent | HitTestRequest::Rele
      ase); | 
| 3007         m_frame->document()->updateHoverActiveState(request, m_lastDeferredTapEl
      ement.get()); | 3007         m_frame->document()->updateHoverActiveState(request, m_lastDeferredTapEl
      ement.get()); | 
| 3008     } | 3008     } | 
| 3009     m_lastDeferredTapElement = 0; | 3009     m_lastDeferredTapElement = nullptr; | 
| 3010 } | 3010 } | 
| 3011 | 3011 | 
| 3012 void EventHandler::notifyElementActivated() | 3012 void EventHandler::notifyElementActivated() | 
| 3013 { | 3013 { | 
| 3014     // Since another element has been set to active, stop current timer and clea
      r reference. | 3014     // Since another element has been set to active, stop current timer and clea
      r reference. | 
| 3015     if (m_activeIntervalTimer.isActive()) | 3015     if (m_activeIntervalTimer.isActive()) | 
| 3016         m_activeIntervalTimer.stop(); | 3016         m_activeIntervalTimer.stop(); | 
| 3017     m_lastDeferredTapElement = 0; | 3017     m_lastDeferredTapElement = nullptr; | 
| 3018 } | 3018 } | 
| 3019 | 3019 | 
| 3020 bool EventHandler::handleAccessKey(const PlatformKeyboardEvent& evt) | 3020 bool EventHandler::handleAccessKey(const PlatformKeyboardEvent& evt) | 
| 3021 { | 3021 { | 
| 3022     // FIXME: Ignoring the state of Shift key is what neither IE nor Firefox do. | 3022     // FIXME: Ignoring the state of Shift key is what neither IE nor Firefox do. | 
| 3023     // IE matches lower and upper case access keys regardless of Shift key state
       - but if both upper and | 3023     // IE matches lower and upper case access keys regardless of Shift key state
       - but if both upper and | 
| 3024     // lower case variants are present in a document, the correct element is mat
      ched based on Shift key state. | 3024     // lower case variants are present in a document, the correct element is mat
      ched based on Shift key state. | 
| 3025     // Firefox only matches an access key if Shift is not pressed, and does that
       case-insensitively. | 3025     // Firefox only matches an access key if Shift is not pressed, and does that
       case-insensitively. | 
| 3026     ASSERT(!(accessKeyModifiers() & PlatformEvent::ShiftKey)); | 3026     ASSERT(!(accessKeyModifiers() & PlatformEvent::ShiftKey)); | 
| 3027     if ((evt.modifiers() & ~PlatformEvent::ShiftKey) != accessKeyModifiers()) | 3027     if ((evt.modifiers() & ~PlatformEvent::ShiftKey) != accessKeyModifiers()) | 
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3232     // Send a hit test request so that RenderLayer gets a chance to update the :
      hover and :active pseudoclasses. | 3232     // Send a hit test request so that RenderLayer gets a chance to update the :
      hover and :active pseudoclasses. | 
| 3233     HitTestRequest request(HitTestRequest::Release | HitTestRequest::ConfusingAn
      dOftenMisusedDisallowShadowContent); | 3233     HitTestRequest request(HitTestRequest::Release | HitTestRequest::ConfusingAn
      dOftenMisusedDisallowShadowContent); | 
| 3234     prepareMouseEvent(request, event); | 3234     prepareMouseEvent(request, event); | 
| 3235 | 3235 | 
| 3236     if (dragState().m_dragSrc) { | 3236     if (dragState().m_dragSrc) { | 
| 3237         dragState().m_dragClipboard->setDestinationOperation(operation); | 3237         dragState().m_dragClipboard->setDestinationOperation(operation); | 
| 3238         // for now we don't care if event handler cancels default behavior, sinc
      e there is none | 3238         // for now we don't care if event handler cancels default behavior, sinc
      e there is none | 
| 3239         dispatchDragSrcEvent(EventTypeNames::dragend, event); | 3239         dispatchDragSrcEvent(EventTypeNames::dragend, event); | 
| 3240     } | 3240     } | 
| 3241     freeClipboard(); | 3241     freeClipboard(); | 
| 3242     dragState().m_dragSrc = 0; | 3242     dragState().m_dragSrc = nullptr; | 
| 3243     // In case the drag was ended due to an escape key press we need to ensure | 3243     // In case the drag was ended due to an escape key press we need to ensure | 
| 3244     // that consecutive mousemove events don't reinitiate the drag and drop. | 3244     // that consecutive mousemove events don't reinitiate the drag and drop. | 
| 3245     m_mouseDownMayStartDrag = false; | 3245     m_mouseDownMayStartDrag = false; | 
| 3246 } | 3246 } | 
| 3247 | 3247 | 
| 3248 void EventHandler::updateDragStateAfterEditDragIfNeeded(Element* rootEditableEle
      ment) | 3248 void EventHandler::updateDragStateAfterEditDragIfNeeded(Element* rootEditableEle
      ment) | 
| 3249 { | 3249 { | 
| 3250     // If inserting the dragged contents removed the drag source, we still want 
      to fire dragend at the root editble element. | 3250     // If inserting the dragged contents removed the drag source, we still want 
      to fire dragend at the root editble element. | 
| 3251     if (dragState().m_dragSrc && !dragState().m_dragSrc->inDocument()) | 3251     if (dragState().m_dragSrc && !dragState().m_dragSrc->inDocument()) | 
| 3252         dragState().m_dragSrc = rootEditableElement; | 3252         dragState().m_dragSrc = rootEditableElement; | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 3281         HitTestRequest request(HitTestRequest::ReadOnly); | 3281         HitTestRequest request(HitTestRequest::ReadOnly); | 
| 3282         HitTestResult result(m_mouseDownPos); | 3282         HitTestResult result(m_mouseDownPos); | 
| 3283         m_frame->contentRenderer()->hitTest(request, result); | 3283         m_frame->contentRenderer()->hitTest(request, result); | 
| 3284         Node* node = result.innerNode(); | 3284         Node* node = result.innerNode(); | 
| 3285         if (node) { | 3285         if (node) { | 
| 3286             DragController::SelectionDragPolicy selectionDragPolicy = event.even
      t().timestamp() - m_mouseDownTimestamp < TextDragDelay | 3286             DragController::SelectionDragPolicy selectionDragPolicy = event.even
      t().timestamp() - m_mouseDownTimestamp < TextDragDelay | 
| 3287                 ? DragController::DelayedSelectionDragResolution | 3287                 ? DragController::DelayedSelectionDragResolution | 
| 3288                 : DragController::ImmediateSelectionDragResolution; | 3288                 : DragController::ImmediateSelectionDragResolution; | 
| 3289             dragState().m_dragSrc = m_frame->page()->dragController().draggableN
      ode(m_frame, node, m_mouseDownPos, selectionDragPolicy, dragState().m_dragType); | 3289             dragState().m_dragSrc = m_frame->page()->dragController().draggableN
      ode(m_frame, node, m_mouseDownPos, selectionDragPolicy, dragState().m_dragType); | 
| 3290         } else { | 3290         } else { | 
| 3291             dragState().m_dragSrc = 0; | 3291             dragState().m_dragSrc = nullptr; | 
| 3292         } | 3292         } | 
| 3293 | 3293 | 
| 3294         if (!dragState().m_dragSrc) | 3294         if (!dragState().m_dragSrc) | 
| 3295             m_mouseDownMayStartDrag = false; // no element is draggable | 3295             m_mouseDownMayStartDrag = false; // no element is draggable | 
| 3296     } | 3296     } | 
| 3297 | 3297 | 
| 3298     if (!m_mouseDownMayStartDrag) | 3298     if (!m_mouseDownMayStartDrag) | 
| 3299         return !mouseDownMayStartSelect() && !m_mouseDownMayStartAutoscroll; | 3299         return !mouseDownMayStartSelect() && !m_mouseDownMayStartAutoscroll; | 
| 3300 | 3300 | 
| 3301     // We are starting a text/image/url drag, so the cursor should be an arrow | 3301     // We are starting a text/image/url drag, so the cursor should be an arrow | 
| 3302     // FIXME <rdar://7577595>: Custom cursors aren't supported during drag and d
      rop (default to pointer). | 3302     // FIXME <rdar://7577595>: Custom cursors aren't supported during drag and d
      rop (default to pointer). | 
| 3303     m_frame->view()->setCursor(pointerCursor()); | 3303     m_frame->view()->setCursor(pointerCursor()); | 
| 3304 | 3304 | 
| 3305     if (checkDragHysteresis == ShouldCheckDragHysteresis && !dragHysteresisExcee
      ded(event.event().position())) | 3305     if (checkDragHysteresis == ShouldCheckDragHysteresis && !dragHysteresisExcee
      ded(event.event().position())) | 
| 3306         return true; | 3306         return true; | 
| 3307 | 3307 | 
| 3308     // Once we're past the hysteresis point, we don't want to treat this gesture
       as a click | 3308     // Once we're past the hysteresis point, we don't want to treat this gesture
       as a click | 
| 3309     invalidateClick(); | 3309     invalidateClick(); | 
| 3310 | 3310 | 
| 3311     if (!tryStartDrag(event)) { | 3311     if (!tryStartDrag(event)) { | 
| 3312         // Something failed to start the drag, clean up. | 3312         // Something failed to start the drag, clean up. | 
| 3313         freeClipboard(); | 3313         freeClipboard(); | 
| 3314         dragState().m_dragSrc = 0; | 3314         dragState().m_dragSrc = nullptr; | 
| 3315     } | 3315     } | 
| 3316 | 3316 | 
| 3317     m_mouseDownMayStartDrag = false; | 3317     m_mouseDownMayStartDrag = false; | 
| 3318     // Whether or not the drag actually started, no more default handling (like 
      selection). | 3318     // Whether or not the drag actually started, no more default handling (like 
      selection). | 
| 3319     return true; | 3319     return true; | 
| 3320 } | 3320 } | 
| 3321 | 3321 | 
| 3322 bool EventHandler::tryStartDrag(const MouseEventWithHitTestResults& event) | 3322 bool EventHandler::tryStartDrag(const MouseEventWithHitTestResults& event) | 
| 3323 { | 3323 { | 
| 3324     freeClipboard(); // would only happen if we missed a dragEnd.  Do it anyway,
       just | 3324     freeClipboard(); // would only happen if we missed a dragEnd.  Do it anyway,
       just | 
| (...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4009 unsigned EventHandler::accessKeyModifiers() | 4009 unsigned EventHandler::accessKeyModifiers() | 
| 4010 { | 4010 { | 
| 4011 #if OS(MACOSX) | 4011 #if OS(MACOSX) | 
| 4012     return PlatformEvent::CtrlKey | PlatformEvent::AltKey; | 4012     return PlatformEvent::CtrlKey | PlatformEvent::AltKey; | 
| 4013 #else | 4013 #else | 
| 4014     return PlatformEvent::AltKey; | 4014     return PlatformEvent::AltKey; | 
| 4015 #endif | 4015 #endif | 
| 4016 } | 4016 } | 
| 4017 | 4017 | 
| 4018 } // namespace WebCore | 4018 } // namespace WebCore | 
| OLD | NEW | 
|---|