Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Ensure that when different combinations of warnings are enabled,
* quitting produces the correct warning (if any), and the checkbox
* is also correct.
*/
add_task(async function test_check_right_prompt() {
let tests = [
{
warnOnQuitShortcut: true,
warnOnClose: false,
expectedDialog: "shortcut",
messageSuffix: "with shortcut but no tabs warning",
},
{
warnOnQuitShortcut: false,
warnOnClose: true,
expectedDialog: "tabs",
messageSuffix: "with tabs but no shortcut warning",
},
{
warnOnQuitShortcut: false,
warnOnClose: false,
messageSuffix: "with no warning",
expectedDialog: null,
},
{
warnOnQuitShortcut: true,
warnOnClose: true,
messageSuffix: "with both warnings",
// Note: this is somewhat arbitrary; I don't think there's a right/wrong
// here, so if this changes due to implementation details, updating the
// text expectation to be "tabs" should be OK.
expectedDialog: "shortcut",
},
];
let tab = BrowserTestUtils.addTab(gBrowser);
function checkDialog(dialog, expectedDialog, messageSuffix) {
let dialogElement = dialog.document.getElementById("commonDialog");
let acceptLabel = dialogElement.getButton("accept").label;
is(
acceptLabel.startsWith("Quit"),
expectedDialog == "shortcut",
`dialog label ${
expectedDialog == "shortcut" ? "should" : "should not"
} start with Quit ${messageSuffix}`
);
let checkLabel = dialogElement.querySelector("checkbox").label;
is(
checkLabel.includes("before quitting with"),
expectedDialog == "shortcut",
`checkbox label ${
expectedDialog == "shortcut" ? "should" : "should not"
} be for quitting ${messageSuffix}`
);
dialogElement.getButton("cancel").click();
}
let dialogOpened = false;
function setDialogOpened() {
dialogOpened = true;
}
Services.obs.addObserver(setDialogOpened, "common-dialog-loaded");
for (let {
warnOnClose,
warnOnQuitShortcut,
expectedDialog,
messageSuffix,
} of tests) {
dialogOpened = false;
let promise = null;
await SpecialPowers.pushPrefEnv({
set: [
["browser.tabs.warnOnClose", warnOnClose],
["browser.warnOnQuitShortcut", warnOnQuitShortcut],
["browser.warnOnQuit", true],
],
});
if (expectedDialog) {
promise = BrowserTestUtils.promiseAlertDialogOpen("", undefined, {
callback(win) {
checkDialog(win, expectedDialog, messageSuffix);
},
});
}
is(
!canQuitApplication(undefined, "shortcut"),
!!expectedDialog,
`canQuitApplication ${
expectedDialog ? "should" : "should not"
} block ${messageSuffix}.`
);
await promise;
is(
dialogOpened,
!!expectedDialog,
`Should ${
expectedDialog ? "" : "not "
}have opened a dialog ${messageSuffix}.`
);
}
Services.obs.removeObserver(setDialogOpened, "common-dialog-loaded");
BrowserTestUtils.removeTab(tab);
});