summaryrefslogtreecommitdiffstats
path: root/third_party/WebKit/LayoutTests/fast/forms/focus2.html
blob: 93e6733e084f431d618f12661ba2eb3952f6f2a6 (plain)
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<p>This test tabs between lots of elements, printing out the events you see along the way.</p>
<hr>
<div id="testDiv"></div>
<iframe id="testIframe" style="width: 800; height: 125; margin-top: 10px; border: 2px solid black"></iframe>
<pre id="console"></pre>

<script>

if (window.testRunner)
    testRunner.dumpAsText();

function log(s)
{
    document.getElementById('console').appendChild(document.createTextNode(s));
}

function description(element)
{
    var inputType = element.getAttribute('type');
    if (inputType)
        return inputType;
        
    if (element.toString().match(/iframe/i))
        return "IFRAME";
    
    if (element.toString().match(/javascript:/i))
        return "ANCHOR";

    if (element.toString().match(/textarea/i))
        return "TEXTAREA";

    if (element.toString().match(/div/i))
        return "DIV";

    return element.toString();
}

function keydownListener(event)
{
    log("keydown event: [to] " + description(event.target)  + "\n");
}

function blurListener(event)
{
    log("blur event: [to] " + description(event.target) + "\n");
}

var lastFocusedElement = null;
function focusListener(event)
{
    log('focus event: [to] ' + description(event.target) + '\n');
    lastFocusedElement = event.target;
}

function addEventListeners(element)
{
    element.addEventListener('keydown', keydownListener, false);
    element.addEventListener('focus', focusListener, false);
    element.addEventListener('blur', blurListener, false);
}

function addElements(parentElement)
{
    var inputTypes = [
        "BUTTON", 
        "CHECKBOX", 
        "FILE", 
        "HIDDEN", 
        "IMAGE", 
        "ISINDEX", 
        "PASSWORD", 
        "RADIO", 
        "RANGE", 
        "RESET", 
        "SEARCH", 
        "SUBMIT", 
        "TEXT"
    ];

    // Form elements
    for (var i = 0; i < inputTypes.length; ++i) { //>
        var input = parentElement.ownerDocument.createElement('input');
        input.type = inputTypes[i];
        addEventListeners(input);
        parentElement.appendChild(input);
    }
    
    // Textarea
    var textarea = parentElement.ownerDocument.createElement('textarea');
    addEventListeners(textarea);
    parentElement.appendChild(textarea);
    
    // Contenteditable
    var div = parentElement.ownerDocument.createElement('div');
    div.contentEditable = true;
    div.style.border = "1px solid black";
    addEventListeners(div);
    parentElement.appendChild(div);

    // Anchor
    var anchor = parentElement.ownerDocument.createElement('a');
    anchor.innerHTML = "anchor";
    anchor.href = "javascript:";
    addEventListeners(anchor);
    parentElement.appendChild(anchor);
}

function dispatchOptionTab(element, shiftKey)
{
    var event = document.createEvent("KeyboardEvents");
    var tabKeyIdentifier = "U+0009";
    var isMac = navigator.platform.indexOf('Mac') == 0;
    event.initKeyboardEvent("keydown", true, true, document.defaultView, tabKeyIdentifier, 0, false, isMac, shiftKey, false, false);
    element.dispatchEvent(event);
}

function setup()
{
    var testDiv = document.getElementById('testDiv');
    addElements(testDiv);

    var testIframe = document.getElementById('testIframe');
    addElements(testIframe.contentDocument.body);
    addEventListeners(testIframe);
}

setup();

log('PARENT DOCUMENT:\n');
document.getElementsByTagName('input')[0].focus();
for (var i = 0; i < 14; ++i) //>
    dispatchOptionTab(lastFocusedElement, false);

lastFocusedElement.blur();

log('\nIFRAME DOCUMENT:\n');
document.getElementById('testIframe').contentDocument.getElementsByTagName('input')[0].focus();
for (var i = 0; i < 14; ++i) //>
    dispatchOptionTab(lastFocusedElement, false);
</script>