File: drag-image-no-crash.html

package info (click to toggle)
qtwebkit 2.3.4.dfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 290,116 kB
  • ctags: 272,544
  • sloc: cpp: 1,417,496; python: 85,048; ansic: 39,353; perl: 38,858; ruby: 10,313; objc: 9,505; xml: 8,679; asm: 3,864; yacc: 2,458; sh: 1,237; lex: 813; makefile: 592; java: 228; php: 79
file content (87 lines) | stat: -rw-r--r-- 2,721 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<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>