|
Packit |
f0b94e |
<html>
|
|
Packit |
f0b94e |
<head>
|
|
Packit |
f0b94e |
<title>Test that clicking on plugins transfers focus correctly</title>
|
|
Packit |
f0b94e |
<style>
|
|
Packit |
f0b94e |
embed { width:200px; height:200px; }
|
|
Packit |
f0b94e |
</style>
|
|
Packit |
f0b94e |
</head>
|
|
Packit |
f0b94e |
<body>
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
<input type="text" id="input"></input>
|
|
Packit |
f0b94e |
<embed id="p1" type="application/x-test" wmode="window" paintscript="didPaint('p1')">
|
|
Packit |
f0b94e |
<embed id="p2" type="application/x-test" paintscript="didPaint('p2')">
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
<script type="text/javascript">
|
|
Packit |
f0b94e |
var SimpleTest = window.opener.SimpleTest;
|
|
Packit |
f0b94e |
var is = window.opener.is;
|
|
Packit |
f0b94e |
var ok = window.opener.ok;
|
|
Packit |
f0b94e |
var todo = window.opener.todo;
|
|
Packit |
f0b94e |
var info = window.opener.info;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
SimpleTest.waitForExplicitFinish();
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// We don't want to trigger native mouse events until the document is fully
|
|
Packit |
f0b94e |
// loaded and each plugin has painted once.
|
|
Packit |
f0b94e |
var expectPaints = 2;
|
|
Packit |
f0b94e |
var loaded = false;
|
|
Packit |
f0b94e |
function didPaint(id) {
|
|
Packit |
f0b94e |
ok(--expectPaints >= 0, "Got plugin painted event from "+id);
|
|
Packit |
f0b94e |
document.getElementById(id).setAttribute("paintscript", null);
|
|
Packit |
f0b94e |
if (expectPaints == 0) {
|
|
Packit |
f0b94e |
if (document.readyState == "complete") {
|
|
Packit |
f0b94e |
theTest();
|
|
Packit |
f0b94e |
} else {
|
|
Packit |
f0b94e |
info("Waiting for document load to continue");
|
|
Packit |
f0b94e |
window.addEventListener("load", function() { theTest(); });
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
//
|
|
Packit |
f0b94e |
// Begin the test
|
|
Packit |
f0b94e |
//
|
|
Packit |
f0b94e |
function theTest() {
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
const Cc = SpecialPowers.Cc;
|
|
Packit |
f0b94e |
const Ci = SpecialPowers.Ci;
|
|
Packit |
f0b94e |
var gWindowUtils = SpecialPowers.wrap(window)
|
|
Packit |
f0b94e |
.QueryInterface(Ci.nsIInterfaceRequestor)
|
|
Packit |
f0b94e |
.getInterface(Ci.nsIDOMWindowUtils);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
var nativeMouseDown;
|
|
Packit |
f0b94e |
var nativeMouseUp;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
function nativeClickElement(id) {
|
|
Packit |
f0b94e |
return function() {
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
var element = document.getElementById(id);
|
|
Packit |
f0b94e |
var bounds = element.getBoundingClientRect();
|
|
Packit |
f0b94e |
var x = (bounds.left + window.mozInnerScreenX + 10);
|
|
Packit |
f0b94e |
var y = (bounds.top + window.mozInnerScreenY + 10);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
SimpleTest.executeSoon(function () {
|
|
Packit |
f0b94e |
gWindowUtils.sendNativeMouseEvent(x, y, nativeMouseDown, 0, element);
|
|
Packit |
f0b94e |
gWindowUtils.sendNativeMouseEvent(x, y, nativeMouseUp, 0, element);
|
|
Packit |
f0b94e |
});
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
function done() {
|
|
Packit |
f0b94e |
// Something about this test is losing focus to the OS intermittently, remove
|
|
Packit |
f0b94e |
// the windowed plugins and wait for this window to be focused before
|
|
Packit |
f0b94e |
// continuing. (Bug 874843)
|
|
Packit |
f0b94e |
for (var p of [ "p1", "p2" ]) {
|
|
Packit |
f0b94e |
p = document.getElementById(p);
|
|
Packit |
f0b94e |
p.remove();
|
|
Packit |
f0b94e |
p = null;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
SimpleTest.waitForFocus(window.opener.childDone, window);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
var step = 0;
|
|
Packit |
f0b94e |
var steps = [
|
|
Packit |
f0b94e |
{ event:"focus", id:"input", action:nativeClickElement("p1") },
|
|
Packit |
f0b94e |
{ event:"blur", id:"input" },
|
|
Packit |
f0b94e |
{ event:"focus", id:"p1", action:nativeClickElement("p2") },
|
|
Packit |
f0b94e |
{ event:"blur", id:"p1" },
|
|
Packit |
f0b94e |
{ event:"focus", id:"p2", action:nativeClickElement("input") },
|
|
Packit |
f0b94e |
{ event:"blur", id:"p2" },
|
|
Packit |
f0b94e |
{ event:"focus", id:"input", action:done }
|
|
Packit |
f0b94e |
];
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
function handleEvent(event) {
|
|
Packit |
f0b94e |
if (step >= steps.length)
|
|
Packit |
f0b94e |
return;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
var s = steps[step++];
|
|
Packit |
f0b94e |
is(event.type, s.event, "Check event type");
|
|
Packit |
f0b94e |
is(event.target.id, s.id, "Check event target");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
if (s.action) {
|
|
Packit |
f0b94e |
SimpleTest.executeSoon(s.action);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
var elems = ["input", "p1", "p2"];
|
|
Packit |
f0b94e |
for (var i = 0; i < elems.length; ++i) {
|
|
Packit |
f0b94e |
var e = document.getElementById(elems[i]);
|
|
Packit |
f0b94e |
e.addEventListener("focus", handleEvent);
|
|
Packit |
f0b94e |
e.addEventListener("blur", handleEvent);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
function doTest() {
|
|
Packit |
f0b94e |
input.focus();
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
if (navigator.platform.includes("Mac")) {
|
|
Packit |
f0b94e |
nativeMouseDown = 1; // NSLeftMouseDown
|
|
Packit |
f0b94e |
nativeMouseUp = 2; // NSLeftMouseUp
|
|
Packit |
f0b94e |
SimpleTest.waitForFocus(doTest, window);
|
|
Packit |
f0b94e |
} else if (navigator.platform.includes("Win")) {
|
|
Packit |
f0b94e |
nativeMouseDown = 2; // MOUSEEVENTF_LEFTDOWN
|
|
Packit |
f0b94e |
nativeMouseUp = 4; // MOUSEEVENTF_LEFTUP
|
|
Packit |
f0b94e |
SimpleTest.waitForFocus(doTest, window);
|
|
Packit |
f0b94e |
} else {
|
|
Packit |
f0b94e |
// XXX(johns): our gtk2 sendNativeMouseEvent doesn't support clicks
|
|
Packit |
f0b94e |
todo(false, "Platform not supported");
|
|
Packit |
f0b94e |
done();
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
} // function theTest
|
|
Packit |
f0b94e |
</script>
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
</body>
|
|
Packit |
f0b94e |
</html>
|