4 background-color: white;
8 border: 2px solid black;
14 document.getElementById('log').appendChild(document.createTextNode(msg + '\n'));
17 function windowFocused(win, name)
20 win.document.body.style.background = "green";
21 log(name + ': window focused');
25 function windowBlurred(win, name)
28 win.document.body.style.background = "red";
29 log(name + ': window blurred');
33 function logTabbedElement(event, elem, i, name)
35 log(name + ': ' + elem.tagName + ' #' + i + ' (tabindex=' + elem.tabIndex + ') ' + event);
38 var lastFocusedElement = null;
39 function elementFocused(elem, i, name)
42 logTabbedElement('focused', elem, i, name);
43 lastFocusedElement = elem;
47 function elementBlurred(elem, i, name)
50 logTabbedElement('blurred', elem, i, name);
54 function setupElements(win, name, tag)
56 var elems = win.document.getElementsByTagName(tag);
57 for (var i = 0; i < elems.length; ++i) {
58 elems[i].onfocus = elementFocused(elems[i], i, name);
59 elems[i].onblur = elementBlurred(elems[i], i, name);
63 function setupBodyFunc(win, name)
66 setupElements(win, name, 'a');
67 setupElements(win, name, 'input');
68 setupElements(win, name, 'iframe');
72 function setupWindow(win)
75 if (win.frameElement) {
76 name = win.frameElement.id;
81 win.setupWindow = setupWindow;
82 win.setupBody = setupBodyFunc(win, name);
84 win.onfocus = windowFocused(win, name);
85 win.onblur = windowBlurred(win, name);
88 function dispatchTabPress(element, shiftKey, altKey)
90 var event = document.createEvent('KeyboardEvents');
91 var tabKeyIdentifier = 'U+0009';
92 event.initKeyboardEvent('keydown', true, true, document.defaultView, tabKeyIdentifier, 0, false, altKey, shiftKey, false, false);
93 element.dispatchEvent(event);
98 if (window.layoutTestController) {
99 layoutTestController.dumpAsText();
102 log('Tabbing forward...\n');
103 document.getElementById('first').focus();
104 for (var i = 0; i < 7; ++i) {
105 dispatchTabPress(document, false, false);
108 lastFocusedElement.blur();
110 log('\nTabbing backward...\n');
111 for (var i = 0; i < 8; ++i) {
112 dispatchTabPress(document, true, false);
115 lastFocusedElement.blur();
117 log('\nOption-tabbing forward...\n');
118 for (var i = 0; i < 12; ++i) {
119 dispatchTabPress(document, false, true);
122 lastFocusedElement.blur();
124 log('\nOption-tabbing backward...\n');
125 for (var i = 0; i < 12; ++i) {
126 dispatchTabPress(document, true, true);
129 lastFocusedElement.blur();
131 log('\nTest finished\n');
136 <body onload="window.setupBody(); test();">
137 <p>This page tests tabbing between subframes. To test, click on this text
138 to focus the main window. Then press Tab 7 times, then Shift-Tab 7 times,
139 which should move focus forward and backward through all inputs and frames.
140 Then press Option-Tab 11 times and Shift-Option-Tab 11 times, which should
141 move focus forward and backward through all inputs, frames, and links.</p>
144 <iframe id="empty-middle" src="resources/frame-tab-focus-empty-middle.html" width="400" height="200"></iframe>
145 <input type="text" tabindex="3">
146 <input type="text" tabindex="2" id="first">
147 <iframe id="upper" src="resources/frame-tab-focus-upper.html" height="300"></iframe>
148 <iframe id="child" tabindex="4" src="resources/frame-tab-focus-child.html"></iframe>
150 <a tabindex="1" href="#">[tabindex of one]</a>
151 <a tabindex="3" href="#">[tabindex of three]</a>
152 <a tabindex="2" href="#">[tabindex of two]</a>
153 <a tabindex="3" href="#">[tabindex of three]</a>