Fix a document memory leak in drag-and-drop.

TEST=fast/events/drag-leak-document.html (run_webkit_tests with --enable-leak-detection)
BUG=364392

Review URL: https://codereview.chromium.org/302133002

git-svn-id: svn://svn.chromium.org/blink/trunk@175257 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 6fc91cc9
Drag
PASS if no leak is detected by the leak detector.
<!DOCTYPE html>
<html>
<body onload="runTest()">
<script>
if (window.testRunner)
testRunner.dumpAsText();
function runTest() {
var draggedElement = document.getElementById('draggedElement');
var x = draggedElement.offsetLeft + draggedElement.offsetWidth / 2;
var y = draggedElement.offsetTop + draggedElement.offsetHeight / 2;
eventSender.mouseMoveTo(x, y);
eventSender.mouseDown();
eventSender.mouseMoveTo(x + 100, y + 100);
eventSender.mouseUp();
}
</script>
<div id="draggedElement" draggable="true">Drag</div>
<p>PASS if no leak is detected by the leak detector.</p>
</body>
</html>
......@@ -228,6 +228,16 @@ void Clipboard::setDragImage(Element* image, int x, int y, ExceptionState& excep
setDragImageElement(image, location);
}
void Clipboard::clearDragImage()
{
if (!canSetDragImage())
return;
m_dragImage = 0;
m_dragLoc = IntPoint();
m_dragImageElement = nullptr;
}
void Clipboard::setDragImageResource(ImageResource* img, const IntPoint& loc)
{
setDragImage(img, 0, loc);
......
......@@ -79,6 +79,7 @@ public:
IntPoint dragLocation() const { return m_dragLoc; }
void setDragImage(Element*, int x, int y, ExceptionState&);
void clearDragImage();
ImageResource* dragImageResource() const { return m_dragImage.get(); }
void setDragImageResource(ImageResource*, const IntPoint&);
Node* dragImageElement() const { return m_dragImageElement.get(); }
......
......@@ -3037,8 +3037,10 @@ bool EventHandler::dragHysteresisExceeded(const FloatPoint& dragViewportLocation
void EventHandler::freeClipboard()
{
if (dragState().m_dragClipboard)
if (dragState().m_dragClipboard) {
dragState().m_dragClipboard->clearDragImage();
dragState().m_dragClipboard->setAccessPolicy(ClipboardNumb);
}
}
void EventHandler::dragSourceEndedAt(const PlatformMouseEvent& event, DragOperation operation)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment