1<html> 2<body> 3<script> 4// This is a 10x10 24-bits RGB BMP image in white. 5var imageString = 6"Qk12AQAAAAAAADYAAAAoAAAACgAAAAoAAAABABgAAAAAAEABAAATCwAAEwsAAAAAAAAAAAAAAAAA" + 7"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + 8"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + 9"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + 10"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + 11"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + 12"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; 13 14// Raw image byets. 15var imageRaw = window.atob(imageString).split(""); 16 17// 10x10x3 bytes are image data. 18var pixelBytes = 300; 19var beginByte = imageRaw.length - pixelBytes; 20 21function generateNewImage() 22{ 23 // Add 1 to image data. 24 for (var i = beginByte; i < imageRaw.length; ++i) { 25 var c = imageRaw[i].charCodeAt(0); 26 if (c == 255) { 27 imageRaw[i] = String.fromCharCode(0); 28 } else { 29 imageRaw[i] = String.fromCharCode(c+1); 30 break; 31 } 32 } 33 34 var bmpImage = new Image(); 35 bmpImage.src = "data:image/bmp;base64," + window.btoa(imageRaw.join("")); 36 return bmpImage; 37} 38 39var imageCount = 0; 40function addImage() 41{ 42 if (imageCount >= 1000 * 1000) 43 return; 44 document.getElementById("imageCanvas").appendChild(generateNewImage()); 45 window.setTimeout("addImage()", 1); 46} 47 48function runTest() 49{ 50 document.getElementById("dragFrame").contentWindow.location.href = 51 "about:blank"; 52 addImage(); 53} 54</script> 55<p>To run this test:</p> 56<p>1. Drag this text 10 times: 57 <iframe id="dragFrame" width="50" height="30">.</iframe></p> 58<p>2. Click this <button onclick="runTest();">Start</button> button.</p> 59<p>3. Let it run for 5 minutes and browser shouldn't crash.</p> 60<div id="imageCanvas"></div> 61 62<script> 63// Write this content to the iframe. 64var content = 65 "<" + "body" + ">" + 66 "<" + "script" + ">" + 67 "function dragStartHandler()" + 68 "{" + 69 " var img = new Image();" + 70 " img.src = 'data:image/bmp;base64," + imageString + "';" + 71 " event.dataTransfer.setDragImage(img, 10, 10);" + 72 "}" + 73 "</" + "script" + ">" + 74 "<span ondragstart='dragStartHandler()'" + 75 " style='-webkit-user-select:none;" + 76 " -webkit-user-drag: element;" + 77 " position: absolute; top: 0; left: 0;" + 78 " background-color: blue;'>HERE</span>" + 79 "</" + "body" + ">"; 80 81var doc = document.getElementById("dragFrame"); 82doc.contentDocument.open(); 83doc.contentDocument.write(content); 84doc.contentDocument.close(); 85</script> 86</body> 87</html> 88