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