#include "third_party/blink/renderer/core/input/mouse_event_manager.h"
#include "build/build_config.h"
#include "third_party/blink/public/platform/web_input_event_result.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_drag_event_init.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_pointer_event_init.h"
#include "third_party/blink/renderer/core/clipboard/data_object.h"
#include "third_party/blink/renderer/core/clipboard/data_transfer.h"
#include "third_party/blink/renderer/core/clipboard/data_transfer_access_policy.h"
#include "third_party/blink/renderer/core/dom/element.h"
#include "third_party/blink/renderer/core/dom/focus_params.h"
#include "third_party/blink/renderer/core/editing/editing_utilities.h"
#include "third_party/blink/renderer/core/editing/ephemeral_range.h"
#include "third_party/blink/renderer/core/editing/frame_selection.h"
#include "third_party/blink/renderer/core/editing/selection_controller.h"
#include "third_party/blink/renderer/core/editing/visible_selection.h"
#include "third_party/blink/renderer/core/events/drag_event.h"
#include "third_party/blink/renderer/core/events/mouse_event.h"
#include "third_party/blink/renderer/core/events/pointer_event_factory.h"
#include "third_party/blink/renderer/core/events/web_input_event_conversion.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/html/forms/html_label_element.h"
#include "third_party/blink/renderer/core/html/html_image_element.h"
#include "third_party/blink/renderer/core/input/event_handler.h"
#include "third_party/blink/renderer/core/input/event_handling_util.h"
#include "third_party/blink/renderer/core/input/input_device_capabilities.h"
#include "third_party/blink/renderer/core/input/keyboard_event_manager.h"
#include "third_party/blink/renderer/core/layout/hit_test_result.h"
#include "third_party/blink/renderer/core/layout/layout_view.h"
#include "third_party/blink/renderer/core/page/autoscroll_controller.h"
#include "third_party/blink/renderer/core/page/drag_controller.h"
#include "third_party/blink/renderer/core/page/drag_state.h"
#include "third_party/blink/renderer/core/page/focus_controller.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/page/pointer_lock_controller.h"
#include "third_party/blink/renderer/core/paint/paint_layer.h"
#include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h"
#include "third_party/blink/renderer/core/paint/timing/paint_timing.h"
#include "third_party/blink/renderer/core/svg/svg_document_extensions.h"
#include "third_party/blink/renderer/core/timing/event_timing.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "ui/gfx/geometry/point_conversions.h"
namespace blink {
namespace {
void UpdateMouseMovementXY(const WebMouseEvent& mouse_event,
const gfx::PointF* last_position,
LocalDOMWindow* dom_window,
MouseEventInit* initializer) { … }
void SetMouseEventAttributes(MouseEventInit* initializer,
Node* target_node,
const AtomicString& mouse_event_type,
const WebMouseEvent& mouse_event,
const gfx::PointF* last_position,
EventTarget* related_target,
int click_count) { … }
#if BUILDFLAG(IS_MAC)
const int kDragThresholdX = 3;
const int kDragThresholdY = 3;
constexpr base::TimeDelta kTextDragDelay = base::Seconds(0.15);
#else
const int kDragThresholdX = …;
const int kDragThresholdY = …;
constexpr base::TimeDelta kTextDragDelay = …;
#endif
}
enum class DragInitiator { … };
MouseEventManager::MouseEventManager(LocalFrame& frame,
ScrollManager& scroll_manager)
: … { … }
void MouseEventManager::Clear() { … }
MouseEventManager::~MouseEventManager() = default;
void MouseEventManager::Trace(Visitor* visitor) const { … }
MouseEventManager::MouseEventBoundaryEventDispatcher::
MouseEventBoundaryEventDispatcher(MouseEventManager* mouse_event_manager,
const WebMouseEvent* web_mouse_event)
: … { … }
void MouseEventManager::MouseEventBoundaryEventDispatcher::Dispatch(
EventTarget* target,
EventTarget* related_target,
const AtomicString& type,
bool check_for_listener) { … }
void MouseEventManager::SendBoundaryEvents(EventTarget* exited_target,
bool original_exited_target_removed,
EventTarget* entered_target,
const WebMouseEvent& mouse_event) { … }
WebInputEventResult MouseEventManager::DispatchMouseEvent(
EventTarget* target,
const AtomicString& mouse_event_type,
const WebMouseEvent& mouse_event,
const gfx::PointF* last_position,
EventTarget* related_target,
bool check_for_listener,
const PointerId& pointer_id,
const String& pointer_type) { … }
WebInputEventResult MouseEventManager::SetMousePositionAndDispatchMouseEvent(
Element* target_element,
const AtomicString& event_type,
const WebMouseEvent& web_mouse_event) { … }
WebInputEventResult MouseEventManager::DispatchMouseClickIfNeeded(
Element* mouse_release_target,
Element* captured_click_target,
const WebMouseEvent& mouse_event,
const PointerId& pointer_id,
const String& pointer_type) { … }
void MouseEventManager::RecomputeMouseHoverStateIfNeeded() { … }
void MouseEventManager::RecomputeMouseHoverState() { … }
void MouseEventManager::MarkHoverStateDirty() { … }
bool MouseEventManager::HoverStateDirty() { … }
void MouseEventManager::SetElementUnderMouse(
Element* target,
const WebMouseEvent& web_mouse_event) { … }
void MouseEventManager::NodeChildrenWillBeRemoved(ContainerNode& container) { … }
void MouseEventManager::NodeWillBeRemoved(Node& node_to_be_removed) { … }
Element* MouseEventManager::GetElementUnderMouse() { … }
WebInputEventResult MouseEventManager::HandleMouseFocus(
const HitTestResult& hit_test_result,
InputDeviceCapabilities* source_capabilities) { … }
bool MouseEventManager::SlideFocusOnShadowHostIfNecessary(
const Element& element) { … }
void MouseEventManager::HandleMouseReleaseEventUpdateStates() { … }
void MouseEventManager::HandleMousePressEventUpdateStates(
const WebMouseEvent& mouse_event) { … }
bool MouseEventManager::IsMousePositionUnknown() { … }
gfx::PointF MouseEventManager::LastKnownMousePositionInViewport() { … }
gfx::PointF MouseEventManager::LastKnownMouseScreenPosition() { … }
void MouseEventManager::SetLastKnownMousePosition(const WebMouseEvent& event) { … }
void MouseEventManager::SetLastMousePositionAsUnknown() { … }
WebInputEventResult MouseEventManager::HandleMousePressEvent(
const MouseEventWithHitTestResults& event) { … }
WebInputEventResult MouseEventManager::HandleMouseReleaseEvent(
const MouseEventWithHitTestResults& event) { … }
void MouseEventManager::UpdateSelectionForMouseDrag() { … }
bool MouseEventManager::HandleDragDropIfPossible(
const GestureEventWithHitTestResults& targeted_event) { … }
void MouseEventManager::FocusDocumentView() { … }
WebInputEventResult MouseEventManager::HandleMouseDraggedEvent(
const MouseEventWithHitTestResults& event) { … }
bool MouseEventManager::HandleDrag(const MouseEventWithHitTestResults& event,
DragInitiator initiator) { … }
DataTransfer* MouseEventManager::CreateDraggingDataTransfer() const { … }
bool MouseEventManager::TryStartDrag(
const MouseEventWithHitTestResults& event) { … }
WebInputEventResult MouseEventManager::DispatchDragSrcEvent(
const AtomicString& event_type,
const WebMouseEvent& event) { … }
WebInputEventResult MouseEventManager::DispatchDragEvent(
const AtomicString& event_type,
Node* drag_target,
Node* related_target,
const WebMouseEvent& event,
DataTransfer* data_transfer) { … }
void MouseEventManager::ClearDragDataTransfer() { … }
void MouseEventManager::DragSourceEndedAt(
const WebMouseEvent& event,
ui::mojom::blink::DragOperation operation) { … }
DragState& MouseEventManager::GetDragState() { … }
void MouseEventManager::ResetDragSource() { … }
bool MouseEventManager::DragThresholdExceeded(
const gfx::Point& drag_location_in_root_frame) const { … }
void MouseEventManager::ClearDragHeuristicState() { … }
bool MouseEventManager::HandleSvgPanIfNeeded(bool is_release_event) { … }
void MouseEventManager::InvalidateClick() { … }
bool MouseEventManager::MousePressed() { … }
void MouseEventManager::ReleaseMousePress() { … }
bool MouseEventManager::CapturesDragging() const { … }
void MouseEventManager::SetCapturesDragging(bool captures_dragging) { … }
Node* MouseEventManager::MousePressNode() { … }
void MouseEventManager::SetMousePressNode(Node* node) { … }
Element* MouseEventManager::ClickElement() { … }
void MouseEventManager::SetClickElement(Element* element) { … }
void MouseEventManager::SetClickCount(int click_count) { … }
bool MouseEventManager::MouseDownMayStartDrag() { … }
}