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

Unified Diff: third_party/WebKit/Source/core/input/EventHandler.cpp

Issue 2936023002: MouseWheelEventManager is added to handle wheel events. (Closed)
Patch Set: review comments addressed. Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/input/EventHandler.cpp
diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp
index 6b7dbae6315f52828a398c5d4a45c876dbe87ed4..d55bf538ba0a0e22f840899a56e0c9e5930121d8 100644
--- a/third_party/WebKit/Source/core/input/EventHandler.cpp
+++ b/third_party/WebKit/Source/core/input/EventHandler.cpp
@@ -51,7 +51,6 @@
#include "core/events/PointerEvent.h"
#include "core/events/TextEvent.h"
#include "core/events/TouchEvent.h"
-#include "core/events/WheelEvent.h"
#include "core/frame/Deprecation.h"
#include "core/frame/EventHandlerRegistry.h"
#include "core/frame/LocalFrame.h"
@@ -69,7 +68,6 @@
#include "core/input/TouchActionUtil.h"
#include "core/layout/HitTestRequest.h"
#include "core/layout/HitTestResult.h"
-#include "core/layout/LayoutEmbeddedContent.h"
#include "core/layout/LayoutView.h"
#include "core/layout/api/LayoutViewItem.h"
#include "core/loader/DocumentLoader.h"
@@ -192,6 +190,8 @@ EventHandler::EventHandler(LocalFrame& frame)
should_only_fire_drag_over_event_(false),
scroll_manager_(new ScrollManager(frame)),
mouse_event_manager_(new MouseEventManager(frame, *scroll_manager_)),
+ mouse_wheel_event_manager_(
+ new MouseWheelEventManager(frame, *scroll_manager_)),
keyboard_event_manager_(
new KeyboardEventManager(frame, *scroll_manager_)),
pointer_event_manager_(
@@ -216,6 +216,7 @@ DEFINE_TRACE(EventHandler) {
visitor->Trace(frame_set_being_resized_);
visitor->Trace(scroll_manager_);
visitor->Trace(mouse_event_manager_);
+ visitor->Trace(mouse_wheel_event_manager_);
visitor->Trace(keyboard_event_manager_);
visitor->Trace(pointer_event_manager_);
visitor->Trace(gesture_manager_);
@@ -334,29 +335,6 @@ IntPoint EventHandler::DragDataTransferLocationForTesting() {
return IntPoint();
}
-static LocalFrame* SubframeForTargetNode(Node* node) {
- if (!node)
- return nullptr;
-
- LayoutObject* layout_object = node->GetLayoutObject();
- if (!layout_object || !layout_object->IsLayoutEmbeddedContent())
- return nullptr;
-
- LocalFrameView* frame_view =
- ToLayoutEmbeddedContent(layout_object)->ChildFrameView();
- if (!frame_view)
- return nullptr;
-
- return &frame_view->GetFrame();
-}
-
-static LocalFrame* SubframeForHitTestResult(
- const MouseEventWithHitTestResults& hit_test_result) {
- if (!hit_test_result.IsOverEmbeddedContentView())
- return nullptr;
- return SubframeForTargetNode(hit_test_result.InnerNode());
-}
-
static bool IsSubmitImage(Node* node) {
return isHTMLInputElement(node) &&
toHTMLInputElement(node)->type() == InputTypeNames::image;
@@ -618,7 +596,7 @@ WebInputEventResult EventHandler::HandleMousePressEvent(
frame_->GetDocument()->SetSequentialFocusNavigationStartingPoint(
mev.InnerNode());
- LocalFrame* subframe = SubframeForHitTestResult(mev);
+ LocalFrame* subframe = EventHandlingUtil::SubframeForHitTestResult(mev);
if (subframe) {
WebInputEventResult result = PassMousePressEventToSubframe(mev, subframe);
// Start capturing future events for this frame. We only do this if we
@@ -868,10 +846,10 @@ WebInputEventResult EventHandler::HandleMouseMoveOrLeaveEvent(
}
WebInputEventResult event_result = WebInputEventResult::kNotHandled;
- LocalFrame* new_subframe =
- capturing_mouse_events_node_.Get()
- ? SubframeForTargetNode(capturing_mouse_events_node_.Get())
- : SubframeForHitTestResult(mev);
+ LocalFrame* new_subframe = capturing_mouse_events_node_.Get()
+ ? EventHandlingUtil::SubframeForTargetNode(
+ capturing_mouse_events_node_.Get())
+ : EventHandlingUtil::SubframeForHitTestResult(mev);
// We want mouseouts to happen first, from the inside out. First send a move
// event to the last subframe so that it will fire mouseouts.
@@ -967,10 +945,10 @@ WebInputEventResult EventHandler::HandleMouseReleaseEvent(
MouseEventWithHitTestResults mev =
EventHandlingUtil::PerformMouseEventHitTest(frame_, request, mouse_event);
Element* mouse_release_target = mev.InnerElement();
- LocalFrame* subframe =
- capturing_mouse_events_node_.Get()
- ? SubframeForTargetNode(capturing_mouse_events_node_.Get())
- : SubframeForHitTestResult(mev);
+ LocalFrame* subframe = capturing_mouse_events_node_.Get()
+ ? EventHandlingUtil::SubframeForTargetNode(
+ capturing_mouse_events_node_.Get())
+ : EventHandlingUtil::SubframeForHitTestResult(mev);
if (event_handler_will_reset_capturing_mouse_events_node_)
capturing_mouse_events_node_ = nullptr;
if (subframe)
@@ -1265,62 +1243,7 @@ WebInputEventResult EventHandler::UpdatePointerTargetAndDispatchEvents(
WebInputEventResult EventHandler::HandleWheelEvent(
const WebMouseWheelEvent& event) {
-#if OS(MACOSX)
- // Filter Mac OS specific phases, usually with a zero-delta.
- // https://crbug.com/553732
- // TODO(chongz): EventSender sends events with
- // |WebMouseWheelEvent::PhaseNone|,
- // but it shouldn't.
- const int kWheelEventPhaseNoEventMask = WebMouseWheelEvent::kPhaseEnded |
- WebMouseWheelEvent::kPhaseCancelled |
- WebMouseWheelEvent::kPhaseMayBegin;
- if ((event.phase & kWheelEventPhaseNoEventMask) ||
- (event.momentum_phase & kWheelEventPhaseNoEventMask))
- return WebInputEventResult::kNotHandled;
-#endif
- Document* doc = frame_->GetDocument();
-
- if (doc->GetLayoutViewItem().IsNull())
- return WebInputEventResult::kNotHandled;
-
- LocalFrameView* view = frame_->View();
- if (!view)
- return WebInputEventResult::kNotHandled;
-
- LayoutPoint v_point =
- view->RootFrameToContents(FlooredIntPoint(event.PositionInRootFrame()));
-
- HitTestRequest request(HitTestRequest::kReadOnly);
- HitTestResult result(request, v_point);
- doc->GetLayoutViewItem().HitTest(result);
-
- Node* node = result.InnerNode();
- // Wheel events should not dispatch to text nodes.
- if (node && node->IsTextNode())
- node = FlatTreeTraversal::Parent(*node);
-
- // If we're over the frame scrollbar, scroll the document.
- if (!node && result.GetScrollbar())
- node = doc->documentElement();
-
- LocalFrame* subframe = SubframeForTargetNode(node);
- if (subframe) {
- WebInputEventResult result =
- subframe->GetEventHandler().HandleWheelEvent(event);
- if (result != WebInputEventResult::kNotHandled)
- scroll_manager_->SetFrameWasScrolledByUser();
- return result;
- }
-
- if (node) {
- WheelEvent* dom_event =
- WheelEvent::Create(event, node->GetDocument().domWindow());
- DispatchEventResult dom_event_result = node->DispatchEvent(dom_event);
- if (dom_event_result != DispatchEventResult::kNotCanceled)
- return EventHandlingUtil::ToWebInputEventResult(dom_event_result);
- }
-
- return WebInputEventResult::kNotHandled;
+ return mouse_wheel_event_manager_->HandleWheelEvent(event);
}
WebInputEventResult EventHandler::HandleGestureEvent(
« no previous file with comments | « third_party/WebKit/Source/core/input/EventHandler.h ('k') | third_party/WebKit/Source/core/input/EventHandlingUtil.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698