Source code

Revision control

Copy as Markdown

Other Tools

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<window onload="start()"
<input xmlns="http://www.w3.org/1999/xhtml" id="textbox1"/>
<input xmlns="http://www.w3.org/1999/xhtml" id="textbox2"/>
<panel id="panel" onpopupshown="runTests(this, 1);"
onpopuphidden="noChildrenTest()">
<input xmlns="http://www.w3.org/1999/xhtml" id="p1textbox" value="Popup1"/>
</panel>
<panel id="panel2" onpopupshown="runTests(this, 2);" onpopuphidden="document.getElementById('panel').hidePopup()">
<input xmlns="http://www.w3.org/1999/xhtml" id="p2textbox" value="Popup2"/>
</panel>
<browser id="browser" type="content" src="focus_frameset.html" style="width: 500px; height: 400px"/>
<script type="application/javascript">
<![CDATA[
var fm = Cc["@mozilla.org/focus-manager;1"].
getService(Ci.nsIFocusManager);
function is(l, r, n) { window.arguments[0].SimpleTest.is(l,r,n); }
function ok(v, n) { window.arguments[0].SimpleTest.ok(v,n); }
function noChildrenTest()
{
// Remove the browser element and test navigation when there are no other documents.
// The focus should move or stay on the first focusable element.
let browser = document.getElementById("browser");
browser.remove();
let textbox1 = document.getElementById("textbox1");
let textbox2 = document.getElementById("textbox2");
textbox2.focus();
next(window, textbox1, "Focus forward when no child documents");
next(window, textbox1, "Focus forward again when no child documents");
textbox2.focus();
previous(window, textbox1, "Focus backward when no child documents");
previous(window, textbox1, "Focus backward again when no child documents");
done();
}
function done()
{
window.close();
window.arguments[0].SimpleTest.finish();
}
function previous(expectedWindow, expectedElement, desc)
{
synthesizeKey("KEY_F6", {shiftKey: true});
is(fm.focusedWindow, expectedWindow, desc);
is(fm.focusedElement, expectedElement, desc + " element");
}
function next(expectedWindow, expectedElement, desc)
{
synthesizeKey("KEY_F6");
is(fm.focusedWindow, expectedWindow, desc);
is(fm.focusedElement, expectedElement, desc + " element" + "::" + (fm.focusedElement ? fm.focusedElement.parentNode.id : "<none>"));
}
// This test runs through three cases. Document navigation forward and
// backward using the F6 key when no popups are open, with one popup open and
// with two popups open.
function runTests(panel, popupCount)
{
if (!popupCount || popupCount > 2)
popupCount = 0;
fm.clearFocus(window);
var childwin = document.getElementById("browser").contentWindow;
if (popupCount) {
next(window, document.getElementById("p1textbox"), "First into popup 1 with " + popupCount);
if (popupCount == 2) {
next(window, document.getElementById("p2textbox"), "First into popup 2 with " + popupCount);
}
}
next(childwin.frames[0], childwin.frames[0].document.documentElement, "First with " + popupCount);
next(childwin.frames[1], childwin.frames[1].document.documentElement, "Second with " + popupCount);
previous(childwin.frames[0], childwin.frames[0].document.documentElement, "Second back with " + popupCount);
if (popupCount) {
if (popupCount == 2) {
previous(window, document.getElementById("p2textbox"), "First back from popup 2 with " + popupCount);
}
previous(window, document.getElementById("p1textbox"), "First back from popup 1 with " + popupCount);
}
previous(window, document.getElementById("textbox1"), "First back with " + popupCount);
if (panel == document.getElementById("panel"))
document.getElementById("panel2").openPopup(null, "after_start", 100, 20);
else if (panel == document.getElementById("panel2"))
panel.hidePopup();
else
document.getElementById("panel").openPopup(null, "after_start");
}
function start()
{
window.arguments[0].SimpleTest.waitForExplicitFinish();
window.arguments[0].SimpleTest.waitForFocus(
function() { runTests(null, 0); },
document.getElementById("browser").contentWindow);
}
]]></script>
</window>