<html>
<head>
<script>
function log(msg)
{
document.getElementById("log").appendChild(
document.createTextNode(msg + "\n"));
}
function setFrameHandler(frameId)
{
if (frameId == "") {
window.onfocus = function()
{
log("main frame focused.");
}
window.onblur = function()
{
log("main frame blurred.");
}
} else {
var frameWin = document.getElementById(frameId).contentWindow;
frameWin.onfocus = function()
{
log(frameId + " focused.");
}
frameWin.onblur = function()
{
log(frameId + " blurred.");
}
}
}
function setFrameFocus(frameId)
{
if (frameId == "") {
window.focus();
} else {
var frameWin = document.getElementById(frameId).contentWindow;
frameWin.focus();
}
}
function testMainFrameToIFrameFocus()
{
log("\nTest: main frame to iframe.");
setFrameFocus("");
setFrameFocus("iframe1");
}
function testIFrameToMainFrameFocus()
{
log("\nTest: iframe to main frame.");
setFrameFocus("iframe1");
setFrameFocus("");
}
function testIFrameToIFrameFocus()
{
log("\nTest: iframe1 to iframe2.");
setFrameFocus("iframe1");
setFrameFocus("iframe2");
setFrameFocus("iframe1");
}
function testFrame1OnBlurSetFrame2Focus()
{
var frameWin1 = document.getElementById("iframe1").contentWindow;
frameWin1.onfocus = function()
{
log("iframe1 focused.");
}
frameWin1.onblur = function()
{
log("iframe1 blurred.");
// This set focus request will be ignored because the FocusController
// is in the middle of changing focused frame.
setFrameFocus("iframe2");
}
log("\nTest: iframe1 onblur sets iframe2 focus.");
setFrameFocus("");
setFrameFocus("iframe1");
setFrameFocus("");
}
function testFrame1OnBlurSetFrame1Focus()
{
var frameWin1 = document.getElementById("iframe1").contentWindow;
frameWin1.onfocus = function()
{
log("iframe1 focused.");
}
frameWin1.onblur = function()
{
log("iframe1 blurred.");
// This set focus request will be ignored because the FocusController
// is in the middle of changing focused frame.
setFrameFocus("iframe1");
}
log("\nTest: iframe1 onblur sets iframe1 focus.");
setFrameFocus("");
setFrameFocus("iframe1");
setFrameFocus("");
}
function testFrame1OnFocusSetFrame2Focus()
{
var frameWin1 = document.getElementById("iframe1").contentWindow;
frameWin1.onfocus = function()
{
log("iframe1 focused.");
// This set focus request will be ignored because the FocusController
// is in the middle of changing focused frame.
setFrameFocus("iframe2");
}
frameWin1.onblur = function()
{
log("iframe1 blurred.");
}
log("\nTest: iframe1 onfocus sets iframe2 focus.");
setFrameFocus("");
setFrameFocus("iframe1");
}
function testFrame1OnFocusSetFrame1Focus()
{
var frameWin1 = document.getElementById("iframe1").contentWindow;
frameWin1.onfocus = function()
{
log("iframe1 focused.");
// This set focus request will be ignored because the FocusController
// is in the middle of changing focused frame.
setFrameFocus("iframe1");
}
frameWin1.onblur = function()
{
log("iframe1 blurred.");
}
log("\nTest: iframe1 onfocus sets iframe1 focus.");
setFrameFocus("");
setFrameFocus("iframe1");
}
function test()
{
if (window.testRunner) {
testRunner.dumpAsText();
}
setFrameHandler("");
setFrameHandler("iframe1");
setFrameHandler("iframe2");
// Test the correct frame is focused when switching focus from
// one frame to another.
testMainFrameToIFrameFocus();
testIFrameToMainFrameFocus();
testIFrameToIFrameFocus();
// New setting focus request will be ignored if the focus controller
// is in the middle of switching focused frame (onblur, onfocus events).
testFrame1OnBlurSetFrame2Focus();
testFrame1OnBlurSetFrame1Focus();
testFrame1OnFocusSetFrame2Focus();
testFrame1OnFocusSetFrame1Focus();
// Restore iframe1 onfocus and onblur handlers.
setFrameHandler("iframe1");
}
</script>
</head>
<body onload="test()">
<iframe id="iframe1" style="width: 100px; height: 100px;"></iframe>
<iframe id="iframe2" style="width: 100px; height: 100px;"></iframe>
<p>Test the focus controller working properly when switching focused frame. Here are the cases tested:
<br>
<br>-. Correct frame is focused when switching focus from one frame to another:
<br>1. main frame -> iframe
<br>2. iframe to main frame
<br>3. iframe 1 to iframe 2
<br>
<br>-. New setting focus request will be ignored if the focus controller is in the middle of switching focused frame (onblur, onfocus events):
<br>1. iframe 1 onblur sets iframe 2 focus.
<br>2. iframe 1 onblur sets iframe 1 focus.
<br>3. iframe 1 onfocus sets iframe 2 focus.
<br>4. iframe 1 onfocus sets iframe 1 focus.
</p>
<pre id="log"></pre>
</body>
</html>