| 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 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 enum NoCursorChangeType { kNoCursorChange }; | 161 enum NoCursorChangeType { kNoCursorChange }; |
| 162 | 162 |
| 163 class OptionalCursor { | 163 class OptionalCursor { |
| 164 public: | 164 public: |
| 165 OptionalCursor(NoCursorChangeType) : is_cursor_change_(false) {} | 165 OptionalCursor(NoCursorChangeType) : is_cursor_change_(false) {} |
| 166 OptionalCursor(const Cursor& cursor) | 166 OptionalCursor(const Cursor& cursor) |
| 167 : is_cursor_change_(true), cursor_(cursor) {} | 167 : is_cursor_change_(true), cursor_(cursor) {} |
| 168 | 168 |
| 169 bool IsCursorChange() const { return is_cursor_change_; } | 169 bool IsCursorChange() const { return is_cursor_change_; } |
| 170 const Cursor& GetCursor() const { | 170 const Cursor& GetCursor() const { |
| 171 ASSERT(is_cursor_change_); | 171 DCHECK(is_cursor_change_); |
| 172 return cursor_; | 172 return cursor_; |
| 173 } | 173 } |
| 174 | 174 |
| 175 private: | 175 private: |
| 176 bool is_cursor_change_; | 176 bool is_cursor_change_; |
| 177 Cursor cursor_; | 177 Cursor cursor_; |
| 178 }; | 178 }; |
| 179 | 179 |
| 180 EventHandler::EventHandler(LocalFrame& frame) | 180 EventHandler::EventHandler(LocalFrame& frame) |
| 181 : frame_(frame), | 181 : frame_(frame), |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 } | 361 } |
| 362 | 362 |
| 363 bool EventHandler::UseHandCursor(Node* node, bool is_over_link) { | 363 bool EventHandler::UseHandCursor(Node* node, bool is_over_link) { |
| 364 if (!node) | 364 if (!node) |
| 365 return false; | 365 return false; |
| 366 | 366 |
| 367 return ((is_over_link || IsSubmitImage(node)) && !HasEditableStyle(*node)); | 367 return ((is_over_link || IsSubmitImage(node)) && !HasEditableStyle(*node)); |
| 368 } | 368 } |
| 369 | 369 |
| 370 void EventHandler::CursorUpdateTimerFired(TimerBase*) { | 370 void EventHandler::CursorUpdateTimerFired(TimerBase*) { |
| 371 ASSERT(frame_); | 371 DCHECK(frame_); |
| 372 ASSERT(frame_->GetDocument()); | 372 DCHECK(frame_->GetDocument()); |
| 373 | 373 |
| 374 UpdateCursor(); | 374 UpdateCursor(); |
| 375 } | 375 } |
| 376 | 376 |
| 377 void EventHandler::UpdateCursor() { | 377 void EventHandler::UpdateCursor() { |
| 378 TRACE_EVENT0("input", "EventHandler::updateCursor"); | 378 TRACE_EVENT0("input", "EventHandler::updateCursor"); |
| 379 | 379 |
| 380 // We must do a cross-frame hit test because the frame that triggered the | 380 // We must do a cross-frame hit test because the frame that triggered the |
| 381 // cursor update could be occluded by a different frame. | 381 // cursor update could be occluded by a different frame. |
| 382 DCHECK_EQ(frame_, &frame_->LocalFrameRoot()); | 382 DCHECK_EQ(frame_, &frame_->LocalFrameRoot()); |
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 785 page->GetChromeClient().ClearToolTip(*frame_); | 785 page->GetChromeClient().ClearToolTip(*frame_); |
| 786 HandleMouseMoveOrLeaveEvent(event, Vector<WebMouseEvent>(), 0, false, true); | 786 HandleMouseMoveOrLeaveEvent(event, Vector<WebMouseEvent>(), 0, false, true); |
| 787 } | 787 } |
| 788 | 788 |
| 789 WebInputEventResult EventHandler::HandleMouseMoveOrLeaveEvent( | 789 WebInputEventResult EventHandler::HandleMouseMoveOrLeaveEvent( |
| 790 const WebMouseEvent& mouse_event, | 790 const WebMouseEvent& mouse_event, |
| 791 const Vector<WebMouseEvent>& coalesced_events, | 791 const Vector<WebMouseEvent>& coalesced_events, |
| 792 HitTestResult* hovered_node, | 792 HitTestResult* hovered_node, |
| 793 bool only_update_scrollbars, | 793 bool only_update_scrollbars, |
| 794 bool force_leave) { | 794 bool force_leave) { |
| 795 ASSERT(frame_); | 795 DCHECK(frame_); |
| 796 ASSERT(frame_->View()); | 796 DCHECK(frame_->View()); |
| 797 | 797 |
| 798 mouse_event_manager_->SetLastKnownMousePosition(mouse_event); | 798 mouse_event_manager_->SetLastKnownMousePosition(mouse_event); |
| 799 | 799 |
| 800 hover_timer_.Stop(); | 800 hover_timer_.Stop(); |
| 801 cursor_update_timer_.Stop(); | 801 cursor_update_timer_.Stop(); |
| 802 | 802 |
| 803 mouse_event_manager_->CancelFakeMouseMoveEvent(); | 803 mouse_event_manager_->CancelFakeMouseMoveEvent(); |
| 804 mouse_event_manager_->HandleSvgPanIfNeeded(false); | 804 mouse_event_manager_->HandleSvgPanIfNeeded(false); |
| 805 | 805 |
| 806 if (frame_set_being_resized_) { | 806 if (frame_set_being_resized_) { |
| 807 return UpdatePointerTargetAndDispatchEvents( | 807 return UpdatePointerTargetAndDispatchEvents( |
| 808 EventTypeNames::mousemove, frame_set_being_resized_.Get(), String(), | 808 EventTypeNames::mousemove, frame_set_being_resized_.Get(), String(), |
| 809 mouse_event, coalesced_events); | 809 mouse_event, coalesced_events); |
| 810 } | 810 } |
| 811 | 811 |
| 812 // Send events right to a scrollbar if the mouse is pressed. | 812 // Send events right to a scrollbar if the mouse is pressed. |
| 813 if (last_scrollbar_under_mouse_ && mouse_event_manager_->MousePressed()) { | 813 if (last_scrollbar_under_mouse_ && mouse_event_manager_->MousePressed()) { |
| 814 last_scrollbar_under_mouse_->MouseMoved(mouse_event); | 814 last_scrollbar_under_mouse_->MouseMoved(mouse_event); |
| 815 return WebInputEventResult::kHandledSystem; | 815 return WebInputEventResult::kHandledSystem; |
| 816 } | 816 } |
| 817 | 817 |
| 818 // Mouse events simulated from touch should not hit-test again. | 818 // Mouse events simulated from touch should not hit-test again. |
| 819 ASSERT(!mouse_event.FromTouch()); | 819 DCHECK(!mouse_event.FromTouch()); |
| 820 | 820 |
| 821 HitTestRequest::HitTestRequestType hit_type = HitTestRequest::kMove; | 821 HitTestRequest::HitTestRequestType hit_type = HitTestRequest::kMove; |
| 822 if (mouse_event_manager_->MousePressed()) { | 822 if (mouse_event_manager_->MousePressed()) { |
| 823 hit_type |= HitTestRequest::kActive; | 823 hit_type |= HitTestRequest::kActive; |
| 824 } else if (only_update_scrollbars) { | 824 } else if (only_update_scrollbars) { |
| 825 // Mouse events should be treated as "read-only" if we're updating only | 825 // Mouse events should be treated as "read-only" if we're updating only |
| 826 // scrollbars. This means that :hover and :active freeze in the state they | 826 // scrollbars. This means that :hover and :active freeze in the state they |
| 827 // were in, rather than updating for nodes the mouse moves while the window | 827 // were in, rather than updating for nodes the mouse moves while the window |
| 828 // is not key (which will be the case if onlyUpdateScrollbars is true). | 828 // is not key (which will be the case if onlyUpdateScrollbars is true). |
| 829 hit_type |= HitTestRequest::kReadOnly; | 829 hit_type |= HitTestRequest::kReadOnly; |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 951 | 951 |
| 952 if (last_scrollbar_under_mouse_) { | 952 if (last_scrollbar_under_mouse_) { |
| 953 mouse_event_manager_->InvalidateClick(); | 953 mouse_event_manager_->InvalidateClick(); |
| 954 last_scrollbar_under_mouse_->MouseUp(mouse_event); | 954 last_scrollbar_under_mouse_->MouseUp(mouse_event); |
| 955 return UpdatePointerTargetAndDispatchEvents( | 955 return UpdatePointerTargetAndDispatchEvents( |
| 956 EventTypeNames::mouseup, mouse_event_manager_->GetNodeUnderMouse(), | 956 EventTypeNames::mouseup, mouse_event_manager_->GetNodeUnderMouse(), |
| 957 String(), mouse_event, Vector<WebMouseEvent>()); | 957 String(), mouse_event, Vector<WebMouseEvent>()); |
| 958 } | 958 } |
| 959 | 959 |
| 960 // Mouse events simulated from touch should not hit-test again. | 960 // Mouse events simulated from touch should not hit-test again. |
| 961 ASSERT(!mouse_event.FromTouch()); | 961 DCHECK(!mouse_event.FromTouch()); |
| 962 | 962 |
| 963 HitTestRequest::HitTestRequestType hit_type = HitTestRequest::kRelease; | 963 HitTestRequest::HitTestRequestType hit_type = HitTestRequest::kRelease; |
| 964 HitTestRequest request(hit_type); | 964 HitTestRequest request(hit_type); |
| 965 MouseEventWithHitTestResults mev = | 965 MouseEventWithHitTestResults mev = |
| 966 EventHandlingUtil::PerformMouseEventHitTest(frame_, request, mouse_event); | 966 EventHandlingUtil::PerformMouseEventHitTest(frame_, request, mouse_event); |
| 967 Element* mouse_release_target = mev.InnerElement(); | 967 Element* mouse_release_target = mev.InnerElement(); |
| 968 LocalFrame* subframe = | 968 LocalFrame* subframe = |
| 969 capturing_mouse_events_node_.Get() | 969 capturing_mouse_events_node_.Get() |
| 970 ? SubframeForTargetNode(capturing_mouse_events_node_.Get()) | 970 ? SubframeForTargetNode(capturing_mouse_events_node_.Get()) |
| 971 : SubframeForHitTestResult(mev); | 971 : SubframeForHitTestResult(mev); |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1334 TRACE_EVENT0("input", "EventHandler::handleGestureEvent"); | 1334 TRACE_EVENT0("input", "EventHandler::handleGestureEvent"); |
| 1335 if (!frame_->GetPage()) | 1335 if (!frame_->GetPage()) |
| 1336 return WebInputEventResult::kNotHandled; | 1336 return WebInputEventResult::kNotHandled; |
| 1337 | 1337 |
| 1338 // Propagation to inner frames is handled below this function. | 1338 // Propagation to inner frames is handled below this function. |
| 1339 DCHECK_EQ(frame_, &frame_->LocalFrameRoot()); | 1339 DCHECK_EQ(frame_, &frame_->LocalFrameRoot()); |
| 1340 | 1340 |
| 1341 // Non-scrolling related gesture events do a single cross-frame hit-test and | 1341 // Non-scrolling related gesture events do a single cross-frame hit-test and |
| 1342 // jump directly to the inner most frame. This matches handleMousePressEvent | 1342 // jump directly to the inner most frame. This matches handleMousePressEvent |
| 1343 // etc. | 1343 // etc. |
| 1344 ASSERT(!targeted_event.Event().IsScrollEvent()); | 1344 DCHECK(!targeted_event.Event().IsScrollEvent()); |
| 1345 | 1345 |
| 1346 // Update mouseout/leave/over/enter events before jumping directly to the | 1346 // Update mouseout/leave/over/enter events before jumping directly to the |
| 1347 // inner most frame. | 1347 // inner most frame. |
| 1348 if (targeted_event.Event().GetType() == WebInputEvent::kGestureTap) | 1348 if (targeted_event.Event().GetType() == WebInputEvent::kGestureTap) |
| 1349 UpdateGestureTargetNodeForMouseEvent(targeted_event); | 1349 UpdateGestureTargetNodeForMouseEvent(targeted_event); |
| 1350 | 1350 |
| 1351 // Route to the correct frame. | 1351 // Route to the correct frame. |
| 1352 if (LocalFrame* inner_frame = | 1352 if (LocalFrame* inner_frame = |
| 1353 targeted_event.GetHitTestResult().InnerNodeFrame()) | 1353 targeted_event.GetHitTestResult().InnerNodeFrame()) |
| 1354 return inner_frame->GetEventHandler().HandleGestureEventInFrame( | 1354 return inner_frame->GetEventHandler().HandleGestureEventInFrame( |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1396 return !event.TapAreaInRootFrame().IsEmpty(); | 1396 return !event.TapAreaInRootFrame().IsEmpty(); |
| 1397 } | 1397 } |
| 1398 | 1398 |
| 1399 bool EventHandler::BestClickableNodeForHitTestResult( | 1399 bool EventHandler::BestClickableNodeForHitTestResult( |
| 1400 const HitTestResult& result, | 1400 const HitTestResult& result, |
| 1401 IntPoint& target_point, | 1401 IntPoint& target_point, |
| 1402 Node*& target_node) { | 1402 Node*& target_node) { |
| 1403 // FIXME: Unify this with the other best* functions which are very similar. | 1403 // FIXME: Unify this with the other best* functions which are very similar. |
| 1404 | 1404 |
| 1405 TRACE_EVENT0("input", "EventHandler::bestClickableNodeForHitTestResult"); | 1405 TRACE_EVENT0("input", "EventHandler::bestClickableNodeForHitTestResult"); |
| 1406 ASSERT(result.IsRectBasedTest()); | 1406 DCHECK(result.IsRectBasedTest()); |
| 1407 | 1407 |
| 1408 // If the touch is over a scrollbar, don't adjust the touch point since touch | 1408 // If the touch is over a scrollbar, don't adjust the touch point since touch |
| 1409 // adjustment only takes into account DOM nodes so a touch over a scrollbar | 1409 // adjustment only takes into account DOM nodes so a touch over a scrollbar |
| 1410 // will be adjusted towards nearby nodes. This leads to things like textarea | 1410 // will be adjusted towards nearby nodes. This leads to things like textarea |
| 1411 // scrollbars being untouchable. | 1411 // scrollbars being untouchable. |
| 1412 if (result.GetScrollbar()) { | 1412 if (result.GetScrollbar()) { |
| 1413 target_node = 0; | 1413 target_node = 0; |
| 1414 return false; | 1414 return false; |
| 1415 } | 1415 } |
| 1416 | 1416 |
| 1417 IntPoint touch_center = | 1417 IntPoint touch_center = |
| 1418 frame_->View()->ContentsToRootFrame(result.RoundedPointInMainFrame()); | 1418 frame_->View()->ContentsToRootFrame(result.RoundedPointInMainFrame()); |
| 1419 IntRect touch_rect = frame_->View()->ContentsToRootFrame( | 1419 IntRect touch_rect = frame_->View()->ContentsToRootFrame( |
| 1420 result.GetHitTestLocation().BoundingBox()); | 1420 result.GetHitTestLocation().BoundingBox()); |
| 1421 | 1421 |
| 1422 HeapVector<Member<Node>, 11> nodes; | 1422 HeapVector<Member<Node>, 11> nodes; |
| 1423 CopyToVector(result.ListBasedTestResult(), nodes); | 1423 CopyToVector(result.ListBasedTestResult(), nodes); |
| 1424 | 1424 |
| 1425 // FIXME: the explicit Vector conversion copies into a temporary and is | 1425 // FIXME: the explicit Vector conversion copies into a temporary and is |
| 1426 // wasteful. | 1426 // wasteful. |
| 1427 return FindBestClickableCandidate(target_node, target_point, touch_center, | 1427 return FindBestClickableCandidate(target_node, target_point, touch_center, |
| 1428 touch_rect, | 1428 touch_rect, |
| 1429 HeapVector<Member<Node>>(nodes)); | 1429 HeapVector<Member<Node>>(nodes)); |
| 1430 } | 1430 } |
| 1431 | 1431 |
| 1432 bool EventHandler::BestContextMenuNodeForHitTestResult( | 1432 bool EventHandler::BestContextMenuNodeForHitTestResult( |
| 1433 const HitTestResult& result, | 1433 const HitTestResult& result, |
| 1434 IntPoint& target_point, | 1434 IntPoint& target_point, |
| 1435 Node*& target_node) { | 1435 Node*& target_node) { |
| 1436 ASSERT(result.IsRectBasedTest()); | 1436 DCHECK(result.IsRectBasedTest()); |
| 1437 IntPoint touch_center = | 1437 IntPoint touch_center = |
| 1438 frame_->View()->ContentsToRootFrame(result.RoundedPointInMainFrame()); | 1438 frame_->View()->ContentsToRootFrame(result.RoundedPointInMainFrame()); |
| 1439 IntRect touch_rect = frame_->View()->ContentsToRootFrame( | 1439 IntRect touch_rect = frame_->View()->ContentsToRootFrame( |
| 1440 result.GetHitTestLocation().BoundingBox()); | 1440 result.GetHitTestLocation().BoundingBox()); |
| 1441 HeapVector<Member<Node>, 11> nodes; | 1441 HeapVector<Member<Node>, 11> nodes; |
| 1442 CopyToVector(result.ListBasedTestResult(), nodes); | 1442 CopyToVector(result.ListBasedTestResult(), nodes); |
| 1443 | 1443 |
| 1444 // FIXME: the explicit Vector conversion copies into a temporary and is | 1444 // FIXME: the explicit Vector conversion copies into a temporary and is |
| 1445 // wasteful. | 1445 // wasteful. |
| 1446 return FindBestContextMenuCandidate(target_node, target_point, touch_center, | 1446 return FindBestContextMenuCandidate(target_node, target_point, touch_center, |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1633 } | 1633 } |
| 1634 } | 1634 } |
| 1635 | 1635 |
| 1636 GestureEventWithHitTestResults EventHandler::TargetGestureEvent( | 1636 GestureEventWithHitTestResults EventHandler::TargetGestureEvent( |
| 1637 const WebGestureEvent& gesture_event, | 1637 const WebGestureEvent& gesture_event, |
| 1638 bool read_only) { | 1638 bool read_only) { |
| 1639 TRACE_EVENT0("input", "EventHandler::targetGestureEvent"); | 1639 TRACE_EVENT0("input", "EventHandler::targetGestureEvent"); |
| 1640 | 1640 |
| 1641 DCHECK_EQ(frame_, &frame_->LocalFrameRoot()); | 1641 DCHECK_EQ(frame_, &frame_->LocalFrameRoot()); |
| 1642 // Scrolling events get hit tested per frame (like wheel events do). | 1642 // Scrolling events get hit tested per frame (like wheel events do). |
| 1643 ASSERT(!gesture_event.IsScrollEvent()); | 1643 DCHECK(!gesture_event.IsScrollEvent()); |
| 1644 | 1644 |
| 1645 HitTestRequest::HitTestRequestType hit_type = | 1645 HitTestRequest::HitTestRequestType hit_type = |
| 1646 gesture_manager_->GetHitTypeForGestureType(gesture_event.GetType()); | 1646 gesture_manager_->GetHitTypeForGestureType(gesture_event.GetType()); |
| 1647 TimeDelta active_interval; | 1647 TimeDelta active_interval; |
| 1648 bool should_keep_active_for_min_interval = false; | 1648 bool should_keep_active_for_min_interval = false; |
| 1649 if (read_only) { | 1649 if (read_only) { |
| 1650 hit_type |= HitTestRequest::kReadOnly; | 1650 hit_type |= HitTestRequest::kReadOnly; |
| 1651 } else if (gesture_event.GetType() == WebInputEvent::kGestureTap && | 1651 } else if (gesture_event.GetType() == WebInputEvent::kGestureTap && |
| 1652 gesture_manager_->GetLastShowPressTimestamp()) { | 1652 gesture_manager_->GetLastShowPressTimestamp()) { |
| 1653 // If the Tap is received very shortly after ShowPress, we want to | 1653 // If the Tap is received very shortly after ShowPress, we want to |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1719 hit_test_result = EventHandlingUtil::HitTestResultInFrame( | 1719 hit_test_result = EventHandlingUtil::HitTestResultInFrame( |
| 1720 hit_frame, | 1720 hit_frame, |
| 1721 hit_frame->View()->RootFrameToContents( | 1721 hit_frame->View()->RootFrameToContents( |
| 1722 FlooredIntPoint(adjusted_event.PositionInRootFrame())), | 1722 FlooredIntPoint(adjusted_event.PositionInRootFrame())), |
| 1723 (hit_type | HitTestRequest::kReadOnly) & ~HitTestRequest::kListBased); | 1723 (hit_type | HitTestRequest::kReadOnly) & ~HitTestRequest::kListBased); |
| 1724 } | 1724 } |
| 1725 | 1725 |
| 1726 // If we did a rect-based hit test it must be resolved to the best single node | 1726 // If we did a rect-based hit test it must be resolved to the best single node |
| 1727 // by now to ensure consumers don't accidentally use one of the other | 1727 // by now to ensure consumers don't accidentally use one of the other |
| 1728 // candidates. | 1728 // candidates. |
| 1729 ASSERT(!hit_test_result.IsRectBasedTest()); | 1729 DCHECK(!hit_test_result.IsRectBasedTest()); |
| 1730 | 1730 |
| 1731 return GestureEventWithHitTestResults(adjusted_event, hit_test_result); | 1731 return GestureEventWithHitTestResults(adjusted_event, hit_test_result); |
| 1732 } | 1732 } |
| 1733 | 1733 |
| 1734 void EventHandler::ApplyTouchAdjustment(WebGestureEvent* gesture_event, | 1734 void EventHandler::ApplyTouchAdjustment(WebGestureEvent* gesture_event, |
| 1735 HitTestResult* hit_test_result) { | 1735 HitTestResult* hit_test_result) { |
| 1736 if (!ShouldApplyTouchAdjustment(*gesture_event)) | 1736 if (!ShouldApplyTouchAdjustment(*gesture_event)) |
| 1737 return; | 1737 return; |
| 1738 | 1738 |
| 1739 Node* adjusted_node = nullptr; | 1739 Node* adjusted_node = nullptr; |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1929 frame_set_being_resized_ = frame_set; | 1929 frame_set_being_resized_ = frame_set; |
| 1930 } | 1930 } |
| 1931 | 1931 |
| 1932 void EventHandler::ResizeScrollableAreaDestroyed() { | 1932 void EventHandler::ResizeScrollableAreaDestroyed() { |
| 1933 scroll_manager_->ClearResizeScrollableArea(true); | 1933 scroll_manager_->ClearResizeScrollableArea(true); |
| 1934 } | 1934 } |
| 1935 | 1935 |
| 1936 void EventHandler::HoverTimerFired(TimerBase*) { | 1936 void EventHandler::HoverTimerFired(TimerBase*) { |
| 1937 TRACE_EVENT0("input", "EventHandler::hoverTimerFired"); | 1937 TRACE_EVENT0("input", "EventHandler::hoverTimerFired"); |
| 1938 | 1938 |
| 1939 ASSERT(frame_); | 1939 DCHECK(frame_); |
| 1940 ASSERT(frame_->GetDocument()); | 1940 DCHECK(frame_->GetDocument()); |
| 1941 | 1941 |
| 1942 if (LayoutViewItem layout_item = frame_->ContentLayoutItem()) { | 1942 if (LayoutViewItem layout_item = frame_->ContentLayoutItem()) { |
| 1943 if (FrameView* view = frame_->View()) { | 1943 if (FrameView* view = frame_->View()) { |
| 1944 HitTestRequest request(HitTestRequest::kMove); | 1944 HitTestRequest request(HitTestRequest::kMove); |
| 1945 HitTestResult result(request, | 1945 HitTestResult result(request, |
| 1946 view->RootFrameToContents( | 1946 view->RootFrameToContents( |
| 1947 mouse_event_manager_->LastKnownMousePosition())); | 1947 mouse_event_manager_->LastKnownMousePosition())); |
| 1948 layout_item.HitTest(result); | 1948 layout_item.HitTest(result); |
| 1949 frame_->GetDocument()->UpdateHoverActiveState(request, | 1949 frame_->GetDocument()->UpdateHoverActiveState(request, |
| 1950 result.InnerElement()); | 1950 result.InnerElement()); |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2117 MouseEventWithHitTestResults& mev, | 2117 MouseEventWithHitTestResults& mev, |
| 2118 LocalFrame* subframe) { | 2118 LocalFrame* subframe) { |
| 2119 WebInputEventResult result = | 2119 WebInputEventResult result = |
| 2120 subframe->GetEventHandler().HandleMouseReleaseEvent(mev.Event()); | 2120 subframe->GetEventHandler().HandleMouseReleaseEvent(mev.Event()); |
| 2121 if (result != WebInputEventResult::kNotHandled) | 2121 if (result != WebInputEventResult::kNotHandled) |
| 2122 return result; | 2122 return result; |
| 2123 return WebInputEventResult::kHandledSystem; | 2123 return WebInputEventResult::kHandledSystem; |
| 2124 } | 2124 } |
| 2125 | 2125 |
| 2126 } // namespace blink | 2126 } // namespace blink |
| OLD | NEW |