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