88 lines
2.7 KiB
HTML
88 lines
2.7 KiB
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>
|