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

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

Issue 2807123002: Fix the wrong non-element node handling in EventHanlder and MouseEventManager (Closed)
Patch Set: Addressed Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 634 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 if (is_middle_click_autoscroll_in_progress) { 645 if (is_middle_click_autoscroll_in_progress) {
646 // We invalidate the click when exiting middle click auto scroll so that 646 // We invalidate the click when exiting middle click auto scroll so that
647 // we don't inadvertently navigate away from the current page (e.g. the 647 // we don't inadvertently navigate away from the current page (e.g. the
648 // click was on a hyperlink). See <rdar://problem/6095023>. 648 // click was on a hyperlink). See <rdar://problem/6095023>.
649 mouse_event_manager_->InvalidateClick(); 649 mouse_event_manager_->InvalidateClick();
650 return WebInputEventResult::kHandledSuppressed; 650 return WebInputEventResult::kHandledSuppressed;
651 } 651 }
652 } 652 }
653 653
654 mouse_event_manager_->SetClickCount(mouse_event.click_count); 654 mouse_event_manager_->SetClickCount(mouse_event.click_count);
655 mouse_event_manager_->SetClickNode( 655 mouse_event_manager_->SetClickElement(
656 mev.InnerNode()->IsTextNode() 656 EventHandlingUtil::ParentElementIfNeeded(mev.InnerNode()));
657 ? FlatTreeTraversal::Parent(*mev.InnerNode())
658 : mev.InnerNode());
659 657
660 if (!mouse_event.FromTouch()) 658 if (!mouse_event.FromTouch())
661 frame_->Selection().SetCaretBlinkingSuspended(true); 659 frame_->Selection().SetCaretBlinkingSuspended(true);
662 660
663 WebInputEventResult event_result = UpdatePointerTargetAndDispatchEvents( 661 WebInputEventResult event_result = UpdatePointerTargetAndDispatchEvents(
664 EventTypeNames::mousedown, mev.InnerNode(), mev.CanvasRegionId(), 662 EventTypeNames::mousedown, mev.InnerNode(), mev.CanvasRegionId(),
665 mev.Event(), Vector<WebMouseEvent>()); 663 mev.Event(), Vector<WebMouseEvent>());
666 664
667 if (event_result == WebInputEventResult::kNotHandled && frame_->View()) { 665 if (event_result == WebInputEventResult::kNotHandled && frame_->View()) {
668 FrameView* view = frame_->View(); 666 FrameView* view = frame_->View();
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
953 String(), mouse_event, Vector<WebMouseEvent>()); 951 String(), mouse_event, Vector<WebMouseEvent>());
954 } 952 }
955 953
956 // Mouse events simulated from touch should not hit-test again. 954 // Mouse events simulated from touch should not hit-test again.
957 ASSERT(!mouse_event.FromTouch()); 955 ASSERT(!mouse_event.FromTouch());
958 956
959 HitTestRequest::HitTestRequestType hit_type = HitTestRequest::kRelease; 957 HitTestRequest::HitTestRequestType hit_type = HitTestRequest::kRelease;
960 HitTestRequest request(hit_type); 958 HitTestRequest request(hit_type);
961 MouseEventWithHitTestResults mev = 959 MouseEventWithHitTestResults mev =
962 EventHandlingUtil::PerformMouseEventHitTest(frame_, request, mouse_event); 960 EventHandlingUtil::PerformMouseEventHitTest(frame_, request, mouse_event);
963 Node* release_node = (mev.InnerNode() && mev.InnerNode()->IsTextNode()) 961 Element* mouse_release_target =
964 ? FlatTreeTraversal::Parent(*mev.InnerNode()) 962 EventHandlingUtil::ParentElementIfNeeded(mev.InnerNode());
965 : mev.InnerNode();
966 LocalFrame* subframe = 963 LocalFrame* subframe =
967 capturing_mouse_events_node_.Get() 964 capturing_mouse_events_node_.Get()
968 ? SubframeForTargetNode(capturing_mouse_events_node_.Get()) 965 ? SubframeForTargetNode(capturing_mouse_events_node_.Get())
969 : SubframeForHitTestResult(mev); 966 : SubframeForHitTestResult(mev);
970 if (event_handler_will_reset_capturing_mouse_events_node_) 967 if (event_handler_will_reset_capturing_mouse_events_node_)
971 capturing_mouse_events_node_ = nullptr; 968 capturing_mouse_events_node_ = nullptr;
972 if (subframe) 969 if (subframe)
973 return PassMouseReleaseEventToSubframe(mev, subframe); 970 return PassMouseReleaseEventToSubframe(mev, subframe);
974 971
975 // Mouse events will be associated with the Document where mousedown 972 // Mouse events will be associated with the Document where mousedown
(...skipping 12 matching lines...) Expand all
988 } else { 985 } else {
989 gesture_indicator = WTF::WrapUnique(new UserGestureIndicator( 986 gesture_indicator = WTF::WrapUnique(new UserGestureIndicator(
990 DocumentUserGestureToken::Create(frame_->GetDocument()))); 987 DocumentUserGestureToken::Create(frame_->GetDocument())));
991 } 988 }
992 989
993 WebInputEventResult event_result = UpdatePointerTargetAndDispatchEvents( 990 WebInputEventResult event_result = UpdatePointerTargetAndDispatchEvents(
994 EventTypeNames::mouseup, mev.InnerNode(), mev.CanvasRegionId(), 991 EventTypeNames::mouseup, mev.InnerNode(), mev.CanvasRegionId(),
995 mev.Event(), Vector<WebMouseEvent>()); 992 mev.Event(), Vector<WebMouseEvent>());
996 993
997 WebInputEventResult click_event_result = 994 WebInputEventResult click_event_result =
998 mouse_event_manager_->DispatchMouseClickIfNeeded(mev, release_node); 995 mouse_release_target ? mouse_event_manager_->DispatchMouseClickIfNeeded(
996 mev, *mouse_release_target)
997 : WebInputEventResult::kNotHandled;
999 998
1000 scroll_manager_->ClearResizeScrollableArea(false); 999 scroll_manager_->ClearResizeScrollableArea(false);
1001 1000
1002 if (event_result == WebInputEventResult::kNotHandled) 1001 if (event_result == WebInputEventResult::kNotHandled)
1003 event_result = mouse_event_manager_->HandleMouseReleaseEvent(mev); 1002 event_result = mouse_event_manager_->HandleMouseReleaseEvent(mev);
1004 mouse_event_manager_->ClearDragHeuristicState(); 1003 mouse_event_manager_->ClearDragHeuristicState();
1005 1004
1006 mouse_event_manager_->InvalidateClick(); 1005 mouse_event_manager_->InvalidateClick();
1007 1006
1008 return EventHandlingUtil::MergeEventResult(click_event_result, event_result); 1007 return EventHandlingUtil::MergeEventResult(click_event_result, event_result);
(...skipping 1104 matching lines...) Expand 10 before | Expand all | Expand 10 after
2113 MouseEventWithHitTestResults& mev, 2112 MouseEventWithHitTestResults& mev,
2114 LocalFrame* subframe) { 2113 LocalFrame* subframe) {
2115 WebInputEventResult result = 2114 WebInputEventResult result =
2116 subframe->GetEventHandler().HandleMouseReleaseEvent(mev.Event()); 2115 subframe->GetEventHandler().HandleMouseReleaseEvent(mev.Event());
2117 if (result != WebInputEventResult::kNotHandled) 2116 if (result != WebInputEventResult::kNotHandled)
2118 return result; 2117 return result;
2119 return WebInputEventResult::kHandledSystem; 2118 return WebInputEventResult::kHandledSystem;
2120 } 2119 }
2121 2120
2122 } // namespace blink 2121 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698