This tests initiating a mouse drag on a canvas element doesn't start selection. To manually test, drag mouse on the canvas below. WebKit shouldn't select the canvas.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


getSelection().removeAllRanges(); mouseDown = false; mouseUp = false
PASS eventSender.mouseMoveTo(canvas.offsetLeft + 10, canvas.offsetTop + 10); eventSender.mouseDown(); mouseDown is true
PASS eventSender.mouseMoveTo(canvas.offsetLeft + 100, canvas.offsetTop + 100); eventSender.mouseUp(); mouseUp is true
PASS getSelection().isCollapsed is true

