OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights |
3 * reserved. | 3 * reserved. |
4 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 4 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
5 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) | 5 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) |
6 * | 6 * |
7 * Redistribution and use in source and binary forms, with or without | 7 * Redistribution and use in source and binary forms, with or without |
8 * modification, are permitted provided that the following conditions | 8 * modification, are permitted provided that the following conditions |
9 * are met: | 9 * are met: |
10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
561 } | 561 } |
562 | 562 |
563 if ((editable || | 563 if ((editable || |
564 (layoutObject && layoutObject->isText() && node->canStartSelection())) && | 564 (layoutObject && layoutObject->isText() && node->canStartSelection())) && |
565 !inResizer && !result.scrollbar()) | 565 !inResizer && !result.scrollbar()) |
566 return iBeam; | 566 return iBeam; |
567 return pointerCursor(); | 567 return pointerCursor(); |
568 } | 568 } |
569 | 569 |
570 WebInputEventResult EventHandler::handleMousePressEvent( | 570 WebInputEventResult EventHandler::handleMousePressEvent( |
571 const PlatformMouseEvent& mouseEvent) { | 571 const WebMouseEvent& mouseEvent) { |
572 TRACE_EVENT0("blink", "EventHandler::handleMousePressEvent"); | 572 TRACE_EVENT0("blink", "EventHandler::handleMousePressEvent"); |
573 | 573 |
574 // For 4th/5th button in the mouse since Chrome does not yet send | 574 // For 4th/5th button in the mouse since Chrome does not yet send |
575 // button value to Blink but in some cases it does send the event. | 575 // button value to Blink but in some cases it does send the event. |
576 // This check is needed to suppress such an event (crbug.com/574959) | 576 // This check is needed to suppress such an event (crbug.com/574959) |
577 if (mouseEvent.pointerProperties().button == | 577 if (mouseEvent.button == WebPointerProperties::Button::NoButton) |
578 WebPointerProperties::Button::NoButton) | |
579 return WebInputEventResult::HandledSuppressed; | 578 return WebInputEventResult::HandledSuppressed; |
580 | 579 |
581 if (m_eventHandlerWillResetCapturingMouseEventsNode) | 580 if (m_eventHandlerWillResetCapturingMouseEventsNode) |
582 m_capturingMouseEventsNode = nullptr; | 581 m_capturingMouseEventsNode = nullptr; |
583 m_mouseEventManager->handleMousePressEventUpdateStates(mouseEvent); | 582 m_mouseEventManager->handleMousePressEventUpdateStates(mouseEvent); |
584 selectionController().setMouseDownMayStartSelect(false); | 583 selectionController().setMouseDownMayStartSelect(false); |
585 if (!m_frame->view()) | 584 if (!m_frame->view()) |
586 return WebInputEventResult::NotHandled; | 585 return WebInputEventResult::NotHandled; |
587 | 586 |
588 HitTestRequest request(HitTestRequest::Active); | 587 HitTestRequest request(HitTestRequest::Active); |
589 // Save the document point we generate in case the window coordinate is | 588 // Save the document point we generate in case the window coordinate is |
590 // invalidated by what happens when we dispatch the event. | 589 // invalidated by what happens when we dispatch the event. |
591 LayoutPoint documentPoint = | 590 LayoutPoint documentPoint = m_frame->view()->rootFrameToContents( |
592 m_frame->view()->rootFrameToContents(mouseEvent.position()); | 591 flooredIntPoint(mouseEvent.positionInRootFrame())); |
593 MouseEventWithHitTestResults mev = | 592 MouseEventWithHitTestResults mev = |
594 m_frame->document()->performMouseEventHitTest(request, documentPoint, | 593 m_frame->document()->performMouseEventHitTest(request, documentPoint, |
595 mouseEvent); | 594 mouseEvent); |
596 | 595 |
597 if (!mev.innerNode()) { | 596 if (!mev.innerNode()) { |
598 m_mouseEventManager->invalidateClick(); | 597 m_mouseEventManager->invalidateClick(); |
599 return WebInputEventResult::NotHandled; | 598 return WebInputEventResult::NotHandled; |
600 } | 599 } |
601 | 600 |
602 m_mouseEventManager->setMousePressNode(mev.innerNode()); | 601 m_mouseEventManager->setMousePressNode(mev.innerNode()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
635 m_scrollManager->stopAutoscroll(); | 634 m_scrollManager->stopAutoscroll(); |
636 if (isMiddleClickAutoscrollInProgress) { | 635 if (isMiddleClickAutoscrollInProgress) { |
637 // We invalidate the click when exiting middle click auto scroll so that | 636 // We invalidate the click when exiting middle click auto scroll so that |
638 // we don't inadvertently navigate away from the current page (e.g. the | 637 // we don't inadvertently navigate away from the current page (e.g. the |
639 // click was on a hyperlink). See <rdar://problem/6095023>. | 638 // click was on a hyperlink). See <rdar://problem/6095023>. |
640 m_mouseEventManager->invalidateClick(); | 639 m_mouseEventManager->invalidateClick(); |
641 return WebInputEventResult::HandledSuppressed; | 640 return WebInputEventResult::HandledSuppressed; |
642 } | 641 } |
643 } | 642 } |
644 | 643 |
645 m_mouseEventManager->setClickCount(mouseEvent.clickCount()); | 644 m_mouseEventManager->setClickCount(mouseEvent.clickCount); |
646 m_mouseEventManager->setClickNode( | 645 m_mouseEventManager->setClickNode( |
647 mev.innerNode()->isTextNode() | 646 mev.innerNode()->isTextNode() |
648 ? FlatTreeTraversal::parent(*mev.innerNode()) | 647 ? FlatTreeTraversal::parent(*mev.innerNode()) |
649 : mev.innerNode()); | 648 : mev.innerNode()); |
650 | 649 |
651 if (!mouseEvent.fromTouch()) | 650 if (!mouseEvent.fromTouch()) |
652 m_frame->selection().setCaretBlinkingSuspended(true); | 651 m_frame->selection().setCaretBlinkingSuspended(true); |
653 | 652 |
654 WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents( | 653 WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents( |
655 EventTypeNames::mousedown, mev.innerNode(), mev.event(), | 654 EventTypeNames::mousedown, mev.innerNode(), mev.canvasRegionId(), |
656 Vector<PlatformMouseEvent>()); | 655 mev.event(), Vector<WebMouseEvent>()); |
657 | 656 |
658 if (eventResult == WebInputEventResult::NotHandled && m_frame->view()) { | 657 if (eventResult == WebInputEventResult::NotHandled && m_frame->view()) { |
659 FrameView* view = m_frame->view(); | 658 FrameView* view = m_frame->view(); |
660 PaintLayer* layer = mev.innerNode()->layoutObject() | 659 PaintLayer* layer = mev.innerNode()->layoutObject() |
661 ? mev.innerNode()->layoutObject()->enclosingLayer() | 660 ? mev.innerNode()->layoutObject()->enclosingLayer() |
662 : nullptr; | 661 : nullptr; |
663 IntPoint p = view->rootFrameToContents(mouseEvent.position()); | 662 IntPoint p = view->rootFrameToContents( |
663 flooredIntPoint(mouseEvent.positionInRootFrame())); | |
664 if (layer && layer->getScrollableArea() && | 664 if (layer && layer->getScrollableArea() && |
665 layer->getScrollableArea()->isPointInResizeControl(p, | 665 layer->getScrollableArea()->isPointInResizeControl(p, |
666 ResizerForPointer)) { | 666 ResizerForPointer)) { |
667 m_scrollManager->setResizeScrollableArea(layer, p); | 667 m_scrollManager->setResizeScrollableArea(layer, p); |
668 return WebInputEventResult::HandledSystem; | 668 return WebInputEventResult::HandledSystem; |
669 } | 669 } |
670 } | 670 } |
671 | 671 |
672 // m_selectionInitiationState is initialized after dispatching mousedown | 672 // m_selectionInitiationState is initialized after dispatching mousedown |
673 // event in order not to keep the selection by DOM APIs because we can't | 673 // event in order not to keep the selection by DOM APIs because we can't |
674 // give the user the chance to handle the selection by user action like | 674 // give the user the chance to handle the selection by user action like |
675 // dragging if we keep the selection in case of mousedown. FireFox also has | 675 // dragging if we keep the selection in case of mousedown. FireFox also has |
676 // the same behavior and it's more compatible with other browsers. | 676 // the same behavior and it's more compatible with other browsers. |
677 selectionController().initializeSelectionState(); | 677 selectionController().initializeSelectionState(); |
678 HitTestResult hitTestResult = EventHandlingUtil::hitTestResultInFrame( | 678 HitTestResult hitTestResult = EventHandlingUtil::hitTestResultInFrame( |
679 m_frame, documentPoint, HitTestRequest::ReadOnly); | 679 m_frame, documentPoint, HitTestRequest::ReadOnly); |
680 InputDeviceCapabilities* sourceCapabilities = | 680 InputDeviceCapabilities* sourceCapabilities = |
681 mouseEvent.getSyntheticEventType() == PlatformMouseEvent::FromTouch | 681 mouseEvent.fromTouch() |
682 ? InputDeviceCapabilities::firesTouchEventsSourceCapabilities() | 682 ? InputDeviceCapabilities::firesTouchEventsSourceCapabilities() |
683 : InputDeviceCapabilities::doesntFireTouchEventsSourceCapabilities(); | 683 : InputDeviceCapabilities::doesntFireTouchEventsSourceCapabilities(); |
684 if (eventResult == WebInputEventResult::NotHandled) { | 684 if (eventResult == WebInputEventResult::NotHandled) { |
685 eventResult = m_mouseEventManager->handleMouseFocus(hitTestResult, | 685 eventResult = m_mouseEventManager->handleMouseFocus(hitTestResult, |
686 sourceCapabilities); | 686 sourceCapabilities); |
687 } | 687 } |
688 m_mouseEventManager->setCapturesDragging( | 688 m_mouseEventManager->setCapturesDragging( |
689 eventResult == WebInputEventResult::NotHandled || mev.scrollbar()); | 689 eventResult == WebInputEventResult::NotHandled || mev.scrollbar()); |
690 | 690 |
691 // If the hit testing originally determined the event was in a scrollbar, | 691 // If the hit testing originally determined the event was in a scrollbar, |
(...skipping 20 matching lines...) Expand all Loading... | |
712 request, documentPoint, mouseEvent); | 712 request, documentPoint, mouseEvent); |
713 } | 713 } |
714 | 714 |
715 if (passMousePressEventToScrollbar(mev)) | 715 if (passMousePressEventToScrollbar(mev)) |
716 eventResult = WebInputEventResult::HandledSystem; | 716 eventResult = WebInputEventResult::HandledSystem; |
717 else | 717 else |
718 eventResult = m_mouseEventManager->handleMousePressEvent(mev); | 718 eventResult = m_mouseEventManager->handleMousePressEvent(mev); |
719 } | 719 } |
720 | 720 |
721 if (mev.hitTestResult().innerNode() && | 721 if (mev.hitTestResult().innerNode() && |
722 mouseEvent.pointerProperties().button == | 722 mouseEvent.button == WebPointerProperties::Button::Left) { |
723 WebPointerProperties::Button::Left) { | 723 DCHECK_EQ(WebInputEvent::MouseDown, mouseEvent.type()); |
724 ASSERT(mouseEvent.type() == PlatformEvent::MousePressed); | |
725 HitTestResult result = mev.hitTestResult(); | 724 HitTestResult result = mev.hitTestResult(); |
726 result.setToShadowHostIfInUserAgentShadowRoot(); | 725 result.setToShadowHostIfInUserAgentShadowRoot(); |
727 m_frame->chromeClient().onMouseDown(result.innerNode()); | 726 m_frame->chromeClient().onMouseDown(result.innerNode()); |
728 } | 727 } |
729 | 728 |
730 return eventResult; | 729 return eventResult; |
731 } | 730 } |
732 | 731 |
733 WebInputEventResult EventHandler::handleMouseMoveEvent( | 732 WebInputEventResult EventHandler::handleMouseMoveEvent( |
734 const PlatformMouseEvent& event, | 733 const WebMouseEvent& event, |
735 const Vector<PlatformMouseEvent>& coalescedEvents) { | 734 const Vector<WebMouseEvent>& coalescedEvents) { |
736 TRACE_EVENT0("blink", "EventHandler::handleMouseMoveEvent"); | 735 TRACE_EVENT0("blink", "EventHandler::handleMouseMoveEvent"); |
737 | 736 |
738 HitTestResult hoveredNode = HitTestResult(); | 737 HitTestResult hoveredNode = HitTestResult(); |
739 WebInputEventResult result = | 738 WebInputEventResult result = |
740 handleMouseMoveOrLeaveEvent(event, coalescedEvents, &hoveredNode); | 739 handleMouseMoveOrLeaveEvent(event, coalescedEvents, &hoveredNode); |
741 | 740 |
742 Page* page = m_frame->page(); | 741 Page* page = m_frame->page(); |
743 if (!page) | 742 if (!page) |
744 return result; | 743 return result; |
745 | 744 |
746 if (PaintLayer* layer = | 745 if (PaintLayer* layer = |
747 EventHandlingUtil::layerForNode(hoveredNode.innerNode())) { | 746 EventHandlingUtil::layerForNode(hoveredNode.innerNode())) { |
748 if (ScrollableArea* layerScrollableArea = | 747 if (ScrollableArea* layerScrollableArea = |
749 EventHandlingUtil::associatedScrollableArea(layer)) | 748 EventHandlingUtil::associatedScrollableArea(layer)) |
750 layerScrollableArea->mouseMovedInContentArea(); | 749 layerScrollableArea->mouseMovedInContentArea(); |
751 } | 750 } |
752 | 751 |
753 if (FrameView* frameView = m_frame->view()) | 752 if (FrameView* frameView = m_frame->view()) |
754 frameView->mouseMovedInContentArea(); | 753 frameView->mouseMovedInContentArea(); |
755 | 754 |
756 hoveredNode.setToShadowHostIfInUserAgentShadowRoot(); | 755 hoveredNode.setToShadowHostIfInUserAgentShadowRoot(); |
757 page->chromeClient().mouseDidMoveOverElement(*m_frame, hoveredNode); | 756 page->chromeClient().mouseDidMoveOverElement(*m_frame, hoveredNode); |
758 | 757 |
759 return result; | 758 return result; |
760 } | 759 } |
761 | 760 |
762 void EventHandler::handleMouseLeaveEvent(const PlatformMouseEvent& event) { | 761 void EventHandler::handleMouseLeaveEvent(const WebMouseEvent& event) { |
763 TRACE_EVENT0("blink", "EventHandler::handleMouseLeaveEvent"); | 762 TRACE_EVENT0("blink", "EventHandler::handleMouseLeaveEvent"); |
764 | 763 |
765 handleMouseMoveOrLeaveEvent(event, Vector<PlatformMouseEvent>(), 0, false, | 764 handleMouseMoveOrLeaveEvent(event, Vector<WebMouseEvent>(), 0, false, true); |
766 true); | |
767 } | 765 } |
768 | 766 |
769 WebInputEventResult EventHandler::handleMouseMoveOrLeaveEvent( | 767 WebInputEventResult EventHandler::handleMouseMoveOrLeaveEvent( |
770 const PlatformMouseEvent& mouseEvent, | 768 const WebMouseEvent& mouseEvent, |
771 const Vector<PlatformMouseEvent>& coalescedEvents, | 769 const Vector<WebMouseEvent>& coalescedEvents, |
772 HitTestResult* hoveredNode, | 770 HitTestResult* hoveredNode, |
773 bool onlyUpdateScrollbars, | 771 bool onlyUpdateScrollbars, |
774 bool forceLeave) { | 772 bool forceLeave) { |
775 ASSERT(m_frame); | 773 ASSERT(m_frame); |
776 ASSERT(m_frame->view()); | 774 ASSERT(m_frame->view()); |
777 | 775 |
778 m_mouseEventManager->setLastKnownMousePosition(mouseEvent); | 776 m_mouseEventManager->setLastKnownMousePosition(mouseEvent); |
779 | 777 |
780 m_hoverTimer.stop(); | 778 m_hoverTimer.stop(); |
781 m_cursorUpdateTimer.stop(); | 779 m_cursorUpdateTimer.stop(); |
782 | 780 |
783 m_mouseEventManager->cancelFakeMouseMoveEvent(); | 781 m_mouseEventManager->cancelFakeMouseMoveEvent(); |
784 m_mouseEventManager->handleSvgPanIfNeeded(false); | 782 m_mouseEventManager->handleSvgPanIfNeeded(false); |
785 | 783 |
786 if (m_frameSetBeingResized) { | 784 if (m_frameSetBeingResized) { |
787 return updatePointerTargetAndDispatchEvents(EventTypeNames::mousemove, | 785 return updatePointerTargetAndDispatchEvents( |
788 m_frameSetBeingResized.get(), | 786 EventTypeNames::mousemove, m_frameSetBeingResized.get(), String(), |
789 mouseEvent, coalescedEvents); | 787 mouseEvent, coalescedEvents); |
790 } | 788 } |
791 | 789 |
792 // Send events right to a scrollbar if the mouse is pressed. | 790 // Send events right to a scrollbar if the mouse is pressed. |
793 if (m_lastScrollbarUnderMouse && m_mouseEventManager->mousePressed()) { | 791 if (m_lastScrollbarUnderMouse && m_mouseEventManager->mousePressed()) { |
794 m_lastScrollbarUnderMouse->mouseMoved(mouseEvent); | 792 m_lastScrollbarUnderMouse->mouseMoved(mouseEvent); |
795 return WebInputEventResult::HandledSystem; | 793 return WebInputEventResult::HandledSystem; |
796 } | 794 } |
797 | 795 |
798 // Mouse events simulated from touch should not hit-test again. | 796 // Mouse events simulated from touch should not hit-test again. |
799 ASSERT(!mouseEvent.fromTouch()); | 797 ASSERT(!mouseEvent.fromTouch()); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
855 // event to the last subframe so that it will fire mouseouts. | 853 // event to the last subframe so that it will fire mouseouts. |
856 if (m_lastMouseMoveEventSubframe && | 854 if (m_lastMouseMoveEventSubframe && |
857 m_lastMouseMoveEventSubframe->tree().isDescendantOf(m_frame) && | 855 m_lastMouseMoveEventSubframe->tree().isDescendantOf(m_frame) && |
858 m_lastMouseMoveEventSubframe != newSubframe) | 856 m_lastMouseMoveEventSubframe != newSubframe) |
859 m_lastMouseMoveEventSubframe->eventHandler().handleMouseLeaveEvent( | 857 m_lastMouseMoveEventSubframe->eventHandler().handleMouseLeaveEvent( |
860 mev.event()); | 858 mev.event()); |
861 | 859 |
862 if (newSubframe) { | 860 if (newSubframe) { |
863 // Update over/out state before passing the event to the subframe. | 861 // Update over/out state before passing the event to the subframe. |
864 m_pointerEventManager->sendMouseAndPointerBoundaryEvents( | 862 m_pointerEventManager->sendMouseAndPointerBoundaryEvents( |
865 updateMouseEventTargetNode(mev.innerNode()), mev.event()); | 863 updateMouseEventTargetNode(mev.innerNode()), mev.canvasRegionId(), |
864 mev.event()); | |
866 | 865 |
867 // Event dispatch in sendMouseAndPointerBoundaryEvents may have caused the | 866 // Event dispatch in sendMouseAndPointerBoundaryEvents may have caused the |
868 // subframe of the target node to be detached from its FrameView, in which | 867 // subframe of the target node to be detached from its FrameView, in which |
869 // case the event should not be passed. | 868 // case the event should not be passed. |
870 if (newSubframe->view()) { | 869 if (newSubframe->view()) { |
871 eventResult = passMouseMoveEventToSubframe(mev, coalescedEvents, | 870 eventResult = passMouseMoveEventToSubframe(mev, coalescedEvents, |
872 newSubframe, hoveredNode); | 871 newSubframe, hoveredNode); |
873 } | 872 } |
874 } else { | 873 } else { |
875 if (scrollbar && !m_mouseEventManager->mousePressed()) { | 874 if (scrollbar && !m_mouseEventManager->mousePressed()) { |
876 // Handle hover effects on platforms that support visual feedback on | 875 // Handle hover effects on platforms that support visual feedback on |
877 // scrollbar hovering. | 876 // scrollbar hovering. |
878 scrollbar->mouseMoved(mev.event()); | 877 scrollbar->mouseMoved(mev.event()); |
879 } | 878 } |
880 if (FrameView* view = m_frame->view()) { | 879 if (FrameView* view = m_frame->view()) { |
881 OptionalCursor optionalCursor = selectCursor(mev.hitTestResult()); | 880 OptionalCursor optionalCursor = selectCursor(mev.hitTestResult()); |
882 if (optionalCursor.isCursorChange()) { | 881 if (optionalCursor.isCursorChange()) { |
883 view->setCursor(optionalCursor.cursor()); | 882 view->setCursor(optionalCursor.cursor()); |
884 } | 883 } |
885 } | 884 } |
886 } | 885 } |
887 | 886 |
888 m_lastMouseMoveEventSubframe = newSubframe; | 887 m_lastMouseMoveEventSubframe = newSubframe; |
889 | 888 |
890 if (eventResult != WebInputEventResult::NotHandled) | 889 if (eventResult != WebInputEventResult::NotHandled) |
891 return eventResult; | 890 return eventResult; |
892 | 891 |
893 eventResult = updatePointerTargetAndDispatchEvents( | 892 eventResult = updatePointerTargetAndDispatchEvents( |
894 EventTypeNames::mousemove, mev.innerNode(), mev.event(), coalescedEvents); | 893 EventTypeNames::mousemove, mev.innerNode(), mev.canvasRegionId(), |
894 mev.event(), coalescedEvents); | |
895 if (eventResult != WebInputEventResult::NotHandled) | 895 if (eventResult != WebInputEventResult::NotHandled) |
896 return eventResult; | 896 return eventResult; |
897 | 897 |
898 return m_mouseEventManager->handleMouseDraggedEvent(mev); | 898 return m_mouseEventManager->handleMouseDraggedEvent(mev); |
899 } | 899 } |
900 | 900 |
901 WebInputEventResult EventHandler::handleMouseReleaseEvent( | 901 WebInputEventResult EventHandler::handleMouseReleaseEvent( |
902 const PlatformMouseEvent& mouseEvent) { | 902 const WebMouseEvent& mouseEvent) { |
903 TRACE_EVENT0("blink", "EventHandler::handleMouseReleaseEvent"); | 903 TRACE_EVENT0("blink", "EventHandler::handleMouseReleaseEvent"); |
904 | 904 |
905 // For 4th/5th button in the mouse since Chrome does not yet send | 905 // For 4th/5th button in the mouse since Chrome does not yet send |
906 // button value to Blink but in some cases it does send the event. | 906 // button value to Blink but in some cases it does send the event. |
907 // This check is needed to suppress such an event (crbug.com/574959) | 907 // This check is needed to suppress such an event (crbug.com/574959) |
908 if (mouseEvent.pointerProperties().button == | 908 if (mouseEvent.button == WebPointerProperties::Button::NoButton) |
909 WebPointerProperties::Button::NoButton) | |
910 return WebInputEventResult::HandledSuppressed; | 909 return WebInputEventResult::HandledSuppressed; |
911 | 910 |
912 if (!mouseEvent.fromTouch()) | 911 if (!mouseEvent.fromTouch()) |
913 m_frame->selection().setCaretBlinkingSuspended(false); | 912 m_frame->selection().setCaretBlinkingSuspended(false); |
914 | 913 |
915 if (RuntimeEnabledFeatures::middleClickAutoscrollEnabled()) { | 914 if (RuntimeEnabledFeatures::middleClickAutoscrollEnabled()) { |
916 if (Page* page = m_frame->page()) | 915 if (Page* page = m_frame->page()) |
917 page->autoscrollController().handleMouseReleaseForMiddleClickAutoscroll( | 916 page->autoscrollController().handleMouseReleaseForMiddleClickAutoscroll( |
918 m_frame, mouseEvent); | 917 m_frame, mouseEvent); |
919 } | 918 } |
920 | 919 |
921 m_mouseEventManager->setMousePressed(false); | 920 m_mouseEventManager->setMousePressed(false); |
922 m_mouseEventManager->setLastKnownMousePosition(mouseEvent); | 921 m_mouseEventManager->setLastKnownMousePosition(mouseEvent); |
923 m_mouseEventManager->handleSvgPanIfNeeded(true); | 922 m_mouseEventManager->handleSvgPanIfNeeded(true); |
924 | 923 |
925 if (m_frameSetBeingResized) { | 924 if (m_frameSetBeingResized) { |
926 return m_mouseEventManager->setMousePositionAndDispatchMouseEvent( | 925 return m_mouseEventManager->setMousePositionAndDispatchMouseEvent( |
927 updateMouseEventTargetNode(m_frameSetBeingResized.get()), | 926 updateMouseEventTargetNode(m_frameSetBeingResized.get()), String(), |
928 EventTypeNames::mouseup, mouseEvent); | 927 EventTypeNames::mouseup, mouseEvent); |
929 } | 928 } |
930 | 929 |
931 if (m_lastScrollbarUnderMouse) { | 930 if (m_lastScrollbarUnderMouse) { |
932 m_mouseEventManager->invalidateClick(); | 931 m_mouseEventManager->invalidateClick(); |
933 m_lastScrollbarUnderMouse->mouseUp(mouseEvent); | 932 m_lastScrollbarUnderMouse->mouseUp(mouseEvent); |
934 return updatePointerTargetAndDispatchEvents( | 933 return updatePointerTargetAndDispatchEvents( |
935 EventTypeNames::mouseup, m_mouseEventManager->getNodeUnderMouse(), | 934 EventTypeNames::mouseup, m_mouseEventManager->getNodeUnderMouse(), |
936 mouseEvent, Vector<PlatformMouseEvent>()); | 935 String(), mouseEvent, Vector<WebMouseEvent>()); |
937 } | 936 } |
938 | 937 |
939 // Mouse events simulated from touch should not hit-test again. | 938 // Mouse events simulated from touch should not hit-test again. |
940 ASSERT(!mouseEvent.fromTouch()); | 939 ASSERT(!mouseEvent.fromTouch()); |
941 | 940 |
942 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Release; | 941 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Release; |
943 HitTestRequest request(hitType); | 942 HitTestRequest request(hitType); |
944 MouseEventWithHitTestResults mev = | 943 MouseEventWithHitTestResults mev = |
945 EventHandlingUtil::performMouseEventHitTest(m_frame, request, mouseEvent); | 944 EventHandlingUtil::performMouseEventHitTest(m_frame, request, mouseEvent); |
946 LocalFrame* subframe = | 945 LocalFrame* subframe = |
(...skipping 17 matching lines...) Expand all Loading... | |
964 gestureIndicator = WTF::wrapUnique(new UserGestureIndicator( | 963 gestureIndicator = WTF::wrapUnique(new UserGestureIndicator( |
965 m_frame->localFrameRoot() | 964 m_frame->localFrameRoot() |
966 ->eventHandler() | 965 ->eventHandler() |
967 .m_lastMouseDownUserGestureToken.release())); | 966 .m_lastMouseDownUserGestureToken.release())); |
968 } else { | 967 } else { |
969 gestureIndicator = WTF::wrapUnique(new UserGestureIndicator( | 968 gestureIndicator = WTF::wrapUnique(new UserGestureIndicator( |
970 DocumentUserGestureToken::create(m_frame->document()))); | 969 DocumentUserGestureToken::create(m_frame->document()))); |
971 } | 970 } |
972 | 971 |
973 WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents( | 972 WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents( |
974 EventTypeNames::mouseup, mev.innerNode(), mev.event(), | 973 EventTypeNames::mouseup, mev.innerNode(), mev.canvasRegionId(), |
975 Vector<PlatformMouseEvent>()); | 974 mev.event(), Vector<WebMouseEvent>()); |
976 | 975 |
977 WebInputEventResult clickEventResult = | 976 WebInputEventResult clickEventResult = |
978 m_mouseEventManager->dispatchMouseClickIfNeeded(mev); | 977 m_mouseEventManager->dispatchMouseClickIfNeeded(mev); |
979 | 978 |
980 m_scrollManager->clearResizeScrollableArea(false); | 979 m_scrollManager->clearResizeScrollableArea(false); |
981 | 980 |
982 if (eventResult == WebInputEventResult::NotHandled) | 981 if (eventResult == WebInputEventResult::NotHandled) |
983 eventResult = m_mouseEventManager->handleMouseReleaseEvent(mev); | 982 eventResult = m_mouseEventManager->handleMouseReleaseEvent(mev); |
984 m_mouseEventManager->clearDragHeuristicState(); | 983 m_mouseEventManager->clearDragHeuristicState(); |
985 | 984 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1037 if (matched) { | 1036 if (matched) { |
1038 dataTransfer->setDropEffect( | 1037 dataTransfer->setDropEffect( |
1039 convertDragOperationToDropZoneOperation(dragOperation)); | 1038 convertDragOperationToDropZoneOperation(dragOperation)); |
1040 return true; | 1039 return true; |
1041 } | 1040 } |
1042 } | 1041 } |
1043 return false; | 1042 return false; |
1044 } | 1043 } |
1045 | 1044 |
1046 WebInputEventResult EventHandler::updateDragAndDrop( | 1045 WebInputEventResult EventHandler::updateDragAndDrop( |
1047 const PlatformMouseEvent& event, | 1046 const WebMouseEvent& event, |
1048 DataTransfer* dataTransfer) { | 1047 DataTransfer* dataTransfer) { |
1049 WebInputEventResult eventResult = WebInputEventResult::NotHandled; | 1048 WebInputEventResult eventResult = WebInputEventResult::NotHandled; |
1050 | 1049 |
1051 if (!m_frame->view()) | 1050 if (!m_frame->view()) |
1052 return eventResult; | 1051 return eventResult; |
1053 | 1052 |
1054 HitTestRequest request(HitTestRequest::ReadOnly); | 1053 HitTestRequest request(HitTestRequest::ReadOnly); |
1055 MouseEventWithHitTestResults mev = | 1054 MouseEventWithHitTestResults mev = |
1056 EventHandlingUtil::performMouseEventHitTest(m_frame, request, event); | 1055 EventHandlingUtil::performMouseEventHitTest(m_frame, request, event); |
1057 | 1056 |
1058 // Drag events should never go to text nodes (following IE, and proper | 1057 // Drag events should never go to text nodes (following IE, and proper |
1059 // mouseover/out dispatch) | 1058 // mouseover/out dispatch) |
1060 Node* newTarget = mev.innerNode(); | 1059 Node* newTarget = mev.innerNode(); |
1061 if (newTarget && newTarget->isTextNode()) | 1060 if (newTarget && newTarget->isTextNode()) |
1062 newTarget = FlatTreeTraversal::parent(*newTarget); | 1061 newTarget = FlatTreeTraversal::parent(*newTarget); |
1063 | 1062 |
1064 if (AutoscrollController* controller = | 1063 if (AutoscrollController* controller = |
1065 m_scrollManager->autoscrollController()) | 1064 m_scrollManager->autoscrollController()) { |
1066 controller->updateDragAndDrop(newTarget, event.position(), | 1065 controller->updateDragAndDrop( |
1067 event.timestamp()); | 1066 newTarget, flooredIntPoint(event.positionInRootFrame()), |
1067 TimeTicks::FromSeconds(event.timeStampSeconds())); | |
1068 } | |
1068 | 1069 |
1069 if (m_dragTarget != newTarget) { | 1070 if (m_dragTarget != newTarget) { |
1070 // FIXME: this ordering was explicitly chosen to match WinIE. However, | 1071 // FIXME: this ordering was explicitly chosen to match WinIE. However, |
1071 // it is sometimes incorrect when dragging within subframes, as seen with | 1072 // it is sometimes incorrect when dragging within subframes, as seen with |
1072 // LayoutTests/fast/events/drag-in-frames.html. | 1073 // LayoutTests/fast/events/drag-in-frames.html. |
1073 // | 1074 // |
1074 // Moreover, this ordering conforms to section 7.9.4 of the HTML 5 spec. | 1075 // Moreover, this ordering conforms to section 7.9.4 of the HTML 5 spec. |
1075 // <http://dev.w3.org/html5/spec/Overview.html#drag-and-drop-processing-mode l>. | 1076 // <http://dev.w3.org/html5/spec/Overview.html#drag-and-drop-processing-mode l>. |
1076 LocalFrame* targetFrame; | 1077 LocalFrame* targetFrame; |
1077 if (targetIsFrame(newTarget, targetFrame)) { | 1078 if (targetIsFrame(newTarget, targetFrame)) { |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1130 findDropZone(newTarget, dataTransfer)) | 1131 findDropZone(newTarget, dataTransfer)) |
1131 eventResult = WebInputEventResult::HandledSystem; | 1132 eventResult = WebInputEventResult::HandledSystem; |
1132 m_shouldOnlyFireDragOverEvent = false; | 1133 m_shouldOnlyFireDragOverEvent = false; |
1133 } | 1134 } |
1134 } | 1135 } |
1135 m_dragTarget = newTarget; | 1136 m_dragTarget = newTarget; |
1136 | 1137 |
1137 return eventResult; | 1138 return eventResult; |
1138 } | 1139 } |
1139 | 1140 |
1140 void EventHandler::cancelDragAndDrop(const PlatformMouseEvent& event, | 1141 void EventHandler::cancelDragAndDrop(const WebMouseEvent& event, |
1141 DataTransfer* dataTransfer) { | 1142 DataTransfer* dataTransfer) { |
1142 LocalFrame* targetFrame; | 1143 LocalFrame* targetFrame; |
1143 if (targetIsFrame(m_dragTarget.get(), targetFrame)) { | 1144 if (targetIsFrame(m_dragTarget.get(), targetFrame)) { |
1144 if (targetFrame) | 1145 if (targetFrame) |
1145 targetFrame->eventHandler().cancelDragAndDrop(event, dataTransfer); | 1146 targetFrame->eventHandler().cancelDragAndDrop(event, dataTransfer); |
1146 } else if (m_dragTarget.get()) { | 1147 } else if (m_dragTarget.get()) { |
1147 if (m_mouseEventManager->dragState().m_dragSrc) | 1148 if (m_mouseEventManager->dragState().m_dragSrc) |
1148 m_mouseEventManager->dispatchDragSrcEvent(EventTypeNames::drag, event); | 1149 m_mouseEventManager->dispatchDragSrcEvent(EventTypeNames::drag, event); |
1149 m_mouseEventManager->dispatchDragEvent( | 1150 m_mouseEventManager->dispatchDragEvent( |
1150 EventTypeNames::dragleave, m_dragTarget.get(), event, dataTransfer); | 1151 EventTypeNames::dragleave, m_dragTarget.get(), event, dataTransfer); |
1151 } | 1152 } |
1152 clearDragState(); | 1153 clearDragState(); |
1153 } | 1154 } |
1154 | 1155 |
1155 WebInputEventResult EventHandler::performDragAndDrop( | 1156 WebInputEventResult EventHandler::performDragAndDrop( |
1156 const PlatformMouseEvent& event, | 1157 const WebMouseEvent& event, |
1157 DataTransfer* dataTransfer) { | 1158 DataTransfer* dataTransfer) { |
1158 LocalFrame* targetFrame; | 1159 LocalFrame* targetFrame; |
1159 WebInputEventResult result = WebInputEventResult::NotHandled; | 1160 WebInputEventResult result = WebInputEventResult::NotHandled; |
1160 if (targetIsFrame(m_dragTarget.get(), targetFrame)) { | 1161 if (targetIsFrame(m_dragTarget.get(), targetFrame)) { |
1161 if (targetFrame) | 1162 if (targetFrame) |
1162 result = | 1163 result = |
1163 targetFrame->eventHandler().performDragAndDrop(event, dataTransfer); | 1164 targetFrame->eventHandler().performDragAndDrop(event, dataTransfer); |
1164 } else if (m_dragTarget.get()) { | 1165 } else if (m_dragTarget.get()) { |
1165 result = m_mouseEventManager->dispatchDragEvent( | 1166 result = m_mouseEventManager->dispatchDragEvent( |
1166 EventTypeNames::drop, m_dragTarget.get(), event, dataTransfer); | 1167 EventTypeNames::drop, m_dragTarget.get(), event, dataTransfer); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1249 return m_pointerEventManager->hasProcessedPointerCapture(pointerId, target); | 1250 return m_pointerEventManager->hasProcessedPointerCapture(pointerId, target); |
1250 } | 1251 } |
1251 | 1252 |
1252 void EventHandler::elementRemoved(EventTarget* target) { | 1253 void EventHandler::elementRemoved(EventTarget* target) { |
1253 m_pointerEventManager->elementRemoved(target); | 1254 m_pointerEventManager->elementRemoved(target); |
1254 } | 1255 } |
1255 | 1256 |
1256 WebInputEventResult EventHandler::updatePointerTargetAndDispatchEvents( | 1257 WebInputEventResult EventHandler::updatePointerTargetAndDispatchEvents( |
1257 const AtomicString& mouseEventType, | 1258 const AtomicString& mouseEventType, |
1258 Node* targetNode, | 1259 Node* targetNode, |
1259 const PlatformMouseEvent& mouseEvent, | 1260 const String& canvasRegionId, |
1260 const Vector<PlatformMouseEvent>& coalescedEvents) { | 1261 const WebMouseEvent& mouseEvent, |
1262 const Vector<WebMouseEvent>& coalescedEvents) { | |
1261 ASSERT(mouseEventType == EventTypeNames::mousedown || | 1263 ASSERT(mouseEventType == EventTypeNames::mousedown || |
1262 mouseEventType == EventTypeNames::mousemove || | 1264 mouseEventType == EventTypeNames::mousemove || |
1263 mouseEventType == EventTypeNames::mouseup); | 1265 mouseEventType == EventTypeNames::mouseup); |
1264 | 1266 |
1265 const auto& eventResult = m_pointerEventManager->sendMousePointerEvent( | 1267 const auto& eventResult = m_pointerEventManager->sendMousePointerEvent( |
1266 updateMouseEventTargetNode(targetNode), mouseEventType, mouseEvent, | 1268 updateMouseEventTargetNode(targetNode), canvasRegionId, mouseEventType, |
1267 coalescedEvents); | 1269 mouseEvent, coalescedEvents); |
1268 return eventResult; | 1270 return eventResult; |
1269 } | 1271 } |
1270 | 1272 |
1271 WebInputEventResult EventHandler::handleWheelEvent( | 1273 WebInputEventResult EventHandler::handleWheelEvent( |
1272 const WebMouseWheelEvent& event) { | 1274 const WebMouseWheelEvent& event) { |
1273 #if OS(MACOSX) | 1275 #if OS(MACOSX) |
1274 // Filter Mac OS specific phases, usually with a zero-delta. | 1276 // Filter Mac OS specific phases, usually with a zero-delta. |
1275 // https://crbug.com/553732 | 1277 // https://crbug.com/553732 |
1276 // TODO(chongz): EventSender sends events with | 1278 // TODO(chongz): EventSender sends events with |
1277 // |WebMouseWheelEvent::PhaseNone|, | 1279 // |WebMouseWheelEvent::PhaseNone|, |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1610 if (exitedFrameInDocument != lastEnteredFrameInDocument) | 1612 if (exitedFrameInDocument != lastEnteredFrameInDocument) |
1611 exitedFrameChain.push_back(exitedFrameInDocument); | 1613 exitedFrameChain.push_back(exitedFrameInDocument); |
1612 else if (nextExitedFrameInDocument && indexEnteredFrameChain) | 1614 else if (nextExitedFrameInDocument && indexEnteredFrameChain) |
1613 --indexEnteredFrameChain; | 1615 --indexEnteredFrameChain; |
1614 } | 1616 } |
1615 exitedFrameInDocument = nextExitedFrameInDocument; | 1617 exitedFrameInDocument = nextExitedFrameInDocument; |
1616 } | 1618 } |
1617 | 1619 |
1618 const WebGestureEvent& gestureEvent = targetedEvent.event(); | 1620 const WebGestureEvent& gestureEvent = targetedEvent.event(); |
1619 unsigned modifiers = gestureEvent.modifiers(); | 1621 unsigned modifiers = gestureEvent.modifiers(); |
1620 PlatformMouseEvent fakeMouseMove( | 1622 WebMouseEvent fakeMouseMove( |
1621 gestureEvent, WebPointerProperties::Button::NoButton, | 1623 WebInputEvent::MouseMove, gestureEvent, |
1622 PlatformEvent::MouseMoved, | 1624 WebPointerProperties::Button::NoButton, |
1623 /* clickCount */ 0, static_cast<PlatformEvent::Modifiers>(modifiers), | 1625 /* clickCount */ 0, |
1624 PlatformMouseEvent::FromTouch, | 1626 modifiers | WebInputEvent::Modifiers::IsCompatibilityEventForTouch, |
1625 TimeTicks::FromSeconds(gestureEvent.timeStampSeconds()), | 1627 gestureEvent.timeStampSeconds()); |
1626 WebPointerProperties::PointerType::Mouse); | |
1627 | 1628 |
1628 // Update the mouseout/mouseleave event | 1629 // Update the mouseout/mouseleave event |
1629 size_t indexExitedFrameChain = exitedFrameChain.size(); | 1630 size_t indexExitedFrameChain = exitedFrameChain.size(); |
1630 while (indexExitedFrameChain) { | 1631 while (indexExitedFrameChain) { |
1631 LocalFrame* leaveFrame = exitedFrameChain[--indexExitedFrameChain]; | 1632 LocalFrame* leaveFrame = exitedFrameChain[--indexExitedFrameChain]; |
1632 leaveFrame->eventHandler().m_mouseEventManager->setNodeUnderMouse( | 1633 leaveFrame->eventHandler().m_mouseEventManager->setNodeUnderMouse( |
1633 updateMouseEventTargetNode(nullptr), fakeMouseMove); | 1634 updateMouseEventTargetNode(nullptr), String(), fakeMouseMove); |
1634 } | 1635 } |
1635 | 1636 |
1636 // update the mouseover/mouseenter event | 1637 // update the mouseover/mouseenter event |
1637 while (indexEnteredFrameChain) { | 1638 while (indexEnteredFrameChain) { |
1638 Frame* parentFrame = | 1639 Frame* parentFrame = |
1639 enteredFrameChain[--indexEnteredFrameChain]->tree().parent(); | 1640 enteredFrameChain[--indexEnteredFrameChain]->tree().parent(); |
1640 if (parentFrame && parentFrame->isLocalFrame()) | 1641 if (parentFrame && parentFrame->isLocalFrame()) { |
1641 toLocalFrame(parentFrame) | 1642 toLocalFrame(parentFrame) |
1642 ->eventHandler() | 1643 ->eventHandler() |
1643 .m_mouseEventManager->setNodeUnderMouse( | 1644 .m_mouseEventManager->setNodeUnderMouse( |
1644 updateMouseEventTargetNode(toHTMLFrameOwnerElement( | 1645 updateMouseEventTargetNode(toHTMLFrameOwnerElement( |
1645 enteredFrameChain[indexEnteredFrameChain]->owner())), | 1646 enteredFrameChain[indexEnteredFrameChain]->owner())), |
1646 fakeMouseMove); | 1647 String(), fakeMouseMove); |
1648 } | |
1647 } | 1649 } |
1648 } | 1650 } |
1649 | 1651 |
1650 GestureEventWithHitTestResults EventHandler::targetGestureEvent( | 1652 GestureEventWithHitTestResults EventHandler::targetGestureEvent( |
1651 const WebGestureEvent& gestureEvent, | 1653 const WebGestureEvent& gestureEvent, |
1652 bool readOnly) { | 1654 bool readOnly) { |
1653 TRACE_EVENT0("input", "EventHandler::targetGestureEvent"); | 1655 TRACE_EVENT0("input", "EventHandler::targetGestureEvent"); |
1654 | 1656 |
1655 ASSERT(m_frame == m_frame->localFrameRoot()); | 1657 ASSERT(m_frame == m_frame->localFrameRoot()); |
1656 // Scrolling events get hit tested per frame (like wheel events do). | 1658 // Scrolling events get hit tested per frame (like wheel events do). |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1775 // crbug.com/398914 | 1777 // crbug.com/398914 |
1776 if (adjusted) { | 1778 if (adjusted) { |
1777 hitTestResult->resolveRectBasedTest( | 1779 hitTestResult->resolveRectBasedTest( |
1778 adjustedNode, m_frame->view()->rootFrameToContents(adjustedPoint)); | 1780 adjustedNode, m_frame->view()->rootFrameToContents(adjustedPoint)); |
1779 gestureEvent->applyTouchAdjustment( | 1781 gestureEvent->applyTouchAdjustment( |
1780 WebFloatPoint(adjustedPoint.x(), adjustedPoint.y())); | 1782 WebFloatPoint(adjustedPoint.x(), adjustedPoint.y())); |
1781 } | 1783 } |
1782 } | 1784 } |
1783 | 1785 |
1784 WebInputEventResult EventHandler::sendContextMenuEvent( | 1786 WebInputEventResult EventHandler::sendContextMenuEvent( |
1785 const PlatformMouseEvent& event, | 1787 const WebMouseEvent& event, |
1786 Node* overrideTargetNode) { | 1788 Node* overrideTargetNode) { |
1787 FrameView* v = m_frame->view(); | 1789 FrameView* v = m_frame->view(); |
1788 if (!v) | 1790 if (!v) |
1789 return WebInputEventResult::NotHandled; | 1791 return WebInputEventResult::NotHandled; |
1790 | 1792 |
1791 // Clear mouse press state to avoid initiating a drag while context menu is | 1793 // Clear mouse press state to avoid initiating a drag while context menu is |
1792 // up. | 1794 // up. |
1793 m_mouseEventManager->setMousePressed(false); | 1795 m_mouseEventManager->setMousePressed(false); |
1794 LayoutPoint positionInContents = v->rootFrameToContents(event.position()); | 1796 LayoutPoint positionInContents = |
1797 v->rootFrameToContents(flooredIntPoint(event.positionInRootFrame())); | |
1795 HitTestRequest request(HitTestRequest::Active); | 1798 HitTestRequest request(HitTestRequest::Active); |
1796 MouseEventWithHitTestResults mev = | 1799 MouseEventWithHitTestResults mev = |
1797 m_frame->document()->performMouseEventHitTest(request, positionInContents, | 1800 m_frame->document()->performMouseEventHitTest(request, positionInContents, |
1798 event); | 1801 event); |
1799 // Since |Document::performMouseEventHitTest()| modifies layout tree for | 1802 // Since |Document::performMouseEventHitTest()| modifies layout tree for |
1800 // setting hover element, we need to update layout tree for requirement of | 1803 // setting hover element, we need to update layout tree for requirement of |
1801 // |SelectionController::sendContextMenuEvent()|. | 1804 // |SelectionController::sendContextMenuEvent()|. |
1802 m_frame->document()->updateStyleAndLayoutIgnorePendingStylesheets(); | 1805 m_frame->document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
1803 | 1806 |
1804 selectionController().sendContextMenuEvent(mev, positionInContents); | 1807 selectionController().sendContextMenuEvent(mev, positionInContents); |
1805 | 1808 |
1806 Node* targetNode = overrideTargetNode ? overrideTargetNode : mev.innerNode(); | 1809 Node* targetNode = overrideTargetNode ? overrideTargetNode : mev.innerNode(); |
1807 return m_mouseEventManager->dispatchMouseEvent( | 1810 return m_mouseEventManager->dispatchMouseEvent( |
1808 updateMouseEventTargetNode(targetNode), EventTypeNames::contextmenu, | 1811 updateMouseEventTargetNode(targetNode), EventTypeNames::contextmenu, |
1809 event, 0); | 1812 event, mev.hitTestResult().canvasRegionId(), 0); |
1810 } | 1813 } |
1811 | 1814 |
1812 WebInputEventResult EventHandler::sendContextMenuEventForKey( | 1815 WebInputEventResult EventHandler::sendContextMenuEventForKey( |
1813 Element* overrideTargetElement) { | 1816 Element* overrideTargetElement) { |
1814 FrameView* view = m_frame->view(); | 1817 FrameView* view = m_frame->view(); |
1815 if (!view) | 1818 if (!view) |
1816 return WebInputEventResult::NotHandled; | 1819 return WebInputEventResult::NotHandled; |
1817 | 1820 |
1818 Document* doc = m_frame->document(); | 1821 Document* doc = m_frame->document(); |
1819 if (!doc) | 1822 if (!doc) |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1876 | 1879 |
1877 // Use the focused node as the target for hover and active. | 1880 // Use the focused node as the target for hover and active. |
1878 HitTestRequest request(HitTestRequest::Active); | 1881 HitTestRequest request(HitTestRequest::Active); |
1879 HitTestResult result(request, locationInRootFrame); | 1882 HitTestResult result(request, locationInRootFrame); |
1880 result.setInnerNode(targetNode); | 1883 result.setInnerNode(targetNode); |
1881 doc->updateHoverActiveState(request, result.innerElement(), | 1884 doc->updateHoverActiveState(request, result.innerElement(), |
1882 result.scrollbar()); | 1885 result.scrollbar()); |
1883 | 1886 |
1884 // The contextmenu event is a mouse event even when invoked using the | 1887 // The contextmenu event is a mouse event even when invoked using the |
1885 // keyboard. This is required for web compatibility. | 1888 // keyboard. This is required for web compatibility. |
1886 PlatformEvent::EventType eventType = PlatformEvent::MousePressed; | 1889 WebInputEvent::Type eventType = WebInputEvent::MouseDown; |
1887 if (m_frame->settings() && m_frame->settings()->getShowContextMenuOnMouseUp()) | 1890 if (m_frame->settings() && m_frame->settings()->getShowContextMenuOnMouseUp()) |
1888 eventType = PlatformEvent::MouseReleased; | 1891 eventType = WebInputEvent::MouseUp; |
1889 | 1892 |
1890 PlatformMouseEvent mouseEvent( | 1893 WebMouseEvent mouseEvent( |
1891 locationInRootFrame, globalPosition, | 1894 eventType, |
1892 WebPointerProperties::Button::NoButton, eventType, /* clickCount */ 0, | 1895 WebFloatPoint(locationInRootFrame.x(), locationInRootFrame.y()), |
1893 PlatformEvent::NoModifiers, PlatformMouseEvent::RealOrIndistinguishable, | 1896 WebFloatPoint(globalPosition.x(), globalPosition.y()), |
1894 TimeTicks::Now(), WebPointerProperties::PointerType::Mouse); | 1897 WebPointerProperties::Button::NoButton, /* clickCount */ 0, |
1898 PlatformEvent::NoModifiers, TimeTicks::Now().InSeconds()); | |
1899 | |
1900 // TODO(dtapuska): Transition the mouseEvent to be created really in viewport | |
1901 // coordinates instead of root frame coordinates. | |
bokan
2017/01/27 16:57:17
Why? The sendContextMenuEvent expects it in root f
dtapuska
2017/01/27 21:00:00
So that it is consistent for all events. Reading t
bokan
2017/01/27 21:08:47
Right, forgot that the |position| is really in vie
| |
1902 mouseEvent.setFrameScale(1); | |
1895 | 1903 |
1896 return sendContextMenuEvent(mouseEvent, overrideTargetElement); | 1904 return sendContextMenuEvent(mouseEvent, overrideTargetElement); |
1897 } | 1905 } |
1898 | 1906 |
1899 void EventHandler::scheduleHoverStateUpdate() { | 1907 void EventHandler::scheduleHoverStateUpdate() { |
1900 // TODO(https://crbug.com/668758): Use a normal BeginFrame update for this. | 1908 // TODO(https://crbug.com/668758): Use a normal BeginFrame update for this. |
1901 if (!m_hoverTimer.isActive() && | 1909 if (!m_hoverTimer.isActive() && |
1902 !m_mouseEventManager->isMousePositionUnknown()) | 1910 !m_mouseEventManager->isMousePositionUnknown()) |
1903 m_hoverTimer.startOneShot(0, BLINK_FROM_HERE); | 1911 m_hoverTimer.startOneShot(0, BLINK_FROM_HERE); |
1904 } | 1912 } |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1980 WebInputEventResult EventHandler::keyEvent( | 1988 WebInputEventResult EventHandler::keyEvent( |
1981 const WebKeyboardEvent& initialKeyEvent) { | 1989 const WebKeyboardEvent& initialKeyEvent) { |
1982 return m_keyboardEventManager->keyEvent(initialKeyEvent); | 1990 return m_keyboardEventManager->keyEvent(initialKeyEvent); |
1983 } | 1991 } |
1984 | 1992 |
1985 void EventHandler::defaultKeyboardEventHandler(KeyboardEvent* event) { | 1993 void EventHandler::defaultKeyboardEventHandler(KeyboardEvent* event) { |
1986 m_keyboardEventManager->defaultKeyboardEventHandler( | 1994 m_keyboardEventManager->defaultKeyboardEventHandler( |
1987 event, m_mouseEventManager->mousePressNode()); | 1995 event, m_mouseEventManager->mousePressNode()); |
1988 } | 1996 } |
1989 | 1997 |
1990 void EventHandler::dragSourceEndedAt(const PlatformMouseEvent& event, | 1998 void EventHandler::dragSourceEndedAt(const WebMouseEvent& event, |
1991 DragOperation operation) { | 1999 DragOperation operation) { |
1992 // Asides from routing the event to the correct frame, the hit test is also an | 2000 // Asides from routing the event to the correct frame, the hit test is also an |
1993 // opportunity for Layer to update the :hover and :active pseudoclasses. | 2001 // opportunity for Layer to update the :hover and :active pseudoclasses. |
1994 HitTestRequest request(HitTestRequest::Release); | 2002 HitTestRequest request(HitTestRequest::Release); |
1995 MouseEventWithHitTestResults mev = | 2003 MouseEventWithHitTestResults mev = |
1996 EventHandlingUtil::performMouseEventHitTest(m_frame, request, event); | 2004 EventHandlingUtil::performMouseEventHitTest(m_frame, request, event); |
1997 | 2005 |
1998 LocalFrame* targetFrame; | 2006 LocalFrame* targetFrame; |
1999 if (targetIsFrame(mev.innerNode(), targetFrame)) { | 2007 if (targetIsFrame(mev.innerNode(), targetFrame)) { |
2000 if (targetFrame) { | 2008 if (targetFrame) { |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2093 selectionController().passMousePressEventToSubframe(mev); | 2101 selectionController().passMousePressEventToSubframe(mev); |
2094 WebInputEventResult result = | 2102 WebInputEventResult result = |
2095 subframe->eventHandler().handleMousePressEvent(mev.event()); | 2103 subframe->eventHandler().handleMousePressEvent(mev.event()); |
2096 if (result != WebInputEventResult::NotHandled) | 2104 if (result != WebInputEventResult::NotHandled) |
2097 return result; | 2105 return result; |
2098 return WebInputEventResult::HandledSystem; | 2106 return WebInputEventResult::HandledSystem; |
2099 } | 2107 } |
2100 | 2108 |
2101 WebInputEventResult EventHandler::passMouseMoveEventToSubframe( | 2109 WebInputEventResult EventHandler::passMouseMoveEventToSubframe( |
2102 MouseEventWithHitTestResults& mev, | 2110 MouseEventWithHitTestResults& mev, |
2103 const Vector<PlatformMouseEvent>& coalescedEvents, | 2111 const Vector<WebMouseEvent>& coalescedEvents, |
2104 LocalFrame* subframe, | 2112 LocalFrame* subframe, |
2105 HitTestResult* hoveredNode) { | 2113 HitTestResult* hoveredNode) { |
2106 if (m_mouseEventManager->mouseDownMayStartDrag()) | 2114 if (m_mouseEventManager->mouseDownMayStartDrag()) |
2107 return WebInputEventResult::NotHandled; | 2115 return WebInputEventResult::NotHandled; |
2108 WebInputEventResult result = | 2116 WebInputEventResult result = |
2109 subframe->eventHandler().handleMouseMoveOrLeaveEvent( | 2117 subframe->eventHandler().handleMouseMoveOrLeaveEvent( |
2110 mev.event(), coalescedEvents, hoveredNode); | 2118 mev.event(), coalescedEvents, hoveredNode); |
2111 if (result != WebInputEventResult::NotHandled) | 2119 if (result != WebInputEventResult::NotHandled) |
2112 return result; | 2120 return result; |
2113 return WebInputEventResult::HandledSystem; | 2121 return WebInputEventResult::HandledSystem; |
(...skipping 10 matching lines...) Expand all Loading... | |
2124 } | 2132 } |
2125 | 2133 |
2126 FrameHost* EventHandler::frameHost() const { | 2134 FrameHost* EventHandler::frameHost() const { |
2127 if (!m_frame->page()) | 2135 if (!m_frame->page()) |
2128 return nullptr; | 2136 return nullptr; |
2129 | 2137 |
2130 return &m_frame->page()->frameHost(); | 2138 return &m_frame->page()->frameHost(); |
2131 } | 2139 } |
2132 | 2140 |
2133 } // namespace blink | 2141 } // namespace blink |
OLD | NEW |