<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>