Index: third_party/WebKit/Source/core/input/MouseEventManager.cpp |
diff --git a/third_party/WebKit/Source/core/input/MouseEventManager.cpp b/third_party/WebKit/Source/core/input/MouseEventManager.cpp |
index aaca3de4a6922a173bbbca8e925282d38145c232..4f51a224bf1d6b84d7806be7f4f0ebbd5f5a7d20 100644 |
--- a/third_party/WebKit/Source/core/input/MouseEventManager.cpp |
+++ b/third_party/WebKit/Source/core/input/MouseEventManager.cpp |
@@ -556,9 +556,7 @@ WebInputEventResult MouseEventManager::handleMousePressEvent( |
const MouseEventWithHitTestResults& event) { |
TRACE_EVENT0("blink", "MouseEventManager::handleMousePressEvent"); |
- // Reset drag state. |
- dragState().m_dragSrc = nullptr; |
- |
+ resetDragState(); |
cancelFakeMouseMoveEvent(); |
m_frame->document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
@@ -672,7 +670,7 @@ bool MouseEventManager::handleDragDropIfPossible( |
EventHandlingUtil::performMouseEventHitTest(m_frame, request, |
mouseDragEvent); |
m_mouseDownMayStartDrag = true; |
- dragState().m_dragSrc = nullptr; |
+ resetDragState(); |
m_mouseDownPos = m_frame->view()->rootFrameToContents( |
flooredIntPoint(mouseDragEvent.positionInRootFrame())); |
return handleDrag(mev, DragInitiator::Touch); |
@@ -778,7 +776,7 @@ bool MouseEventManager::handleDrag(const MouseEventWithHitTestResults& event, |
m_frame, node, m_mouseDownPos, selectionDragPolicy, |
dragState().m_dragType); |
} else { |
- dragState().m_dragSrc = nullptr; |
+ resetDragState(); |
} |
if (!dragState().m_dragSrc) |
@@ -801,7 +799,7 @@ bool MouseEventManager::handleDrag(const MouseEventWithHitTestResults& event, |
if (initiator == DragInitiator::Mouse && |
!dragThresholdExceeded( |
flooredIntPoint(event.event().positionInRootFrame()))) { |
- dragState().m_dragSrc = nullptr; |
+ resetDragState(); |
return true; |
} |
@@ -812,7 +810,7 @@ bool MouseEventManager::handleDrag(const MouseEventWithHitTestResults& event, |
if (!tryStartDrag(event)) { |
// Something failed to start the drag, clean up. |
clearDragDataTransfer(); |
- dragState().m_dragSrc = nullptr; |
+ resetDragState(); |
} |
m_mouseDownMayStartDrag = false; |
@@ -922,15 +920,21 @@ void MouseEventManager::dragSourceEndedAt(const WebMouseEvent& event, |
dispatchDragSrcEvent(EventTypeNames::dragend, event); |
} |
clearDragDataTransfer(); |
- dragState().m_dragSrc = nullptr; |
+ resetDragState(); |
// In case the drag was ended due to an escape key press we need to ensure |
// that consecutive mousemove events don't reinitiate the drag and drop. |
m_mouseDownMayStartDrag = false; |
} |
DragState& MouseEventManager::dragState() { |
- DEFINE_STATIC_LOCAL(DragState, state, (new DragState)); |
- return state; |
+ DCHECK(m_frame->page()); |
+ return m_frame->page()->dragController().dragState(); |
+} |
+ |
+void MouseEventManager::resetDragState() { |
+ if (!m_frame->page()) |
+ return; |
+ dragState().m_dragSrc = nullptr; |
} |
bool MouseEventManager::dragThresholdExceeded( |