summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/input/mouse_event_manager.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-02-13 16:23:34 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-02-14 10:37:21 +0000
commit38a9a29f4f9436cace7f0e7abf9c586057df8a4e (patch)
treec4e8c458dc595bc0ddb435708fa2229edfd00bd4 /chromium/third_party/blink/renderer/core/input/mouse_event_manager.cc
parente684a3455bcc29a6e3e66a004e352dea4e1141e7 (diff)
downloadqtwebengine-chromium-38a9a29f4f9436cace7f0e7abf9c586057df8a4e.tar.gz
BASELINE: Update Chromium to 73.0.3683.37
Change-Id: I08c9af2948b645f671e5d933aca1f7a90ea372f2 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/third_party/blink/renderer/core/input/mouse_event_manager.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/input/mouse_event_manager.cc130
1 files changed, 56 insertions, 74 deletions
diff --git a/chromium/third_party/blink/renderer/core/input/mouse_event_manager.cc b/chromium/third_party/blink/renderer/core/input/mouse_event_manager.cc
index 7b5b4009d8e..17c58aca747 100644
--- a/chromium/third_party/blink/renderer/core/input/mouse_event_manager.cc
+++ b/chromium/third_party/blink/renderer/core/input/mouse_event_manager.cc
@@ -119,7 +119,7 @@ MouseEventManager::MouseEventManager(LocalFrame& frame,
}
void MouseEventManager::Clear() {
- node_under_mouse_ = nullptr;
+ element_under_mouse_ = nullptr;
mouse_press_node_ = nullptr;
mouse_down_may_start_autoscroll_ = false;
mouse_down_may_start_drag_ = false;
@@ -146,7 +146,7 @@ MouseEventManager::~MouseEventManager() = default;
void MouseEventManager::Trace(blink::Visitor* visitor) {
visitor->Trace(frame_);
visitor->Trace(scroll_manager_);
- visitor->Trace(node_under_mouse_);
+ visitor->Trace(element_under_mouse_);
visitor->Trace(mouse_press_node_);
visitor->Trace(click_element_);
visitor->Trace(mouse_down_element_);
@@ -287,23 +287,19 @@ WebInputEventResult MouseEventManager::DispatchMouseEvent(
}
WebInputEventResult MouseEventManager::SetMousePositionAndDispatchMouseEvent(
- Node* target_node,
+ Element* target_element,
const String& canvas_region_id,
const AtomicString& event_type,
const WebMouseEvent& web_mouse_event) {
- // If the target node is a text node, dispatch on the parent node.
- if (target_node && target_node->IsTextNode())
- target_node = FlatTreeTraversal::Parent(*target_node);
-
- SetNodeUnderMouse(target_node, canvas_region_id, web_mouse_event);
-
- return DispatchMouseEvent(node_under_mouse_, event_type, web_mouse_event,
+ SetElementUnderMouse(target_element, canvas_region_id, web_mouse_event);
+ return DispatchMouseEvent(element_under_mouse_, event_type, web_mouse_event,
canvas_region_id, nullptr, nullptr);
}
WebInputEventResult MouseEventManager::DispatchMouseClickIfNeeded(
- const MouseEventWithHitTestResults& mev,
- Element& mouse_release_target) {
+ Element* mouse_release_target,
+ const WebMouseEvent& mouse_event,
+ const String& canvas_region_id) {
// We only prevent click event when the click may cause contextmenu to popup.
// However, we always send auxclick.
bool context_menu_event = false;
@@ -311,20 +307,17 @@ WebInputEventResult MouseEventManager::DispatchMouseClickIfNeeded(
// FIXME: The Mac port achieves the same behavior by checking whether the
// context menu is currently open in WebPage::mouseEvent(). Consider merging
// the implementations.
- if (mev.Event().button == WebPointerProperties::Button::kLeft &&
- mev.Event().GetModifiers() & WebInputEvent::Modifiers::kControlKey)
+ if (mouse_event.button == WebPointerProperties::Button::kLeft &&
+ mouse_event.GetModifiers() & WebInputEvent::Modifiers::kControlKey)
context_menu_event = true;
#endif
const bool should_dispatch_click_event =
click_count_ > 0 && !context_menu_event && mouse_down_element_ &&
- mouse_release_target.CanParticipateInFlatTree() &&
+ mouse_release_target &&
+ mouse_release_target->CanParticipateInFlatTree() &&
mouse_down_element_->CanParticipateInFlatTree() &&
- mouse_down_element_->isConnected() &&
- !(frame_->GetEventHandler()
- .GetSelectionController()
- .HasExtendedSelection() &&
- IsLinkSelection(mev));
+ mouse_down_element_->isConnected();
if (!should_dispatch_click_event)
return WebInputEventResult::kNotHandled;
@@ -332,13 +325,13 @@ WebInputEventResult MouseEventManager::DispatchMouseClickIfNeeded(
if (mouse_down_element_ == mouse_release_target) {
click_target_node = mouse_down_element_;
} else if (mouse_down_element_->GetDocument() ==
- mouse_release_target.GetDocument()) {
+ mouse_release_target->GetDocument()) {
// Updates distribution because a 'mouseup' event listener can make the
// tree dirty at dispatchMouseEvent() invocation above.
// Unless distribution is updated, commonAncestor would hit ASSERT.
mouse_down_element_->UpdateDistributionForFlatTreeTraversal();
- mouse_release_target.UpdateDistributionForFlatTreeTraversal();
- click_target_node = mouse_release_target.CommonAncestor(
+ mouse_release_target->UpdateDistributionForFlatTreeTraversal();
+ click_target_node = mouse_release_target->CommonAncestor(
*mouse_down_element_, event_handling_util::ParentForClickEvent);
}
if (!click_target_node)
@@ -360,10 +353,10 @@ WebInputEventResult MouseEventManager::DispatchMouseClickIfNeeded(
RuntimeEnabledFeatures::ClickRetargettingEnabled()) {
return DispatchMouseEvent(
click_target_node,
- (mev.Event().button == WebPointerProperties::Button::kLeft)
+ (mouse_event.button == WebPointerProperties::Button::kLeft)
? event_type_names::kClick
: event_type_names::kAuxclick,
- mev.Event(), mev.CanvasRegionId(), nullptr, nullptr);
+ mouse_event, canvas_region_id, nullptr, nullptr);
}
return WebInputEventResult::kNotHandled;
@@ -413,17 +406,17 @@ void MouseEventManager::CancelFakeMouseMoveEvent() {
fake_mouse_move_event_timer_.Stop();
}
-void MouseEventManager::SetNodeUnderMouse(
- Node* target,
+void MouseEventManager::SetElementUnderMouse(
+ Element* target,
const String& canvas_region_id,
const WebMouseEvent& web_mouse_event) {
- Node* last_node_under_mouse = node_under_mouse_;
- node_under_mouse_ = target;
+ Element* last_element_under_mouse = element_under_mouse_;
+ element_under_mouse_ = target;
PaintLayer* layer_for_last_node =
- event_handling_util::LayerForNode(last_node_under_mouse);
+ event_handling_util::LayerForNode(last_element_under_mouse);
PaintLayer* layer_for_node_under_mouse =
- event_handling_util::LayerForNode(node_under_mouse_.Get());
+ event_handling_util::LayerForNode(element_under_mouse_.Get());
Page* page = frame_->GetPage();
if (page && (layer_for_last_node &&
@@ -445,13 +438,13 @@ void MouseEventManager::SetNodeUnderMouse(
scrollable_area_for_node_under_mouse->MouseEnteredContentArea();
}
- if (last_node_under_mouse &&
- last_node_under_mouse->GetDocument() != frame_->GetDocument()) {
- last_node_under_mouse = nullptr;
+ if (last_element_under_mouse &&
+ last_element_under_mouse->GetDocument() != frame_->GetDocument()) {
+ last_element_under_mouse = nullptr;
}
- SendBoundaryEvents(last_node_under_mouse, node_under_mouse_, canvas_region_id,
- web_mouse_event);
+ SendBoundaryEvents(last_element_under_mouse, element_under_mouse_,
+ canvas_region_id, web_mouse_event);
}
void MouseEventManager::NodeChildrenWillBeRemoved(ContainerNode& container) {
@@ -477,8 +470,8 @@ void MouseEventManager::NodeWillBeRemoved(Node& node_to_be_removed) {
}
}
-Node* MouseEventManager::GetNodeUnderMouse() {
- return node_under_mouse_;
+Element* MouseEventManager::GetElementUnderMouse() {
+ return element_under_mouse_;
}
WebInputEventResult MouseEventManager::HandleMouseFocus(
@@ -496,12 +489,7 @@ WebInputEventResult MouseEventManager::HandleMouseFocus(
// The layout needs to be up to date to determine if an element is focusable.
frame_->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets();
- Element* element = nullptr;
- if (node_under_mouse_) {
- element = node_under_mouse_->IsElementNode()
- ? ToElement(node_under_mouse_)
- : node_under_mouse_->ParentOrShadowHostElement();
- }
+ Element* element = element_under_mouse_;
for (; element; element = element->ParentOrShadowHostElement()) {
if (element->IsFocusable() && element->IsFocusedElementInDocument())
return WebInputEventResult::kNotHandled;
@@ -532,31 +520,25 @@ WebInputEventResult MouseEventManager::HandleMouseFocus(
if (!element && hit_test_result.GetScrollbar())
return WebInputEventResult::kHandledSystem;
- if (Page* page = frame_->GetPage()) {
- // If focus shift is blocked, we eat the event. Note we should never
- // clear swallowEvent if the page already set it (e.g., by canceling
- // default behavior).
- if (element) {
- if (SlideFocusOnShadowHostIfNecessary(*element))
- return WebInputEventResult::kHandledSystem;
- if (!page->GetFocusController().SetFocusedElement(
- element, frame_,
- FocusParams(SelectionBehaviorOnFocus::kNone, kWebFocusTypeMouse,
- source_capabilities)))
- return WebInputEventResult::kHandledSystem;
- } else {
- // We call setFocusedElement even with !element in order to blur
- // current focus element when a link is clicked; this is expected by
- // some sites that rely on onChange handlers running from form
- // fields before the button click is processed.
- if (!page->GetFocusController().SetFocusedElement(
- nullptr, frame_,
- FocusParams(SelectionBehaviorOnFocus::kNone, kWebFocusTypeNone,
- source_capabilities)))
- return WebInputEventResult::kHandledSystem;
- }
- }
+ Page* const page = frame_->GetPage();
+ if (!page)
+ return WebInputEventResult::kNotHandled;
+
+ // If focus shift is blocked, we eat the event. Note we should never
+ // clear swallowEvent if the page already set it (e.g., by canceling
+ // default behavior).
+ if (element && SlideFocusOnShadowHostIfNecessary(*element))
+ return WebInputEventResult::kHandledSystem;
+ // We call setFocusedElement even with !element in order to blur
+ // current focus element when a link is clicked; this is expected by
+ // some sites that rely on onChange handlers running from form
+ // fields before the button click is processed.
+ if (!page->GetFocusController().SetFocusedElement(
+ element, frame_,
+ FocusParams(SelectionBehaviorOnFocus::kNone, kWebFocusTypeMouse,
+ source_capabilities)))
+ return WebInputEventResult::kHandledSystem;
return WebInputEventResult::kNotHandled;
}
@@ -696,8 +678,8 @@ WebInputEventResult MouseEventManager::HandleMousePressEvent(
bool single_click = event.Event().click_count <= 1;
- mouse_down_may_start_drag_ =
- single_click && !IsLinkSelection(event) && !IsExtendingSelection(event);
+ mouse_down_may_start_drag_ = single_click && !IsSelectionOverLink(event) &&
+ !IsExtendingSelection(event);
mouse_down_ = event.Event();
@@ -944,15 +926,15 @@ bool MouseEventManager::HandleDrag(const MouseEventWithHitTestResults& event,
return true;
}
- // Once we're past the drag threshold, we don't want to treat this gesture as
- // a click.
- InvalidateClick();
-
if (!TryStartDrag(event)) {
// Something failed to start the drag, clean up.
ClearDragDataTransfer();
ResetDragSource();
} else {
+ // Once we're past the drag threshold, we don't want to treat this gesture
+ // as a click.
+ InvalidateClick();
+
// Since drag operation started we need to send a pointercancel for the
// corresponding pointer.
if (initiator == DragInitiator::kMouse) {