зеркало из https://github.com/mozilla/gecko-dev.git
156 строки
6.8 KiB
HTML
156 строки
6.8 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
|
</head>
|
|
<body>
|
|
<script type="application/javascript">
|
|
"use strict";
|
|
|
|
SimpleTest.requestCompleteLog();
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
// Copied from EventUtils.js, but we want *ToWindow methods.
|
|
function synthesizeMouseAtPoint(left, top, aEvent, aWindow) {
|
|
var utils = _getDOMWindowUtils(aWindow);
|
|
var defaultPrevented = false;
|
|
if (utils) {
|
|
var button = aEvent.button || 0;
|
|
var clickCount = aEvent.clickCount || 1;
|
|
var modifiers = _parseModifiers(aEvent);
|
|
var pressure = ("pressure" in aEvent) ? aEvent.pressure : 0;
|
|
var inputSource = ("inputSource" in aEvent) ? aEvent.inputSource : 0;
|
|
|
|
if (("type" in aEvent) && aEvent.type) {
|
|
defaultPrevented = utils.sendMouseEventToWindow(aEvent.type, left, top, button, clickCount, modifiers, false, pressure, inputSource);
|
|
}
|
|
else {
|
|
utils.sendMouseEventToWindow("mousedown", left, top, button, clickCount, modifiers, false, pressure, inputSource);
|
|
utils.sendMouseEventToWindow("mouseup", left, top, button, clickCount, modifiers, false, pressure, inputSource);
|
|
}
|
|
}
|
|
}
|
|
|
|
function runTest() {
|
|
var witness = document.createElement("input");
|
|
witness.setAttribute("type", "text");
|
|
var witness2 = document.createElement("input");
|
|
witness2.setAttribute("type", "text");
|
|
|
|
var iframe = document.createElement("iframe");
|
|
iframe.setAttribute("mozbrowser", "true");
|
|
iframe.setAttribute("ignoreuserfocus", "true");
|
|
iframe.setAttribute("height", "300px");
|
|
|
|
iframe.addEventListener('load', function (e) {
|
|
// Get privileged iframe because mozbrowser iframe is not same origin
|
|
// with the parent. We need to access its content through the wrapper.
|
|
var privilegedIframe = SpecialPowers.wrap(iframe);
|
|
privilegedIframe.contentWindow.addEventListener("MozAfterPaint", function(e) {
|
|
privilegedIframe.contentWindow.addEventListener("focus",
|
|
function(e) {
|
|
ok(!iframe.hasAttribute("ignoreuserfocus"), "Shouldn't get a focus event in ignoreuserfocus iframe!");
|
|
},
|
|
true);
|
|
privilegedIframe.contentWindow.addEventListener("blur",
|
|
function(e) {
|
|
ok(!iframe.hasAttribute("ignoreuserfocus"), "Shouldn't get a blur event in ignoreuserfocus iframe!");
|
|
},
|
|
true);
|
|
|
|
// Sanity check
|
|
witness.focus();
|
|
is(document.activeElement, witness, "witness should have the focus");
|
|
|
|
iframe.focus();
|
|
isnot(document.activeElement, iframe, "[explicit iframe.focus()] iframe should not get the focus");
|
|
|
|
iframe.removeAttribute("ignoreuserfocus");
|
|
iframe.focus();
|
|
is(document.activeElement, iframe, "[explicit iframe.focus()] iframe should get the focus");
|
|
|
|
iframe.setAttribute("ignoreuserfocus", "true");
|
|
|
|
// Test the case when iframe contains <input> and .focus()
|
|
// is called and explicit focus using mouse
|
|
witness.focus();
|
|
|
|
var innerInput = privilegedIframe.contentDocument.getElementsByTagName("input")[0];
|
|
innerInput.focus();
|
|
isnot(document.activeElement, iframe, "[explicit innerInput.focus()] iframe should not have the focus");
|
|
|
|
var iframeWindow = SpecialPowers.unwrap(privilegedIframe.contentWindow);
|
|
witness.focus();
|
|
synthesizeMouseAtCenter(innerInput, {}, iframeWindow);
|
|
is(document.activeElement, witness, "[synthesize mouse click] witness should have the focus");
|
|
|
|
// Test the case when iframe contains <iframe> and .focus()
|
|
// is called and explicit focus using mouse
|
|
witness.focus();
|
|
|
|
var innerIframe = privilegedIframe.contentDocument.getElementsByTagName("iframe")[0];
|
|
innerIframe.focus();
|
|
isnot(document.activeElement, iframe, "[explicit innerIframe.focus()] iframe should not have the focus");
|
|
|
|
witness.focus();
|
|
synthesizeMouseAtCenter(innerIframe, {}, iframeWindow);
|
|
is(document.activeElement, witness, "[synthesize mouse click inner iframe] witness should have the focus");
|
|
|
|
// Test the case when iframe contains <area> and .focus()
|
|
// is called and explicit focus using mouse
|
|
|
|
// Wait for paint to setup frame for area. Currently the area frame
|
|
// map is reset for each paint. If we are in the middle of a paint
|
|
// then the area will not be focusable.
|
|
privilegedIframe.contentWindow.addEventListener("MozAfterPaint", function(e) {
|
|
var innerArea = privilegedIframe.contentDocument.getElementsByTagName("area")[0];
|
|
innerArea.focus();
|
|
isnot(document.activeElement, iframe, "[explicit innerArea.focus()] iframe should not have the focus");
|
|
|
|
witness.focus();
|
|
synthesizeMouseAtCenter(innerArea, {}, iframeWindow);
|
|
is(document.activeElement, witness, "[synthesize mouse click] witness should have the focus");
|
|
|
|
// Test tabindex
|
|
witness.focus();
|
|
is(document.activeElement, witness, "witness should have the focus");
|
|
synthesizeKey("VK_TAB", {});
|
|
isnot(document.activeElement, iframe, "[synthesize tab key] iframe should not have the focus");
|
|
is(document.activeElement, witness2, "witness2 should have the focus");
|
|
|
|
SimpleTest.finish();
|
|
}, {once: true});
|
|
witness.focus();
|
|
// force reflow
|
|
iframe.setAttribute("height", "298px");
|
|
}, {once: true});
|
|
// force reflow
|
|
iframe.setAttribute("height", "299px");
|
|
});
|
|
|
|
document.body.appendChild(witness);
|
|
document.body.appendChild(iframe);
|
|
document.body.appendChild(witness2);
|
|
|
|
iframe.setAttribute("src", "file_ignoreuserfocus.html");
|
|
}
|
|
addEventListener("load", function() {
|
|
SpecialPowers.pushPermissions(
|
|
[{'type': 'browser', 'allow': true, 'context': document}],
|
|
function() {
|
|
SpecialPowers.pushPrefEnv({
|
|
"set": [
|
|
["dom.mozBrowserFramesEnabled", true],
|
|
["network.disable.ipc.security", true],
|
|
]
|
|
}, function() {
|
|
SimpleTest.waitForFocus(runTest);
|
|
});
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|