mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-08 20:47:44 +00:00
135 lines
4.3 KiB
XML
135 lines
4.3 KiB
XML
<?xml version="1.0"?>
|
|
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
|
|
<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
|
|
<!--
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=624329
|
|
-->
|
|
<window title="Mozilla Bug 624329 context menu position"
|
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
|
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
|
|
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
|
|
|
|
<!-- test results are displayed in the html:body -->
|
|
<body xmlns="http://www.w3.org/1999/xhtml"
|
|
onload="openTestWindow()">
|
|
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=624329"
|
|
target="_blank">Mozilla Bug 624329</a>
|
|
</body>
|
|
|
|
<!-- test code goes here -->
|
|
<script type="application/javascript">
|
|
<![CDATA[
|
|
/** Test for Bug 624329 **/
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
var win;
|
|
var timeoutID;
|
|
var menu;
|
|
|
|
function openTestWindow() {
|
|
win = open("bug624329_window.xul", "_blank", "width=300,resizable=yes,chrome");
|
|
// Close our window if the test times out so that it doesn't interfere
|
|
// with later tests.
|
|
timeoutID = setTimeout(function () {
|
|
ok(false, "Test timed out.");
|
|
// Provide some time for a screenshot
|
|
setTimeout(finish, 1000);
|
|
}, 20000);
|
|
}
|
|
|
|
function listenOnce(event, callback) {
|
|
win.addEventListener(event, function listener() {
|
|
win.removeEventListener(event, listener, false);
|
|
callback();
|
|
}, false);
|
|
}
|
|
|
|
function childFocused() {
|
|
// maximizing the window is a simple way to ensure that the menu is near
|
|
// the right edge of the screen.
|
|
|
|
listenOnce("resize", childResized);
|
|
win.maximize();
|
|
}
|
|
|
|
function childResized() {
|
|
const isOSXLion = navigator.userAgent.indexOf("Mac OS X 10.7") != -1;
|
|
const isOSXMtnLion = navigator.userAgent.indexOf("Mac OS X 10.8") != -1;
|
|
const isOSXMavericks = navigator.userAgent.indexOf("Mac OS X 10.9") != -1;
|
|
if (isOSXLion || isOSXMtnLion || isOSXMavericks) {
|
|
todo_is(win.windowState, win.STATE_MAXIMIZED,
|
|
"A resize before being maximized breaks this test on 10.7 and 10.8 and 10.9");
|
|
finish();
|
|
return;
|
|
}
|
|
|
|
is(win.windowState, win.STATE_MAXIMIZED,
|
|
"window should be maximized");
|
|
|
|
isnot(win.innerWidth, 300,
|
|
"window inner width should have changed");
|
|
|
|
openContextMenu();
|
|
}
|
|
|
|
function openContextMenu() {
|
|
var mouseX = win.innerWidth - 10;
|
|
var mouseY = 10;
|
|
|
|
menu = win.document.getElementById("menu");
|
|
var screenX = menu.boxObject.screenX;
|
|
var screenY = menu.boxObject.screenY;
|
|
var utils =
|
|
win.QueryInterface(Components.interfaces.nsIInterfaceRequestor).
|
|
getInterface(Components.interfaces.nsIDOMWindowUtils);
|
|
|
|
utils.sendMouseEvent("contextmenu", mouseX, mouseY, 2, 0, 0);
|
|
|
|
var interval = setInterval(checkMoved, 200);
|
|
function checkMoved() {
|
|
if (menu.boxObject.screenX != screenX ||
|
|
menu.boxObject.screenY != screenY) {
|
|
clearInterval(interval);
|
|
// Wait further to check that the window does not move again.
|
|
setTimeout(checkPosition, 1000);
|
|
}
|
|
}
|
|
|
|
function checkPosition() {
|
|
var menubox = menu.boxObject;
|
|
var winbox = win.document.documentElement.boxObject
|
|
|
|
var x = menubox.screenX - winbox.screenX;
|
|
var y = menubox.screenY - winbox.screenY;
|
|
ok(y >= mouseY,
|
|
"menu top " + y + " should be below click point " + mouseY);
|
|
ok(y <= mouseY + 20,
|
|
"menu top " + y + " should not be too far below click point " + mouseY);
|
|
|
|
ok(x < mouseX,
|
|
"menu left " + x + " should be left of click point " + mouseX);
|
|
var right = x + menubox.width;
|
|
ok(right > mouseX,
|
|
"menu right " + right + " should be right of click point " + mouseX);
|
|
|
|
clearTimeout(timeoutID);
|
|
finish();
|
|
}
|
|
|
|
}
|
|
|
|
function finish() {
|
|
if (menu && navigator.platform.indexOf("Win") >= 0) {
|
|
todo(false, "Should not have to hide popup before closing its window");
|
|
// This avoids mochitest "Unable to restore focus" errors (bug 670053).
|
|
menu.hidePopup();
|
|
}
|
|
win.close();
|
|
SimpleTest.finish();
|
|
}
|
|
|
|
]]>
|
|
</script>
|
|
</window>
|