| 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(
|
|
|