chromium/third_party/blink/manual_tests/drag-image-no-crash.html

<html>
<body>
<script>
// This is a 10x10 24-bits RGB BMP image in white.
var imageString =
"Qk12AQAAAAAAADYAAAAoAAAACgAAAAoAAAABABgAAAAAAEABAAATCwAAEwsAAAAAAAAAAAAAAAAA" +
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";

// Raw image byets.
var imageRaw = window.atob(imageString).split("");

// 10x10x3 bytes are image data.
var pixelBytes = 300;
var beginByte = imageRaw.length - pixelBytes;

function generateNewImage()
{
    // Add 1 to image data.
    for (var i = beginByte; i < imageRaw.length; ++i) {
        var c = imageRaw[i].charCodeAt(0);
        if (c == 255) {
            imageRaw[i] = String.fromCharCode(0);
        } else {
            imageRaw[i] = String.fromCharCode(c+1);
            break;
        }
    }

    var bmpImage = new Image();
    bmpImage.src = "data:image/bmp;base64," + window.btoa(imageRaw.join(""));
    return bmpImage;
}

var imageCount = 0;
function addImage()
{
    if (imageCount >= 1000 * 1000)
        return;
    document.getElementById("imageCanvas").appendChild(generateNewImage());
    window.setTimeout("addImage()", 1);
}

function runTest()
{
    document.getElementById("dragFrame").contentWindow.location.href =
        "about:blank";
    addImage();
}
</script>
<p>To run this test:</p>
<p>1. Drag this text 10 times:
   <iframe id="dragFrame" width="50" height="30">.</iframe></p>
<p>2. Click this <button onclick="runTest();">Start</button> button.</p>
<p>3. Let it run for 5 minutes and browser shouldn't crash.</p>
<div id="imageCanvas"></div>

<script>
// Write this content to the iframe.
var content =
    "<" + "body" + ">" +
    "<" + "script" + ">" +
    "function dragStartHandler()" +
    "{" +
    "    var img = new Image();" +
    "    img.src = 'data:image/bmp;base64," + imageString + "';" +
    "    event.dataTransfer.setDragImage(img, 10, 10);" +
    "}" +
    "</" + "script" + ">" +
    "<span ondragstart='dragStartHandler()'" +
    "      style='-webkit-user-select:none;" +
    "             -webkit-user-drag: element;" +
    "             position: absolute; top: 0; left: 0;" +
    "             background-color: blue;'>HERE</span>" +
    "</" + "body" + ">";

var doc = document.getElementById("dragFrame");
doc.contentDocument.open();
doc.contentDocument.write(content);
doc.contentDocument.close();
</script>
</body>
</html>