Web Replay: capture and replay mouse events
[WebKit-https.git] / ManualTests / inspector / replay-mouse-events.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2         "http://www.w3.org/TR/html4/strict.dtd">
3 <html lang="en">
4 <head>
5 <script src="./resources/crypto-md5.js"></script>
6 <script type="text/javascript" language="javascript" charset="utf-8">
7
8     function glyphForType(type) {
9         switch (type) {
10         case "mousedown": return "D";
11         case "mousemove": return "M";
12         case "mouseup": return "U";
13         case "mouseover": return "I";
14         case "mouseout": return "O";
15         case "click": return "C";
16         case "dblclick": return "2";
17         }
18     }
19
20     document.onmousedown = handleEvent;
21     document.onmousemove = handleEvent;
22     document.onmouseup = handleEvent;
23     document.onmouseover = handleEvent;
24     document.onmouseout = handleEvent;
25     document.onclick = handleEvent;
26     document.ondblclick = handleEvent;
27     
28     window.dumpedEvents = [];
29     
30     function handleEvent(event) {
31         var properties = ["type", "eventPhase", "bubbles", "cancelable", "screenX", "screenY", "clientX", "clientY", "ctrlKey", "shiftKey", "altKey", "metaKey", "button"];
32         obj = {};
33         for (var key of properties)
34             obj[key] = event[key];
35     
36         dumpedEvents.push(obj);
37
38         var block = createBlock(hex_md5(JSON.stringify(obj)));
39         block.textContent = glyphForType(event.type);
40         var blocksContainer = document.getElementById("blocks");
41         blocksContainer.appendChild(block);
42         
43         var hashLabel = document.getElementById("hash");
44         hash.textContent = hex_md5(JSON.stringify(dumpedEvents));
45     }
46     
47     function createBlock(hash) {
48         var color = "#" + hash.substr(0,6);
49         var block = document.createElement("span");
50         block.style.backgroundColor = color;
51         return block;
52     }
53     
54     function stateHash() {
55         return hex_md5(JSON.stringify(dumpedEvents));
56     }
57     
58 </script>
59
60 <style type="text/css">
61 body {
62     max-width: 800px;
63 }
64 #blocks {
65     display: -webkit-flex;
66     width: 600px;
67     -webkit-flex-flow: row wrap;
68 }
69     
70 #blocks > span {
71     width: 20px;
72     height: 20px;
73     border-radius: 10px;
74     font-size: 18px;
75     font-weight: bold;
76     font-family: sans-serif;
77     color: #fff;
78     text-align: center;
79 }
80 </style>
81 </head>
82 <body>
83 <p>This page is a manual test for capture and replay of mouse-related events.</p>
84 <p>Below, a block is created for each mouse event, where the color is derived from a hash of the mouse event. At the bottom is a cumulative hash of all mouse event data.</p>
85 <hr/>
86 <p>
87 To test the replay functionality, open the Web Inspector, start capturing, and then move the mouse around this test page. After some time, stop capturing and then replay. The replayed execution should produce the same sequence of blocks. More importantly, the cumulative hash value should be the same at the end of capturing and at the end of any subsequent replays.</p>
88 </p>
89 <hr/>
90 <div id="hash"></div>
91 <div id="blocks"></div>
92 </body>
93 </html>