forked from mirrors/gecko-dev
Bug 1805414 will move menu event handling to the DOM. With that change the current synthetic click behavior of XUL menuitems breaks. On current central, we rely on nsMenuFrame::HandleEvent not getting called at all for synthetic clicks, and instead we just fire a command event synchronously here: https://searchfox.org/mozilla-central/rev/a0d4f8f112c5c792ae272bf6ce50763ddd23ffa2/dom/xul/nsXULElement.cpp#1071 After my patch the command event is fired properly (potentially asynchronously too) by the regular menu activation machinery, which is preferable. * They fire a command event synchronously (even though on some platforms like macOS activating a context menu item is async). * They use a totally different codepath from what a user does. * They don't deal with native menus, etc. We have a proper API for this (activateItem) which takes a much more closer codepath to what users do, requires that the menu is shown, etc. Use that API instead for testing. As a benefit, tests now do not need to close the context menu manually when clicking on a menu item (because we trigger the same code path as users clicking the menu). Differential Revision: https://phabricator.services.mozilla.com/D164567
91 lines
2.8 KiB
JavaScript
91 lines
2.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/**
|
|
* Check whether the preview image for setDesktopBackground is rendered
|
|
* correctly, without stretching
|
|
*/
|
|
|
|
const { ShellService } = ChromeUtils.import(
|
|
"resource:///modules/ShellService.jsm"
|
|
);
|
|
|
|
add_task(async function() {
|
|
await BrowserTestUtils.withNewTab(
|
|
{
|
|
gBrowser,
|
|
url: "about:logo",
|
|
},
|
|
async browser => {
|
|
const dialogLoad = BrowserTestUtils.domWindowOpened(null, async win => {
|
|
await BrowserTestUtils.waitForEvent(win, "load");
|
|
Assert.equal(
|
|
win.document.documentElement.getAttribute("windowtype"),
|
|
"Shell:SetDesktopBackground",
|
|
"Opened correct window"
|
|
);
|
|
return true;
|
|
});
|
|
|
|
const image = content.document.images[0];
|
|
EventUtils.synthesizeMouseAtCenter(image, { type: "contextmenu" });
|
|
|
|
const menu = document.getElementById("contentAreaContextMenu");
|
|
await BrowserTestUtils.waitForPopupEvent(menu, "shown");
|
|
const menuClosed = BrowserTestUtils.waitForPopupEvent(menu, "hidden");
|
|
|
|
const menuItem = document.getElementById("context-setDesktopBackground");
|
|
try {
|
|
menu.activateItem(menuItem);
|
|
} catch (ex) {
|
|
ok(
|
|
menuItem.hidden,
|
|
"should only fail to activate when menu item is hidden"
|
|
);
|
|
ok(
|
|
!ShellService.canSetDesktopBackground,
|
|
"Should only hide when not able to set the desktop background"
|
|
);
|
|
is(
|
|
AppConstants.platform,
|
|
"linux",
|
|
"Should always be able to set desktop background on non-linux platforms"
|
|
);
|
|
todo(false, "Skipping test on this configuration");
|
|
|
|
menu.hidePopup();
|
|
await menuClosed;
|
|
return;
|
|
}
|
|
|
|
await menuClosed;
|
|
|
|
const win = await dialogLoad;
|
|
|
|
/* setDesktopBackground.js does a setTimeout to wait for correct
|
|
dimensions. If we don't wait here we could read the preview dimensions
|
|
before they're changed to match the screen */
|
|
await TestUtils.waitForTick();
|
|
|
|
const canvas = win.document.getElementById("screen");
|
|
const screenRatio = screen.width / screen.height;
|
|
const previewRatio = canvas.clientWidth / canvas.clientHeight;
|
|
|
|
info(`Screen dimensions are ${screen.width}x${screen.height}`);
|
|
info(`Screen's raw ratio is ${screenRatio}`);
|
|
info(
|
|
`Preview dimensions are ${canvas.clientWidth}x${canvas.clientHeight}`
|
|
);
|
|
info(`Preview's raw ratio is ${previewRatio}`);
|
|
|
|
Assert.ok(
|
|
previewRatio < screenRatio + 0.01 && previewRatio > screenRatio - 0.01,
|
|
"Preview's aspect ratio is within ±.01 of screen's"
|
|
);
|
|
|
|
win.close();
|
|
|
|
await menuClosed;
|
|
}
|
|
);
|
|
});
|