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

Side by Side Diff: third_party/WebKit/Source/web/WebViewImpl.cpp

Issue 1463823003: Return a enumeration of the state of handling of InputEvents. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 PageWidgetEventHandler::handleMouseUp(mainFrame, event); 624 PageWidgetEventHandler::handleMouseUp(mainFrame, event);
625 625
626 if (page()->settings().showContextMenuOnMouseUp()) { 626 if (page()->settings().showContextMenuOnMouseUp()) {
627 // Dispatch the contextmenu event regardless of if the click was swallow ed. 627 // Dispatch the contextmenu event regardless of if the click was swallow ed.
628 // On Mac/Linux, we handle it on mouse down, not up. 628 // On Mac/Linux, we handle it on mouse down, not up.
629 if (event.button == WebMouseEvent::ButtonRight) 629 if (event.button == WebMouseEvent::ButtonRight)
630 mouseContextMenu(event); 630 mouseContextMenu(event);
631 } 631 }
632 } 632 }
633 633
634 bool WebViewImpl::handleMouseWheel(LocalFrame& mainFrame, const WebMouseWheelEve nt& event) 634 WebInputEventResult WebViewImpl::handleMouseWheel(LocalFrame& mainFrame, const W ebMouseWheelEvent& event)
635 { 635 {
636 hidePopups(); 636 hidePopups();
637 return PageWidgetEventHandler::handleMouseWheel(mainFrame, event); 637 return PageWidgetEventHandler::handleMouseWheel(mainFrame, event);
638 } 638 }
639 639
640 bool WebViewImpl::scrollBy(const WebFloatSize& delta, const WebFloatSize& veloci ty) 640 bool WebViewImpl::scrollBy(const WebFloatSize& delta, const WebFloatSize& veloci ty)
641 { 641 {
642 ASSERT(m_flingSourceDevice != WebGestureDeviceUninitialized); 642 ASSERT(m_flingSourceDevice != WebGestureDeviceUninitialized);
643 if (m_flingSourceDevice == WebGestureDeviceTouchpad) { 643 if (m_flingSourceDevice == WebGestureDeviceTouchpad) {
644 WebMouseWheelEvent syntheticWheel; 644 WebMouseWheelEvent syntheticWheel;
645 const float tickDivisor = WheelEvent::TickMultiplier; 645 const float tickDivisor = WheelEvent::TickMultiplier;
646 646
647 syntheticWheel.deltaX = delta.width; 647 syntheticWheel.deltaX = delta.width;
648 syntheticWheel.deltaY = delta.height; 648 syntheticWheel.deltaY = delta.height;
649 syntheticWheel.wheelTicksX = delta.width / tickDivisor; 649 syntheticWheel.wheelTicksX = delta.width / tickDivisor;
650 syntheticWheel.wheelTicksY = delta.height / tickDivisor; 650 syntheticWheel.wheelTicksY = delta.height / tickDivisor;
651 syntheticWheel.hasPreciseScrollingDeltas = true; 651 syntheticWheel.hasPreciseScrollingDeltas = true;
652 syntheticWheel.x = m_positionOnFlingStart.x; 652 syntheticWheel.x = m_positionOnFlingStart.x;
653 syntheticWheel.y = m_positionOnFlingStart.y; 653 syntheticWheel.y = m_positionOnFlingStart.y;
654 syntheticWheel.globalX = m_globalPositionOnFlingStart.x; 654 syntheticWheel.globalX = m_globalPositionOnFlingStart.x;
655 syntheticWheel.globalY = m_globalPositionOnFlingStart.y; 655 syntheticWheel.globalY = m_globalPositionOnFlingStart.y;
656 syntheticWheel.modifiers = m_flingModifier; 656 syntheticWheel.modifiers = m_flingModifier;
657 657
658 if (m_page && m_page->mainFrame() && m_page->mainFrame()->isLocalFrame() && m_page->deprecatedLocalMainFrame()->view()) 658 if (m_page && m_page->mainFrame() && m_page->mainFrame()->isLocalFrame() && m_page->deprecatedLocalMainFrame()->view())
659 return handleMouseWheel(*m_page->deprecatedLocalMainFrame(), synthet icWheel); 659 return handleMouseWheel(*m_page->deprecatedLocalMainFrame(), synthet icWheel) != WebInputEventResult::NotHandled;
660 } else { 660 } else {
661 WebGestureEvent syntheticGestureEvent; 661 WebGestureEvent syntheticGestureEvent;
662 662
663 syntheticGestureEvent.type = WebInputEvent::GestureScrollUpdate; 663 syntheticGestureEvent.type = WebInputEvent::GestureScrollUpdate;
664 syntheticGestureEvent.data.scrollUpdate.preventPropagation = true; 664 syntheticGestureEvent.data.scrollUpdate.preventPropagation = true;
665 syntheticGestureEvent.data.scrollUpdate.deltaX = delta.width; 665 syntheticGestureEvent.data.scrollUpdate.deltaX = delta.width;
666 syntheticGestureEvent.data.scrollUpdate.deltaY = delta.height; 666 syntheticGestureEvent.data.scrollUpdate.deltaY = delta.height;
667 syntheticGestureEvent.data.scrollUpdate.velocityX = velocity.width; 667 syntheticGestureEvent.data.scrollUpdate.velocityX = velocity.width;
668 syntheticGestureEvent.data.scrollUpdate.velocityY = velocity.height; 668 syntheticGestureEvent.data.scrollUpdate.velocityY = velocity.height;
669 syntheticGestureEvent.x = m_positionOnFlingStart.x; 669 syntheticGestureEvent.x = m_positionOnFlingStart.x;
670 syntheticGestureEvent.y = m_positionOnFlingStart.y; 670 syntheticGestureEvent.y = m_positionOnFlingStart.y;
671 syntheticGestureEvent.globalX = m_globalPositionOnFlingStart.x; 671 syntheticGestureEvent.globalX = m_globalPositionOnFlingStart.x;
672 syntheticGestureEvent.globalY = m_globalPositionOnFlingStart.y; 672 syntheticGestureEvent.globalY = m_globalPositionOnFlingStart.y;
673 syntheticGestureEvent.modifiers = m_flingModifier; 673 syntheticGestureEvent.modifiers = m_flingModifier;
674 syntheticGestureEvent.sourceDevice = WebGestureDeviceTouchscreen; 674 syntheticGestureEvent.sourceDevice = WebGestureDeviceTouchscreen;
675 syntheticGestureEvent.data.scrollUpdate.inertial = true; 675 syntheticGestureEvent.data.scrollUpdate.inertial = true;
676 676
677 if (m_page && m_page->mainFrame() && m_page->mainFrame()->isLocalFrame() && m_page->deprecatedLocalMainFrame()->view()) 677 if (m_page && m_page->mainFrame() && m_page->mainFrame()->isLocalFrame() && m_page->deprecatedLocalMainFrame()->view())
678 return handleGestureEvent(syntheticGestureEvent); 678 return handleGestureEvent(syntheticGestureEvent) != WebInputEventRes ult::NotHandled;
679 } 679 }
680 return false; 680 return false;
681 } 681 }
682 682
683 bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event) 683 WebInputEventResult WebViewImpl::handleGestureEvent(const WebGestureEvent& event )
684 { 684 {
685 if (!m_client) 685 if (!m_client)
686 return false; 686 return WebInputEventResult::NotHandled;
687 687
688 bool eventSwallowed = false; 688 WebInputEventResult eventResult = WebInputEventResult::NotHandled;
689 bool eventCancelled = false; // for disambiguation 689 bool eventCancelled = false; // for disambiguation
690 690
691 // Special handling for slow-path fling gestures. 691 // Special handling for slow-path fling gestures.
692 switch (event.type) { 692 switch (event.type) {
693 case WebInputEvent::GestureFlingStart: { 693 case WebInputEvent::GestureFlingStart: {
694 if (mainFrameImpl()->frame()->eventHandler().isScrollbarHandlingGestures ()) 694 if (mainFrameImpl()->frame()->eventHandler().isScrollbarHandlingGestures ())
695 break; 695 break;
696 endActiveFlingAnimation(); 696 endActiveFlingAnimation();
697 m_client->cancelScheduledContentIntents(); 697 m_client->cancelScheduledContentIntents();
698 m_positionOnFlingStart = WebPoint(event.x, event.y); 698 m_positionOnFlingStart = WebPoint(event.x, event.y);
699 m_globalPositionOnFlingStart = WebPoint(event.globalX, event.globalY); 699 m_globalPositionOnFlingStart = WebPoint(event.globalX, event.globalY);
700 m_flingModifier = event.modifiers; 700 m_flingModifier = event.modifiers;
701 m_flingSourceDevice = event.sourceDevice; 701 m_flingSourceDevice = event.sourceDevice;
702 ASSERT(m_flingSourceDevice != WebGestureDeviceUninitialized); 702 ASSERT(m_flingSourceDevice != WebGestureDeviceUninitialized);
703 OwnPtr<WebGestureCurve> flingCurve = adoptPtr(Platform::current()->creat eFlingAnimationCurve(event.sourceDevice, WebFloatPoint(event.data.flingStart.vel ocityX, event.data.flingStart.velocityY), WebSize())); 703 OwnPtr<WebGestureCurve> flingCurve = adoptPtr(Platform::current()->creat eFlingAnimationCurve(event.sourceDevice, WebFloatPoint(event.data.flingStart.vel ocityX, event.data.flingStart.velocityY), WebSize()));
704 ASSERT(flingCurve); 704 ASSERT(flingCurve);
705 m_gestureAnimation = WebActiveGestureAnimation::createAtAnimationStart(f lingCurve.release(), this); 705 m_gestureAnimation = WebActiveGestureAnimation::createAtAnimationStart(f lingCurve.release(), this);
706 scheduleAnimation(); 706 scheduleAnimation();
707 eventSwallowed = true; 707 eventResult = WebInputEventResult::HandledSystem;
708 708
709 // Plugins may need to see GestureFlingStart to balance 709 // Plugins may need to see GestureFlingStart to balance
710 // GestureScrollBegin (since the former replaces GestureScrollEnd when 710 // GestureScrollBegin (since the former replaces GestureScrollEnd when
711 // transitioning to a fling). 711 // transitioning to a fling).
712 PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event); 712 PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event);
713 // TODO(dtapuska): Why isn't the response used?
713 mainFrameImpl()->frame()->eventHandler().handleGestureScrollEvent(platfo rmEvent); 714 mainFrameImpl()->frame()->eventHandler().handleGestureScrollEvent(platfo rmEvent);
714 715
715 m_client->didHandleGestureEvent(event, eventCancelled); 716 m_client->didHandleGestureEvent(event, eventCancelled);
716 return eventSwallowed; 717 return WebInputEventResult::HandledSystem;
717 } 718 }
718 case WebInputEvent::GestureFlingCancel: 719 case WebInputEvent::GestureFlingCancel:
719 if (endActiveFlingAnimation()) 720 if (endActiveFlingAnimation())
720 eventSwallowed = true; 721 eventResult = WebInputEventResult::HandledSuppressed;
721 722
722 m_client->didHandleGestureEvent(event, eventCancelled); 723 m_client->didHandleGestureEvent(event, eventCancelled);
723 return eventSwallowed; 724 return eventResult;
724 default: 725 default:
725 break; 726 break;
726 } 727 }
727 728
728 PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), even t); 729 PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), even t);
729 730
730 // Special handling for double tap and scroll events as we don't want to 731 // Special handling for double tap and scroll events as we don't want to
731 // hit test for them. 732 // hit test for them.
732 switch (event.type) { 733 switch (event.type) {
733 case WebInputEvent::GestureDoubleTap: 734 case WebInputEvent::GestureDoubleTap:
734 if (m_webSettings->doubleTapToZoomEnabled() && minimumPageScaleFactor() != maximumPageScaleFactor()) { 735 if (m_webSettings->doubleTapToZoomEnabled() && minimumPageScaleFactor() != maximumPageScaleFactor()) {
735 m_client->cancelScheduledContentIntents(); 736 m_client->cancelScheduledContentIntents();
736 animateDoubleTapZoom(platformEvent.position()); 737 animateDoubleTapZoom(platformEvent.position());
737 } 738 }
738 // GestureDoubleTap is currently only used by Android for zooming. For W ebCore, 739 // GestureDoubleTap is currently only used by Android for zooming. For W ebCore,
739 // GestureTap with tap count = 2 is used instead. So we drop GestureDoub leTap here. 740 // GestureTap with tap count = 2 is used instead. So we drop GestureDoub leTap here.
740 eventSwallowed = true; 741 eventResult = WebInputEventResult::HandledSystem;
741 m_client->didHandleGestureEvent(event, eventCancelled); 742 m_client->didHandleGestureEvent(event, eventCancelled);
742 return eventSwallowed; 743 return eventResult;
743 case WebInputEvent::GestureScrollBegin: 744 case WebInputEvent::GestureScrollBegin:
744 m_client->cancelScheduledContentIntents(); 745 m_client->cancelScheduledContentIntents();
745 case WebInputEvent::GestureScrollEnd: 746 case WebInputEvent::GestureScrollEnd:
746 case WebInputEvent::GestureScrollUpdate: 747 case WebInputEvent::GestureScrollUpdate:
747 case WebInputEvent::GestureFlingStart: 748 case WebInputEvent::GestureFlingStart:
748 // Scrolling-related gesture events invoke EventHandler recursively for each frame down 749 // Scrolling-related gesture events invoke EventHandler recursively for each frame down
749 // the chain, doing a single-frame hit-test per frame. This matches hand leWheelEvent. 750 // the chain, doing a single-frame hit-test per frame. This matches hand leWheelEvent.
750 // Perhaps we could simplify things by rewriting scroll handling to work inner frame 751 // Perhaps we could simplify things by rewriting scroll handling to work inner frame
751 // out, and then unify with other gesture events. 752 // out, and then unify with other gesture events.
752 eventSwallowed = mainFrameImpl()->frame()->eventHandler().handleGestureS crollEvent(platformEvent); 753 eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureScro llEvent(platformEvent);
753 m_client->didHandleGestureEvent(event, eventCancelled); 754 m_client->didHandleGestureEvent(event, eventCancelled);
754 return eventSwallowed; 755 return eventResult;
755 case WebInputEvent::GesturePinchBegin: 756 case WebInputEvent::GesturePinchBegin:
756 case WebInputEvent::GesturePinchEnd: 757 case WebInputEvent::GesturePinchEnd:
757 case WebInputEvent::GesturePinchUpdate: 758 case WebInputEvent::GesturePinchUpdate:
758 return false; 759 return WebInputEventResult::NotHandled;
759 default: 760 default:
760 break; 761 break;
761 } 762 }
762 763
763 // Hit test across all frames and do touch adjustment as necessary for the e vent type. 764 // Hit test across all frames and do touch adjustment as necessary for the e vent type.
764 GestureEventWithHitTestResults targetedEvent = 765 GestureEventWithHitTestResults targetedEvent =
765 m_page->deprecatedLocalMainFrame()->eventHandler().targetGestureEvent(pl atformEvent); 766 m_page->deprecatedLocalMainFrame()->eventHandler().targetGestureEvent(pl atformEvent);
766 767
767 // Handle link highlighting outside the main switch to avoid getting lost in the 768 // Handle link highlighting outside the main switch to avoid getting lost in the
768 // complicated set of cases handled below. 769 // complicated set of cases handled below.
(...skipping 16 matching lines...) Expand all
785 case WebInputEvent::GestureTap: { 786 case WebInputEvent::GestureTap: {
786 // If there is a popup open, close it as the user is clicking on the pag e 787 // If there is a popup open, close it as the user is clicking on the pag e
787 // (outside of the popup). We also save it so we can prevent a tap on an 788 // (outside of the popup). We also save it so we can prevent a tap on an
788 // element from immediately reopening the same popup. 789 // element from immediately reopening the same popup.
789 RefPtr<WebPagePopupImpl> pagePopup = m_pagePopup; 790 RefPtr<WebPagePopupImpl> pagePopup = m_pagePopup;
790 hidePopups(); 791 hidePopups();
791 ASSERT(!m_pagePopup); 792 ASSERT(!m_pagePopup);
792 793
793 m_client->cancelScheduledContentIntents(); 794 m_client->cancelScheduledContentIntents();
794 if (detectContentOnTouch(targetedEvent)) { 795 if (detectContentOnTouch(targetedEvent)) {
795 eventSwallowed = true; 796 eventResult = WebInputEventResult::HandledSystem;
796 break; 797 break;
797 } 798 }
798 799
799 // Don't trigger a disambiguation popup on sites designed for mobile dev ices. 800 // Don't trigger a disambiguation popup on sites designed for mobile dev ices.
800 // Instead, assume that the page has been designed with big enough butto ns and links. 801 // Instead, assume that the page has been designed with big enough butto ns and links.
801 // Don't trigger a disambiguation popup when screencasting, since it's i mplemented outside of 802 // Don't trigger a disambiguation popup when screencasting, since it's i mplemented outside of
802 // compositor pipeline and is not being screencasted itself. This leads to bad user experience. 803 // compositor pipeline and is not being screencasted itself. This leads to bad user experience.
803 WebDevToolsAgentImpl* devTools = mainFrameDevToolsAgentImpl(); 804 WebDevToolsAgentImpl* devTools = mainFrameDevToolsAgentImpl();
804 VisualViewport& visualViewport = page()->frameHost().visualViewport(); 805 VisualViewport& visualViewport = page()->frameHost().visualViewport();
805 bool screencastEnabled = devTools && devTools->screencastEnabled(); 806 bool screencastEnabled = devTools && devTools->screencastEnabled();
(...skipping 13 matching lines...) Expand all
819 WillBeHeapVector<RawPtrWillBeMember<Node>> highlightNodes; 820 WillBeHeapVector<RawPtrWillBeMember<Node>> highlightNodes;
820 findGoodTouchTargets(boundingBox, mainFrameImpl()->frame(), good Targets, highlightNodes); 821 findGoodTouchTargets(boundingBox, mainFrameImpl()->frame(), good Targets, highlightNodes);
821 // FIXME: replace touch adjustment code when numberOfGoodTargets == 1? 822 // FIXME: replace touch adjustment code when numberOfGoodTargets == 1?
822 // Single candidate case is currently handled by: https://bugs.w ebkit.org/show_bug.cgi?id=85101 823 // Single candidate case is currently handled by: https://bugs.w ebkit.org/show_bug.cgi?id=85101
823 if (goodTargets.size() >= 2 && m_client 824 if (goodTargets.size() >= 2 && m_client
824 && m_client->didTapMultipleTargets(visualViewportOffset, bou ndingBox, goodTargets)) { 825 && m_client->didTapMultipleTargets(visualViewportOffset, bou ndingBox, goodTargets)) {
825 826
826 enableTapHighlights(highlightNodes); 827 enableTapHighlights(highlightNodes);
827 for (size_t i = 0; i < m_linkHighlights.size(); ++i) 828 for (size_t i = 0; i < m_linkHighlights.size(); ++i)
828 m_linkHighlights[i]->startHighlightAnimationIfNeeded(); 829 m_linkHighlights[i]->startHighlightAnimationIfNeeded();
829 eventSwallowed = true; 830 eventResult = WebInputEventResult::HandledSystem;
830 eventCancelled = true; 831 eventCancelled = true;
831 break; 832 break;
832 } 833 }
833 } 834 }
834 } 835 }
835 836
836 eventSwallowed = mainFrameImpl()->frame()->eventHandler().handleGestureE vent(targetedEvent); 837 eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEven t(targetedEvent);
837 838
838 if (m_pagePopup && pagePopup && m_pagePopup->hasSamePopupClient(pagePopu p.get())) { 839 if (m_pagePopup && pagePopup && m_pagePopup->hasSamePopupClient(pagePopu p.get())) {
839 // The tap triggered a page popup that is the same as the one we jus t closed. 840 // The tap triggered a page popup that is the same as the one we jus t closed.
840 // It needs to be closed. 841 // It needs to be closed.
841 cancelPagePopup(); 842 cancelPagePopup();
842 } 843 }
843 break; 844 break;
844 } 845 }
845 case WebInputEvent::GestureTwoFingerTap: 846 case WebInputEvent::GestureTwoFingerTap:
846 case WebInputEvent::GestureLongPress: 847 case WebInputEvent::GestureLongPress:
847 case WebInputEvent::GestureLongTap: { 848 case WebInputEvent::GestureLongTap: {
848 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) 849 if (!mainFrameImpl() || !mainFrameImpl()->frameView())
849 break; 850 break;
850 851
851 m_client->cancelScheduledContentIntents(); 852 m_client->cancelScheduledContentIntents();
852 m_page->contextMenuController().clearContextMenu(); 853 m_page->contextMenuController().clearContextMenu();
853 { 854 {
854 ContextMenuAllowedScope scope; 855 ContextMenuAllowedScope scope;
855 eventSwallowed = mainFrameImpl()->frame()->eventHandler().handleGest ureEvent(targetedEvent); 856 eventResult = mainFrameImpl()->frame()->eventHandler().handleGesture Event(targetedEvent);
856 } 857 }
857 858
858 break; 859 break;
859 } 860 }
860 case WebInputEvent::GestureShowPress: 861 case WebInputEvent::GestureShowPress:
861 m_client->cancelScheduledContentIntents(); 862 m_client->cancelScheduledContentIntents();
862 case WebInputEvent::GestureTapDown: 863 case WebInputEvent::GestureTapDown:
863 case WebInputEvent::GestureTapCancel: 864 case WebInputEvent::GestureTapCancel:
864 case WebInputEvent::GestureTapUnconfirmed: { 865 case WebInputEvent::GestureTapUnconfirmed: {
865 eventSwallowed = mainFrameImpl()->frame()->eventHandler().handleGestureE vent(targetedEvent); 866 eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEven t(targetedEvent);
866 break; 867 break;
867 } 868 }
868 default: 869 default:
869 ASSERT_NOT_REACHED(); 870 ASSERT_NOT_REACHED();
870 } 871 }
871 m_client->didHandleGestureEvent(event, eventCancelled); 872 m_client->didHandleGestureEvent(event, eventCancelled);
872 return eventSwallowed; 873 return eventResult;
873 } 874 }
874 875
875 bool WebViewImpl::handleSyntheticWheelFromTouchpadPinchEvent(const WebGestureEve nt& pinchEvent) 876 WebInputEventResult WebViewImpl::handleSyntheticWheelFromTouchpadPinchEvent(cons t WebGestureEvent& pinchEvent)
876 { 877 {
877 ASSERT(pinchEvent.type == WebInputEvent::GesturePinchUpdate); 878 ASSERT(pinchEvent.type == WebInputEvent::GesturePinchUpdate);
878 879
879 // Touchscreen pinch events should not reach Blink. 880 // Touchscreen pinch events should not reach Blink.
880 ASSERT(pinchEvent.sourceDevice == WebGestureDeviceTouchpad); 881 ASSERT(pinchEvent.sourceDevice == WebGestureDeviceTouchpad);
881 882
882 // For pinch gesture events, match typical trackpad behavior on Windows by s ending fake 883 // For pinch gesture events, match typical trackpad behavior on Windows by s ending fake
883 // wheel events with the ctrl modifier set when we see trackpad pinch gestur es. Ideally 884 // wheel events with the ctrl modifier set when we see trackpad pinch gestur es. Ideally
884 // we'd someday get a platform 'pinch' event and send that instead. 885 // we'd someday get a platform 'pinch' event and send that instead.
885 WebMouseWheelEvent wheelEvent; 886 WebMouseWheelEvent wheelEvent;
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
1014 } 1015 }
1015 1016
1016 void WebViewImpl::acceptLanguagesChanged() 1017 void WebViewImpl::acceptLanguagesChanged()
1017 { 1018 {
1018 if (!page()) 1019 if (!page())
1019 return; 1020 return;
1020 1021
1021 page()->acceptLanguagesChanged(); 1022 page()->acceptLanguagesChanged();
1022 } 1023 }
1023 1024
1024 bool WebViewImpl::handleKeyEvent(const WebKeyboardEvent& event) 1025 WebInputEventResult WebViewImpl::handleKeyEvent(const WebKeyboardEvent& event)
1025 { 1026 {
1026 ASSERT((event.type == WebInputEvent::RawKeyDown) 1027 ASSERT((event.type == WebInputEvent::RawKeyDown)
1027 || (event.type == WebInputEvent::KeyDown) 1028 || (event.type == WebInputEvent::KeyDown)
1028 || (event.type == WebInputEvent::KeyUp)); 1029 || (event.type == WebInputEvent::KeyUp));
1029 TRACE_EVENT2("input", "WebViewImpl::handleKeyEvent", 1030 TRACE_EVENT2("input", "WebViewImpl::handleKeyEvent",
1030 "type", inputTypeToName(event.type), 1031 "type", inputTypeToName(event.type),
1031 "text", String(event.text).utf8()); 1032 "text", String(event.text).utf8());
1032 1033
1033 // Halt an in-progress fling on a key event. 1034 // Halt an in-progress fling on a key event.
1034 endActiveFlingAnimation(); 1035 endActiveFlingAnimation();
1035 1036
1036 // Please refer to the comments explaining the m_suppressNextKeypressEvent 1037 // Please refer to the comments explaining the m_suppressNextKeypressEvent
1037 // member. 1038 // member.
1038 // The m_suppressNextKeypressEvent is set if the KeyDown is handled by 1039 // The m_suppressNextKeypressEvent is set if the KeyDown is handled by
1039 // Webkit. A keyDown event is typically associated with a keyPress(char) 1040 // Webkit. A keyDown event is typically associated with a keyPress(char)
1040 // event and a keyUp event. We reset this flag here as this is a new keyDown 1041 // event and a keyUp event. We reset this flag here as this is a new keyDown
1041 // event. 1042 // event.
1042 m_suppressNextKeypressEvent = false; 1043 m_suppressNextKeypressEvent = false;
1043 1044
1044 // If there is a popup, it should be the one processing the event, not the 1045 // If there is a popup, it should be the one processing the event, not the
1045 // page. 1046 // page.
1046 if (m_pagePopup) { 1047 if (m_pagePopup) {
1047 m_pagePopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)); 1048 m_pagePopup->handleKeyEvent(PlatformKeyboardEventBuilder(event));
1048 // We need to ignore the next Char event after this otherwise pressing 1049 // We need to ignore the next Char event after this otherwise pressing
1049 // enter when selecting an item in the popup will go to the page. 1050 // enter when selecting an item in the popup will go to the page.
1050 if (WebInputEvent::RawKeyDown == event.type) 1051 if (WebInputEvent::RawKeyDown == event.type)
1051 m_suppressNextKeypressEvent = true; 1052 m_suppressNextKeypressEvent = true;
1052 return true; 1053 return WebInputEventResult::HandledSystem;
1053 } 1054 }
1054 1055
1055 RefPtrWillBeRawPtr<Frame> focusedFrame = focusedCoreFrame(); 1056 RefPtrWillBeRawPtr<Frame> focusedFrame = focusedCoreFrame();
1056 if (focusedFrame && focusedFrame->isRemoteFrame()) { 1057 if (focusedFrame && focusedFrame->isRemoteFrame()) {
1057 WebRemoteFrameImpl* webFrame = WebRemoteFrameImpl::fromFrame(*toRemoteFr ame(focusedFrame.get())); 1058 WebRemoteFrameImpl* webFrame = WebRemoteFrameImpl::fromFrame(*toRemoteFr ame(focusedFrame.get()));
1058 webFrame->client()->forwardInputEvent(&event); 1059 webFrame->client()->forwardInputEvent(&event);
1059 return true; 1060 return WebInputEventResult::HandledSystem;
1060 } 1061 }
1061 1062
1062 if (!focusedFrame || !focusedFrame->isLocalFrame()) 1063 if (!focusedFrame || !focusedFrame->isLocalFrame())
1063 return false; 1064 return WebInputEventResult::NotHandled;
1064 1065
1065 LocalFrame* frame = toLocalFrame(focusedFrame.get()); 1066 LocalFrame* frame = toLocalFrame(focusedFrame.get());
1066 1067
1067 PlatformKeyboardEventBuilder evt(event); 1068 PlatformKeyboardEventBuilder evt(event);
1068 1069
1069 if (frame->eventHandler().keyEvent(evt)) { 1070 WebInputEventResult result = frame->eventHandler().keyEvent(evt);
1071 if (result != WebInputEventResult::NotHandled) {
1070 if (WebInputEvent::RawKeyDown == event.type) { 1072 if (WebInputEvent::RawKeyDown == event.type) {
1071 // Suppress the next keypress event unless the focused node is a plu gin node. 1073 // Suppress the next keypress event unless the focused node is a plu gin node.
1072 // (Flash needs these keypress events to handle non-US keyboards.) 1074 // (Flash needs these keypress events to handle non-US keyboards.)
1073 Element* element = focusedElement(); 1075 Element* element = focusedElement();
1074 if (element && element->layoutObject() && element->layoutObject()->i sEmbeddedObject()) { 1076 if (element && element->layoutObject() && element->layoutObject()->i sEmbeddedObject()) {
1075 if (event.windowsKeyCode == VKEY_TAB) { 1077 if (event.windowsKeyCode == VKEY_TAB) {
1076 // If the plugin supports keyboard focus then we should not send a tab keypress event. 1078 // If the plugin supports keyboard focus then we should not send a tab keypress event.
1077 Widget* widget = toLayoutPart(element->layoutObject())->widg et(); 1079 Widget* widget = toLayoutPart(element->layoutObject())->widg et();
1078 if (widget && widget->isPluginContainer()) { 1080 if (widget && widget->isPluginContainer()) {
1079 WebPluginContainerImpl* plugin = toWebPluginContainerImp l(widget); 1081 WebPluginContainerImpl* plugin = toWebPluginContainerImp l(widget);
1080 if (plugin && plugin->supportsKeyboardFocus()) 1082 if (plugin && plugin->supportsKeyboardFocus())
1081 m_suppressNextKeypressEvent = true; 1083 m_suppressNextKeypressEvent = true;
1082 } 1084 }
1083 } 1085 }
1084 } else { 1086 } else {
1085 m_suppressNextKeypressEvent = true; 1087 m_suppressNextKeypressEvent = true;
1086 } 1088 }
1087 } 1089 }
1088 return true; 1090 return result;
1089 } 1091 }
1090 1092
1091 #if !OS(MACOSX) 1093 #if !OS(MACOSX)
1092 const WebInputEvent::Type contextMenuTriggeringEventType = 1094 const WebInputEvent::Type contextMenuTriggeringEventType =
1093 #if OS(WIN) 1095 #if OS(WIN)
1094 WebInputEvent::KeyUp; 1096 WebInputEvent::KeyUp;
1095 #else 1097 #else
1096 WebInputEvent::RawKeyDown; 1098 WebInputEvent::RawKeyDown;
1097 #endif 1099 #endif
1098 1100
1099 bool isUnmodifiedMenuKey = !(event.modifiers & WebInputEvent::InputModifiers ) && event.windowsKeyCode == VKEY_APPS; 1101 bool isUnmodifiedMenuKey = !(event.modifiers & WebInputEvent::InputModifiers ) && event.windowsKeyCode == VKEY_APPS;
1100 bool isShiftF10 = event.modifiers == WebInputEvent::ShiftKey && event.window sKeyCode == VKEY_F10; 1102 bool isShiftF10 = event.modifiers == WebInputEvent::ShiftKey && event.window sKeyCode == VKEY_F10;
1101 if ((isUnmodifiedMenuKey || isShiftF10) && event.type == contextMenuTriggeri ngEventType) { 1103 if ((isUnmodifiedMenuKey || isShiftF10) && event.type == contextMenuTriggeri ngEventType) {
1102 sendContextMenuEvent(event); 1104 sendContextMenuEvent(event);
1103 return true; 1105 return WebInputEventResult::HandledSystem;
1104 } 1106 }
1105 #endif // !OS(MACOSX) 1107 #endif // !OS(MACOSX)
1106 1108
1107 return keyEventDefault(event); 1109 if (keyEventDefault(event))
1110 return WebInputEventResult::HandledSystem;
1111 return WebInputEventResult::NotHandled;
1108 } 1112 }
1109 1113
1110 bool WebViewImpl::handleCharEvent(const WebKeyboardEvent& event) 1114 WebInputEventResult WebViewImpl::handleCharEvent(const WebKeyboardEvent& event)
1111 { 1115 {
1112 ASSERT(event.type == WebInputEvent::Char); 1116 ASSERT(event.type == WebInputEvent::Char);
1113 TRACE_EVENT1("input", "WebViewImpl::handleCharEvent", 1117 TRACE_EVENT1("input", "WebViewImpl::handleCharEvent",
1114 "text", String(event.text).utf8()); 1118 "text", String(event.text).utf8());
1115 1119
1116 // Please refer to the comments explaining the m_suppressNextKeypressEvent 1120 // Please refer to the comments explaining the m_suppressNextKeypressEvent
1117 // member. The m_suppressNextKeypressEvent is set if the KeyDown is 1121 // member. The m_suppressNextKeypressEvent is set if the KeyDown is
1118 // handled by Webkit. A keyDown event is typically associated with a 1122 // handled by Webkit. A keyDown event is typically associated with a
1119 // keyPress(char) event and a keyUp event. We reset this flag here as it 1123 // keyPress(char) event and a keyUp event. We reset this flag here as it
1120 // only applies to the current keyPress event. 1124 // only applies to the current keyPress event.
1121 bool suppress = m_suppressNextKeypressEvent; 1125 bool suppress = m_suppressNextKeypressEvent;
1122 m_suppressNextKeypressEvent = false; 1126 m_suppressNextKeypressEvent = false;
1123 1127
1124 // If there is a popup, it should be the one processing the event, not the 1128 // If there is a popup, it should be the one processing the event, not the
1125 // page. 1129 // page.
1126 if (m_pagePopup) 1130 if (m_pagePopup)
1127 return m_pagePopup->handleKeyEvent(PlatformKeyboardEventBuilder(event)); 1131 return m_pagePopup->handleKeyEvent(PlatformKeyboardEventBuilder(event));
1128 1132
1129 LocalFrame* frame = toLocalFrame(focusedCoreFrame()); 1133 LocalFrame* frame = toLocalFrame(focusedCoreFrame());
1130 if (!frame) 1134 if (!frame)
1131 return suppress; 1135 return suppress ? WebInputEventResult::HandledSuppressed : WebInputEvent Result::NotHandled;
1132 1136
1133 EventHandler& handler = frame->eventHandler(); 1137 EventHandler& handler = frame->eventHandler();
1134 1138
1135 PlatformKeyboardEventBuilder evt(event); 1139 PlatformKeyboardEventBuilder evt(event);
1136 if (!evt.isCharacterKey()) 1140 if (!evt.isCharacterKey())
1137 return true; 1141 return WebInputEventResult::HandledSuppressed;
1138 1142
1139 // Accesskeys are triggered by char events and can't be suppressed. 1143 // Accesskeys are triggered by char events and can't be suppressed.
1140 if (handler.handleAccessKey(evt)) 1144 if (handler.handleAccessKey(evt))
1141 return true; 1145 return WebInputEventResult::HandledSystem;
1142 1146
1143 // Safari 3.1 does not pass off windows system key messages (WM_SYSCHAR) to 1147 // Safari 3.1 does not pass off windows system key messages (WM_SYSCHAR) to
1144 // the eventHandler::keyEvent. We mimic this behavior on all platforms since 1148 // the eventHandler::keyEvent. We mimic this behavior on all platforms since
1145 // for now we are converting other platform's key events to windows key 1149 // for now we are converting other platform's key events to windows key
1146 // events. 1150 // events.
1147 if (evt.isSystemKey()) 1151 if (evt.isSystemKey())
1148 return false; 1152 return WebInputEventResult::NotHandled;
1149 1153
1150 if (!suppress && !handler.keyEvent(evt)) 1154 if (suppress)
1151 return keyEventDefault(event); 1155 return WebInputEventResult::HandledSuppressed;
1152 1156
1153 return true; 1157 WebInputEventResult result = handler.keyEvent(evt);
1158 if (result != WebInputEventResult::NotHandled)
1159 return result;
1160 if (keyEventDefault(event))
1161 return WebInputEventResult::HandledSystem;
1162
1163 return WebInputEventResult::NotHandled;
1154 } 1164 }
1155 1165
1156 WebRect WebViewImpl::computeBlockBound(const WebPoint& pointInRootFrame, bool ig noreClipping) 1166 WebRect WebViewImpl::computeBlockBound(const WebPoint& pointInRootFrame, bool ig noreClipping)
1157 { 1167 {
1158 if (!mainFrameImpl()) 1168 if (!mainFrameImpl())
1159 return WebRect(); 1169 return WebRect();
1160 1170
1161 // Use the point-based hit test to find the node. 1171 // Use the point-based hit test to find the node.
1162 IntPoint point = mainFrameImpl()->frameView()->rootFrameToContents(IntPoint( pointInRootFrame.x, pointInRootFrame.y)); 1172 IntPoint point = mainFrameImpl()->frameView()->rootFrameToContents(IntPoint( pointInRootFrame.x, pointInRootFrame.y));
1163 HitTestRequest::HitTestRequestType hitType = HitTestRequest::ReadOnly | HitT estRequest::Active | (ignoreClipping ? HitTestRequest::IgnoreClipping : 0); 1173 HitTestRequest::HitTestRequestType hitType = HitTestRequest::ReadOnly | HitT estRequest::Active | (ignoreClipping ? HitTestRequest::IgnoreClipping : 0);
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1471 } 1481 }
1472 1482
1473 bool WebViewImpl::hasTouchEventHandlersAt(const WebPoint& point) 1483 bool WebViewImpl::hasTouchEventHandlersAt(const WebPoint& point)
1474 { 1484 {
1475 // FIXME: Implement this. Note that the point must be divided by pageScaleFa ctor. 1485 // FIXME: Implement this. Note that the point must be divided by pageScaleFa ctor.
1476 return true; 1486 return true;
1477 } 1487 }
1478 1488
1479 #if !OS(MACOSX) 1489 #if !OS(MACOSX)
1480 // Mac has no way to open a context menu based on a keyboard event. 1490 // Mac has no way to open a context menu based on a keyboard event.
1481 bool WebViewImpl::sendContextMenuEvent(const WebKeyboardEvent& event) 1491 WebInputEventResult WebViewImpl::sendContextMenuEvent(const WebKeyboardEvent& ev ent)
1482 { 1492 {
1483 // The contextMenuController() holds onto the last context menu that was 1493 // The contextMenuController() holds onto the last context menu that was
1484 // popped up on the page until a new one is created. We need to clear 1494 // popped up on the page until a new one is created. We need to clear
1485 // this menu before propagating the event through the DOM so that we can 1495 // this menu before propagating the event through the DOM so that we can
1486 // detect if we create a new menu for this event, since we won't create 1496 // detect if we create a new menu for this event, since we won't create
1487 // a new menu if the DOM swallows the event and the defaultEventHandler does 1497 // a new menu if the DOM swallows the event and the defaultEventHandler does
1488 // not run. 1498 // not run.
1489 page()->contextMenuController().clearContextMenu(); 1499 page()->contextMenuController().clearContextMenu();
1490 1500
1491 bool handled;
1492 { 1501 {
1493 ContextMenuAllowedScope scope; 1502 ContextMenuAllowedScope scope;
1494 Frame* focusedFrame = page()->focusController().focusedOrMainFrame(); 1503 Frame* focusedFrame = page()->focusController().focusedOrMainFrame();
1495 if (!focusedFrame->isLocalFrame()) 1504 if (!focusedFrame->isLocalFrame())
1496 return false; 1505 return WebInputEventResult::NotHandled;
1497 handled = toLocalFrame(focusedFrame)->eventHandler().sendContextMenuEven tForKey(nullptr); 1506 return toLocalFrame(focusedFrame)->eventHandler().sendContextMenuEventFo rKey(nullptr);
1498 } 1507 }
1499 return handled;
1500 } 1508 }
1501 #endif 1509 #endif
1502 1510
1503 void WebViewImpl::showContextMenuAtPoint(float x, float y, PassRefPtrWillBeRawPt r<ContextMenuProvider> menuProvider) 1511 void WebViewImpl::showContextMenuAtPoint(float x, float y, PassRefPtrWillBeRawPt r<ContextMenuProvider> menuProvider)
1504 { 1512 {
1505 if (!page()->mainFrame()->isLocalFrame()) 1513 if (!page()->mainFrame()->isLocalFrame())
1506 return; 1514 return;
1507 { 1515 {
1508 ContextMenuAllowedScope scope; 1516 ContextMenuAllowedScope scope;
1509 page()->contextMenuController().clearContextMenu(); 1517 page()->contextMenuController().clearContextMenu();
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after
2025 return mainFrameImpl()->frameView()->horizontalScrollbar(); 2033 return mainFrameImpl()->frameView()->horizontalScrollbar();
2026 } 2034 }
2027 2035
2028 bool WebViewImpl::hasVerticalScrollbar() 2036 bool WebViewImpl::hasVerticalScrollbar()
2029 { 2037 {
2030 return mainFrameImpl()->frameView()->verticalScrollbar(); 2038 return mainFrameImpl()->frameView()->verticalScrollbar();
2031 } 2039 }
2032 2040
2033 const WebInputEvent* WebViewImpl::m_currentInputEvent = nullptr; 2041 const WebInputEvent* WebViewImpl::m_currentInputEvent = nullptr;
2034 2042
2035 bool WebViewImpl::handleInputEvent(const WebInputEvent& inputEvent) 2043 WebInputEventResult WebViewImpl::handleInputEvent(const WebInputEvent& inputEven t)
2036 { 2044 {
2037 // TODO(dcheng): The fact that this is getting called when there is no local 2045 // TODO(dcheng): The fact that this is getting called when there is no local
2038 // main frame is problematic and probably indicates a bug in the input event 2046 // main frame is problematic and probably indicates a bug in the input event
2039 // routing code. 2047 // routing code.
2040 if (!mainFrameImpl()) 2048 if (!mainFrameImpl())
2041 return false; 2049 return WebInputEventResult::NotHandled;
2042 2050
2043 WebAutofillClient* autofillClient = mainFrameImpl()->autofillClient(); 2051 WebAutofillClient* autofillClient = mainFrameImpl()->autofillClient();
2044 UserGestureNotifier notifier(autofillClient, &m_userGestureObserved); 2052 UserGestureNotifier notifier(autofillClient, &m_userGestureObserved);
2045 // On the first input event since page load, |notifier| instructs the 2053 // On the first input event since page load, |notifier| instructs the
2046 // autofill client to unblock values of password input fields of any forms 2054 // autofill client to unblock values of password input fields of any forms
2047 // on the page. There is a single input event, GestureTap, which can both 2055 // on the page. There is a single input event, GestureTap, which can both
2048 // be the first event after page load, and cause a form submission. In that 2056 // be the first event after page load, and cause a form submission. In that
2049 // case, the form submission happens before the autofill client is told 2057 // case, the form submission happens before the autofill client is told
2050 // to unblock the password values, and so the password values are not 2058 // to unblock the password values, and so the password values are not
2051 // submitted. To avoid that, GestureTap is handled explicitly: 2059 // submitted. To avoid that, GestureTap is handled explicitly:
2052 if (inputEvent.type == WebInputEvent::GestureTap && autofillClient) { 2060 if (inputEvent.type == WebInputEvent::GestureTap && autofillClient) {
2053 m_userGestureObserved = true; 2061 m_userGestureObserved = true;
2054 autofillClient->firstUserGestureObserved(); 2062 autofillClient->firstUserGestureObserved();
2055 } 2063 }
2056 2064
2057 page()->frameHost().visualViewport().startTrackingPinchStats(); 2065 page()->frameHost().visualViewport().startTrackingPinchStats();
2058 2066
2059 TRACE_EVENT1("input", "WebViewImpl::handleInputEvent", "type", inputTypeToNa me(inputEvent.type)); 2067 TRACE_EVENT1("input", "WebViewImpl::handleInputEvent", "type", inputTypeToNa me(inputEvent.type));
2060 // If we've started a drag and drop operation, ignore input events until 2068 // If we've started a drag and drop operation, ignore input events until
2061 // we're done. 2069 // we're done.
2062 if (m_doingDragAndDrop) 2070 if (m_doingDragAndDrop)
2063 return true; 2071 return WebInputEventResult::HandledSuppressed;
2064 2072
2065 if (m_devToolsEmulator->handleInputEvent(inputEvent)) 2073 if (m_devToolsEmulator->handleInputEvent(inputEvent))
2066 return true; 2074 return WebInputEventResult::HandledSuppressed;
2067 2075
2068 if (InspectorOverlay* overlay = inspectorOverlay()) { 2076 if (InspectorOverlay* overlay = inspectorOverlay()) {
2069 if (overlay->handleInputEvent(inputEvent)) 2077 if (overlay->handleInputEvent(inputEvent))
2070 return true; 2078 return WebInputEventResult::HandledSuppressed;
2071 } 2079 }
2072 2080
2073 if (inputEvent.modifiers & WebInputEvent::IsTouchAccessibility 2081 if (inputEvent.modifiers & WebInputEvent::IsTouchAccessibility
2074 && WebInputEvent::isMouseEventType(inputEvent.type)) { 2082 && WebInputEvent::isMouseEventType(inputEvent.type)) {
2075 PlatformMouseEventBuilder pme(mainFrameImpl()->frameView(), static_cast< const WebMouseEvent&>(inputEvent)); 2083 PlatformMouseEventBuilder pme(mainFrameImpl()->frameView(), static_cast< const WebMouseEvent&>(inputEvent));
2076 2084
2077 // Find the right target frame. See issue 1186900. 2085 // Find the right target frame. See issue 1186900.
2078 HitTestResult result = hitTestResultForRootFramePos(pme.position()); 2086 HitTestResult result = hitTestResultForRootFramePos(pme.position());
2079 Frame* targetFrame; 2087 Frame* targetFrame;
2080 if (result.innerNodeOrImageMapImage()) 2088 if (result.innerNodeOrImageMapImage())
2081 targetFrame = result.innerNodeOrImageMapImage()->document().frame(); 2089 targetFrame = result.innerNodeOrImageMapImage()->document().frame();
2082 else 2090 else
2083 targetFrame = m_page->focusController().focusedOrMainFrame(); 2091 targetFrame = m_page->focusController().focusedOrMainFrame();
2084 2092
2085 if (targetFrame->isLocalFrame()) { 2093 if (targetFrame->isLocalFrame()) {
2086 LocalFrame* targetLocalFrame = toLocalFrame(targetFrame); 2094 LocalFrame* targetLocalFrame = toLocalFrame(targetFrame);
2087 Document* document = targetLocalFrame->document(); 2095 Document* document = targetLocalFrame->document();
2088 if (document) { 2096 if (document) {
2089 AXObjectCache* cache = document->existingAXObjectCache(); 2097 AXObjectCache* cache = document->existingAXObjectCache();
2090 if (cache) 2098 if (cache)
2091 cache->onTouchAccessibilityHover(pme.position()); 2099 cache->onTouchAccessibilityHover(pme.position());
2092 } 2100 }
2093 } 2101 }
2094 } 2102 }
2095 2103
2096 // Report the event to be NOT processed by WebKit, so that the browser can h andle it appropriately. 2104 // Report the event to be NOT processed by WebKit, so that the browser can h andle it appropriately.
2097 if (m_ignoreInputEvents) 2105 if (m_ignoreInputEvents)
2098 return false; 2106 return WebInputEventResult::NotHandled;
2099 2107
2100 TemporaryChange<const WebInputEvent*> currentEventChange(m_currentInputEvent , &inputEvent); 2108 TemporaryChange<const WebInputEvent*> currentEventChange(m_currentInputEvent , &inputEvent);
2101 UIEventWithKeyState::clearNewTabModifierSetFromIsolatedWorld(); 2109 UIEventWithKeyState::clearNewTabModifierSetFromIsolatedWorld();
2102 2110
2103 if (isPointerLocked() && WebInputEvent::isMouseEventType(inputEvent.type)) { 2111 if (isPointerLocked() && WebInputEvent::isMouseEventType(inputEvent.type)) {
2104 pointerLockMouseEvent(inputEvent); 2112 pointerLockMouseEvent(inputEvent);
2105 return true; 2113 return WebInputEventResult::HandledSystem;
2106 } 2114 }
2107 2115
2108 if (m_mouseCaptureNode && WebInputEvent::isMouseEventType(inputEvent.type)) { 2116 if (m_mouseCaptureNode && WebInputEvent::isMouseEventType(inputEvent.type)) {
2109 TRACE_EVENT1("input", "captured mouse event", "type", inputEvent.type); 2117 TRACE_EVENT1("input", "captured mouse event", "type", inputEvent.type);
2110 // Save m_mouseCaptureNode since mouseCaptureLost() will clear it. 2118 // Save m_mouseCaptureNode since mouseCaptureLost() will clear it.
2111 RefPtrWillBeRawPtr<Node> node = m_mouseCaptureNode; 2119 RefPtrWillBeRawPtr<Node> node = m_mouseCaptureNode;
2112 2120
2113 // Not all platforms call mouseCaptureLost() directly. 2121 // Not all platforms call mouseCaptureLost() directly.
2114 if (inputEvent.type == WebInputEvent::MouseUp) 2122 if (inputEvent.type == WebInputEvent::MouseUp)
2115 mouseCaptureLost(); 2123 mouseCaptureLost();
(...skipping 17 matching lines...) Expand all
2133 eventType = EventTypeNames::mouseup; 2141 eventType = EventTypeNames::mouseup;
2134 gestureIndicator = adoptPtr(new UserGestureIndicator(m_mouseCaptureG estureToken.release())); 2142 gestureIndicator = adoptPtr(new UserGestureIndicator(m_mouseCaptureG estureToken.release()));
2135 break; 2143 break;
2136 default: 2144 default:
2137 ASSERT_NOT_REACHED(); 2145 ASSERT_NOT_REACHED();
2138 } 2146 }
2139 2147
2140 node->dispatchMouseEvent( 2148 node->dispatchMouseEvent(
2141 PlatformMouseEventBuilder(mainFrameImpl()->frameView(), static_cast< const WebMouseEvent&>(inputEvent)), 2149 PlatformMouseEventBuilder(mainFrameImpl()->frameView(), static_cast< const WebMouseEvent&>(inputEvent)),
2142 eventType, static_cast<const WebMouseEvent&>(inputEvent).clickCount) ; 2150 eventType, static_cast<const WebMouseEvent&>(inputEvent).clickCount) ;
2143 return true; 2151 return WebInputEventResult::HandledSystem;
2144 } 2152 }
2145 2153
2146 // FIXME: This should take in the intended frame, not the local frame root. 2154 // FIXME: This should take in the intended frame, not the local frame root.
2147 if (PageWidgetDelegate::handleInputEvent(*this, inputEvent, mainFrameImpl()- >frame())) 2155 WebInputEventResult result = PageWidgetDelegate::handleInputEvent(*this, inp utEvent, mainFrameImpl()->frame());
2148 return true; 2156 if (result != WebInputEventResult::NotHandled)
2157 return result;
2149 2158
2150 // Unhandled touchpad gesture pinch events synthesize mouse wheel events. 2159 // Unhandled touchpad gesture pinch events synthesize mouse wheel events.
2151 if (inputEvent.type == WebInputEvent::GesturePinchUpdate) { 2160 if (inputEvent.type == WebInputEvent::GesturePinchUpdate) {
2152 const WebGestureEvent& pinchEvent = static_cast<const WebGestureEvent&>( inputEvent); 2161 const WebGestureEvent& pinchEvent = static_cast<const WebGestureEvent&>( inputEvent);
2153 2162
2154 // First, synthesize a Windows-like wheel event to send to any handlers that may exist. 2163 // First, synthesize a Windows-like wheel event to send to any handlers that may exist.
2155 if (handleSyntheticWheelFromTouchpadPinchEvent(pinchEvent)) 2164 result = handleSyntheticWheelFromTouchpadPinchEvent(pinchEvent);
2156 return true; 2165 if (result != WebInputEventResult::NotHandled)
2166 return result;
2157 2167
2158 if (pinchEvent.data.pinchUpdate.zoomDisabled) 2168 if (pinchEvent.data.pinchUpdate.zoomDisabled)
2159 return false; 2169 return WebInputEventResult::NotHandled;
2160 2170
2161 if (page()->frameHost().visualViewport().magnifyScaleAroundAnchor(pinchE vent.data.pinchUpdate.scale, FloatPoint(pinchEvent.x, pinchEvent.y))) 2171 if (page()->frameHost().visualViewport().magnifyScaleAroundAnchor(pinchE vent.data.pinchUpdate.scale, FloatPoint(pinchEvent.x, pinchEvent.y)))
2162 return true; 2172 return WebInputEventResult::HandledSystem;
2163 } 2173 }
2164 2174
2165 return false; 2175 return WebInputEventResult::NotHandled;
2166 } 2176 }
2167 2177
2168 void WebViewImpl::setCursorVisibilityState(bool isVisible) 2178 void WebViewImpl::setCursorVisibilityState(bool isVisible)
2169 { 2179 {
2170 if (m_page) 2180 if (m_page)
2171 m_page->setIsCursorVisible(isVisible); 2181 m_page->setIsCursorVisible(isVisible);
2172 } 2182 }
2173 2183
2174 void WebViewImpl::mouseCaptureLost() 2184 void WebViewImpl::mouseCaptureLost()
2175 { 2185 {
(...skipping 2276 matching lines...) Expand 10 before | Expand all | Expand 10 after
4452 if (m_pageColorOverlay) 4462 if (m_pageColorOverlay)
4453 m_pageColorOverlay->update(); 4463 m_pageColorOverlay->update();
4454 if (InspectorOverlay* overlay = inspectorOverlay()) { 4464 if (InspectorOverlay* overlay = inspectorOverlay()) {
4455 PageOverlay* inspectorPageOverlay = overlay->pageOverlay(); 4465 PageOverlay* inspectorPageOverlay = overlay->pageOverlay();
4456 if (inspectorPageOverlay) 4466 if (inspectorPageOverlay)
4457 inspectorPageOverlay->update(); 4467 inspectorPageOverlay->update();
4458 } 4468 }
4459 } 4469 }
4460 4470
4461 } // namespace blink 4471 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698