125 lines
3.3 KiB
HTML
125 lines
3.3 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<script>
|
|
if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
testRunner.waitUntilDone();
|
|
testRunner.setCanOpenWindows();
|
|
}
|
|
|
|
var originatingWindow = self;
|
|
|
|
function log(passed, message) {
|
|
var log = document.getElementById('log');
|
|
var text = document.createTextNode((passed ? 'PASS: ' : 'FAIL: ') + message);
|
|
var br = document.createElement('br');
|
|
log.appendChild(text);
|
|
log.appendChild(br);
|
|
}
|
|
|
|
function focusShouldNotChange(action, nextTest) {
|
|
var w = window.open('about:blank', '', 'foo');
|
|
var fail = false;
|
|
|
|
function failHandler() { fail = true; }
|
|
|
|
originatingWindow.addEventListener('focus', failHandler, false);
|
|
w.addEventListener('blur', failHandler, false);
|
|
|
|
action(w);
|
|
|
|
originatingWindow.setTimeout(function () {
|
|
originatingWindow.removeEventListener('focus', failHandler, false);
|
|
w.removeEventListener('blur', failHandler, false);
|
|
|
|
log(!fail, 'The focus should not have been changed!');
|
|
|
|
// Cleaning and running next test.
|
|
w.close();
|
|
originatingWindow.setTimeout(nextTest, 0);
|
|
}, 0);
|
|
}
|
|
|
|
function focusShouldNotChange2(url, nextTest) {
|
|
var fail = false;
|
|
var w;
|
|
function failHandler() { fail = true; }
|
|
|
|
function msgHandler() {
|
|
originatingWindow.removeEventListener('message', msgHandler, false);
|
|
originatingWindow.removeEventListener('focus', failHandler, false);
|
|
|
|
log(!fail, 'The focus should not have been changed with URL=' + url);
|
|
|
|
// Cleaning and running next test.
|
|
w.close();
|
|
originatingWindow.setTimeout(nextTest, 0);
|
|
}
|
|
originatingWindow.addEventListener('message', msgHandler, false)
|
|
|
|
var w = window.open(url, '', 'foo');
|
|
|
|
originatingWindow.addEventListener('focus', failHandler, false);
|
|
w.addEventListener('blur', failHandler, false);
|
|
}
|
|
|
|
function test1() {
|
|
focusShouldNotChange(function (aW) { aW.blur(); }, test2);
|
|
}
|
|
|
|
function test2() {
|
|
focusShouldNotChange(function () { originatingWindow.focus(); }, test3);
|
|
}
|
|
|
|
function test3() {
|
|
focusShouldNotChange2('data:text/html,<script>opener.focus();opener.postMessage("", "*");<\/script>', test4);
|
|
}
|
|
|
|
function test4() {
|
|
focusShouldNotChange2('data:text/html,<script>blur();opener.postMessage("", "*");<\/script>', test5);
|
|
}
|
|
|
|
function test5()
|
|
{
|
|
var w = window.open('about:blank', '', 'foo');
|
|
var fail = true;
|
|
|
|
function handler() { fail = false; }
|
|
|
|
w.addEventListener('focus', handler, false);
|
|
|
|
w.focus();
|
|
|
|
originatingWindow.setTimeout(function () {
|
|
w.removeEventListener('focus', handler, false);
|
|
|
|
log(!fail, 'The last opened window should be able to get focus');
|
|
|
|
w.close();
|
|
originatingWindow.setTimeout(finished, 0);
|
|
}, 0);
|
|
}
|
|
|
|
function finished() {
|
|
log(true, 'All tests finished');
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
}
|
|
|
|
</script>
|
|
</head>
|
|
<body onload='test1()'>
|
|
<p>
|
|
Check that window.blur() does nothing, and window.focus() only works if it is
|
|
invoked from the window that opened the former. If the test passes, you should
|
|
see a series of PASS messages with the last being 'All tests finished'.
|
|
</p>
|
|
<p>
|
|
This test is adopted from <a href='http://mxr.mozilla.org/mozilla-aurora/source/dom/tests/mochitest/bugs/test_bug369306.html'>mozilla's tests</a>.
|
|
</p>
|
|
</div>
|
|
<div id='log'></div>
|
|
</body>
|
|
</html>
|