1444 lines
34 KiB
HTML
1444 lines
34 KiB
HTML
|
|
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<title>Modal Prompts Test</title>
|
|
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="text/javascript" src="prompt_common.js"></script>
|
|
</head>
|
|
<body>
|
|
Prompter tests: modal prompts
|
|
<p id="display"></p>
|
|
|
|
<div id="content" style="display: none">
|
|
<iframe id="iframe"></iframe>
|
|
</div>
|
|
|
|
<pre id="test">
|
|
<script class="testbody" type="text/javascript">
|
|
/* eslint-disable complexity */
|
|
async function runTests(util) {
|
|
const { NetUtil } = SpecialPowers.ChromeUtils.importESModule(
|
|
"resource://gre/modules/NetUtil.sys.mjs"
|
|
);
|
|
const { AppConstants } = SpecialPowers.ChromeUtils.importESModule(
|
|
"resource://gre/modules/AppConstants.sys.mjs"
|
|
);
|
|
|
|
let state, action, promptDone;
|
|
|
|
let checkVal = {};
|
|
let textVal = {};
|
|
let passVal = {};
|
|
let flags;
|
|
let isOK;
|
|
|
|
// =====
|
|
info("Starting test: Alert");
|
|
state = {
|
|
msg: "This is the alert text.",
|
|
title: "TestTitle",
|
|
iconClass: "alert-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
promptArgs = ["TestTitle", "This is the alert text."];
|
|
await util.prompt("alert", promptArgs);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: AlertCheck (null checkbox label, so it's hidden)");
|
|
state = {
|
|
msg: "This is the alertCheck text.",
|
|
title: "TestTitle",
|
|
iconClass: "alert-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the alertCheck text.",
|
|
null,
|
|
util.useAsync ? false : {},
|
|
];
|
|
util.prompt("alertCheck", promptArgs);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: AlertCheck");
|
|
state = {
|
|
msg: "This is the alertCheck text.",
|
|
title: "TestTitle",
|
|
iconClass: "alert-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: false,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "Check me out!",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
setCheckbox: true,
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
checkVal.value = false;
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the alertCheck text.",
|
|
"Check me out!",
|
|
util.useAsync ? checkVal.value : checkVal,
|
|
];
|
|
let result = await util.prompt("alertCheck", promptArgs);
|
|
is(
|
|
util.useAsync ? result.checked : checkVal.value,
|
|
true,
|
|
"checkbox was checked"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: Confirm (ok)");
|
|
state = {
|
|
msg: "This is the confirm text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
promptArgs = ["TestTitle", "This is the confirm text."];
|
|
result = await util.prompt("confirm", promptArgs);
|
|
is(util.useAsync ? result.ok : result, true, "checked expected retval");
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: Confirm (cancel)");
|
|
state = {
|
|
msg: "This is the confirm text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "cancel",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
promptArgs = ["TestTitle", "This is the confirm text."];
|
|
result = await util.prompt("confirm", promptArgs);
|
|
is(util.useAsync ? result.ok : result, false, "checked expected retval");
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: ConfirmCheck (ok, null checkbox label)");
|
|
state = {
|
|
msg: "This is the confirmCheck text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmCheck text.",
|
|
null,
|
|
util.useAsync ? false : {},
|
|
];
|
|
result = await util.prompt("confirmCheck", promptArgs);
|
|
is(util.useAsync ? result.ok : result, true, "checked expected retval");
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: ConfirmCheck (cancel, null checkbox label)");
|
|
state = {
|
|
msg: "This is the confirmCheck text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "cancel",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmCheck text.",
|
|
null,
|
|
util.useAsync ? false : {},
|
|
];
|
|
result = await util.prompt("confirmCheck", promptArgs);
|
|
is(util.useAsync ? result.ok : result, false, "checked expected retval");
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: ConfirmCheck (ok)");
|
|
state = {
|
|
msg: "This is the confirmCheck text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: false,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "Check me out!",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
setCheckbox: true,
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
checkVal.value = false;
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmCheck text.",
|
|
"Check me out!",
|
|
util.useAsync ? checkVal.value : checkVal,
|
|
];
|
|
result = await util.prompt("confirmCheck", promptArgs);
|
|
is(util.useAsync ? result.ok : result, true, "checked expected retval");
|
|
is(
|
|
util.useAsync ? result.checked : checkVal.value,
|
|
true,
|
|
"expected checkbox setting"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: ConfirmCheck (cancel)");
|
|
state = {
|
|
msg: "This is the confirmCheck text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: false,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "Check me out!",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "cancel",
|
|
setCheckbox: true,
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
checkVal.value = false;
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmCheck text.",
|
|
"Check me out!",
|
|
util.useAsync ? checkVal.value : checkVal,
|
|
];
|
|
result = await util.prompt("confirmCheck", promptArgs);
|
|
is(util.useAsync ? result.ok : result, false, "checked expected retval");
|
|
is(
|
|
util.useAsync ? result.checked : checkVal.value,
|
|
true,
|
|
"expected checkbox setting"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: Prompt (ok, no default text)");
|
|
state = {
|
|
msg: "This is the prompt text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: false,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "textField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
textField: "bacon",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
textVal.value = "";
|
|
promptArgs = ["TestTitle", "This is the prompt text.", util.useAsync ? textVal.value : textVal , null, util.useAsync ? false : {}];
|
|
result = await util.prompt("prompt", promptArgs);
|
|
is(util.useAsync ? result.ok : result, true, "checked expected retval");
|
|
is(
|
|
util.useAsync ? result.value : textVal.value,
|
|
"bacon",
|
|
"checking expected text value"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: Prompt (ok, default text)");
|
|
state = {
|
|
msg: "This is the prompt text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: false,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "kittens",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "textField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
textVal.value = "kittens";
|
|
promptArgs = ["TestTitle", "This is the prompt text.", util.useAsync ? textVal.value : textVal, null, util.useAsync ? false : {}];
|
|
result = await util.prompt("prompt", promptArgs);
|
|
is(util.useAsync ? result.ok : result, true, "checked expected retval");
|
|
is(
|
|
util.useAsync ? result.value : textVal.value,
|
|
"kittens",
|
|
"checking expected text value"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: Prompt (cancel, default text)");
|
|
state = {
|
|
msg: "This is the prompt text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: false,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "puppies",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "textField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "cancel",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
textVal.value = "puppies";
|
|
promptArgs = ["TestTitle", "This is the prompt text.", util.useAsync ? textVal.value : textVal, null, util.useAsync ? false : {}];
|
|
result = await util.prompt("prompt", promptArgs);
|
|
is(util.useAsync ? result.ok : result, false, "checked expected retval");
|
|
is(
|
|
util.useAsync ? result.value : textVal.value,
|
|
"puppies",
|
|
"checking expected text value"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: Prompt (cancel, default text modified)");
|
|
state = {
|
|
msg: "This is the prompt text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: false,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "puppies",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "textField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "cancel",
|
|
textField: "bacon",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
textVal.value = "puppies";
|
|
promptArgs = ["TestTitle", "This is the prompt text.", util.useAsync ? textVal.value : textVal, null, util.useAsync ? false : {}];
|
|
result = await util.prompt("prompt", promptArgs);
|
|
is(util.useAsync ? result.ok : result, false, "checked expected retval");
|
|
is(
|
|
util.useAsync ? result.value : textVal.value,
|
|
"puppies",
|
|
"checking expected text value"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: Prompt (ok, with checkbox)");
|
|
state = {
|
|
msg: "This is the prompt text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: false,
|
|
passHidden: true,
|
|
checkHidden: false,
|
|
textValue: "tribbles",
|
|
passValue: "",
|
|
checkMsg: "Check me out!",
|
|
checked: false,
|
|
focused: "textField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
setCheckbox: true,
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
textVal.value = "tribbles";
|
|
checkVal.value = false;
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the prompt text.",
|
|
util.useAsync ? textVal.value : textVal,
|
|
"Check me out!",
|
|
util.useAsync ? checkVal.value : checkVal,
|
|
];
|
|
result = await util.prompt("prompt", promptArgs);
|
|
is(util.useAsync ? result.ok : result, true, "checked expected retval");
|
|
is(
|
|
util.useAsync ? result.value : textVal.value,
|
|
"tribbles",
|
|
"checking expected text value"
|
|
);
|
|
is(
|
|
util.useAsync ? result.checked : checkVal.value,
|
|
true,
|
|
"expected checkbox setting"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: Prompt (cancel, with checkbox)");
|
|
state = {
|
|
msg: "This is the prompt text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: false,
|
|
passHidden: true,
|
|
checkHidden: false,
|
|
textValue: "tribbles",
|
|
passValue: "",
|
|
checkMsg: "Check me out!",
|
|
checked: false,
|
|
focused: "textField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "cancel",
|
|
setCheckbox: true,
|
|
};
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
textVal.value = "tribbles";
|
|
checkVal.value = false;
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the prompt text.",
|
|
util.useAsync ? textVal.value : textVal,
|
|
"Check me out!",
|
|
util.useAsync ? checkVal.value : checkVal,
|
|
];
|
|
result = await util.prompt("prompt", promptArgs);
|
|
is(util.useAsync ? result.ok : result, false, "checked expected retval");
|
|
is(
|
|
util.useAsync ? result.value : textVal.value,
|
|
"tribbles",
|
|
"checking expected text value"
|
|
);
|
|
ok(
|
|
util.useAsync ? result.checked : !checkVal.value,
|
|
"expected checkbox setting"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
// Just two tests for this, since password manager already tests this extensively.
|
|
info("Starting test: PromptUsernameAndPassword (ok)");
|
|
state = {
|
|
msg: "This is the pUAP text.",
|
|
title: "TestTitle",
|
|
iconClass: "authentication-icon question-icon",
|
|
titleHidden: true,
|
|
textHidden: false,
|
|
passHidden: false,
|
|
checkHidden: true,
|
|
checkMsg: "",
|
|
checked: false,
|
|
textValue: "usr",
|
|
passValue: "ssh",
|
|
focused: "textField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
textField: "newusr",
|
|
passField: "newssh",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
textVal.value = "usr";
|
|
passVal.value = "ssh";
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the pUAP text.",
|
|
util.useAsync ? textVal.value : textVal,
|
|
util.useAsync ? passVal.value : passVal
|
|
];
|
|
result = await util.prompt("promptUsernameAndPassword", promptArgs);
|
|
is(util.useAsync ? result.ok : result, true, "checked expected retval");
|
|
is(
|
|
util.useAsync ? result.user : textVal.value,
|
|
"newusr",
|
|
"checking expected text value"
|
|
);
|
|
is(
|
|
util.useAsync ? result.pass : passVal.value,
|
|
"newssh",
|
|
"checking expected pass value"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: PromptUsernameAndPassword (cancel)");
|
|
state = {
|
|
msg: "This is the pUAP text.",
|
|
title: "TestTitle",
|
|
iconClass: "authentication-icon question-icon",
|
|
titleHidden: true,
|
|
textHidden: false,
|
|
passHidden: false,
|
|
checkHidden: true,
|
|
checkMsg: "",
|
|
checked: false,
|
|
textValue: "usr",
|
|
passValue: "ssh",
|
|
focused: "textField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "cancel",
|
|
textField: "newusr",
|
|
passField: "newssh",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
textVal.value = "usr";
|
|
passVal.value = "ssh";
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the pUAP text.",
|
|
util.useAsync ? textVal.value : textVal,
|
|
util.useAsync ? passVal.value : passVal
|
|
];
|
|
result = await util.prompt("promptUsernameAndPassword", promptArgs);
|
|
is(util.useAsync ? result.ok : result, false, "checked expected retval");
|
|
ok(
|
|
(util.useAsync && result.user == "newusr") || textVal.value == "usr",
|
|
"checking expected text value"
|
|
);
|
|
ok(
|
|
(util.useAsync && result.pass == "newpass") || passVal.value == "ssh",
|
|
"checking expected pass value"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: PromptPassword (ok)");
|
|
state = {
|
|
msg: "This is the promptPassword text.",
|
|
title: "TestTitle",
|
|
iconClass: "authentication-icon question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: false,
|
|
checkHidden: true,
|
|
checkMsg: "",
|
|
checked: false,
|
|
textValue: "",
|
|
passValue: "ssh",
|
|
focused: "passField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
passField: "newssh",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
passVal.value = "ssh";
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the promptPassword text.",
|
|
util.useAsync ? passVal.value : passVal
|
|
];
|
|
result = await util.prompt("promptPassword", promptArgs);
|
|
is(util.useAsync ? result.ok : result, true, "checked expected retval");
|
|
is(
|
|
util.useAsync ? result.pass : passVal.value,
|
|
"newssh",
|
|
"checking expected pass value"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: PromptPassword (cancel)");
|
|
state = {
|
|
msg: "This is the promptPassword text.",
|
|
title: "TestTitle",
|
|
iconClass: "authentication-icon question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: false,
|
|
checkHidden: true,
|
|
checkMsg: "",
|
|
checked: false,
|
|
textValue: "",
|
|
passValue: "ssh",
|
|
focused: "passField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "cancel",
|
|
passField: "newssh",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
passVal.value = "ssh";
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the promptPassword text.",
|
|
util.useAsync ? passVal.value : passVal
|
|
];
|
|
result = await util.prompt("promptPassword", promptArgs);
|
|
is(util.useAsync ? result.ok : result, false, "checked expected retval");
|
|
ok(
|
|
(util.useAsync && result.pass == "newssh") || passVal.value == "ssh",
|
|
"checking expected pass value"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: ConfirmEx (no buttons)");
|
|
state = {
|
|
msg: "This is the confirmEx text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
butt0Label: "",
|
|
butt1Label: "",
|
|
focused: null,
|
|
defButton: "button0",
|
|
};
|
|
|
|
if (isOSX) {
|
|
// OS X doesn't initially focus the button, but rather the infoBody.
|
|
state.focused = "infoBody";
|
|
}
|
|
|
|
action = {
|
|
buttonClick: "abort_dialogs",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
flags = Ci.nsIPromptService.BUTTON_NONE | Ci.nsIPromptService.SHOW_SPINNER;
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmEx text.",
|
|
flags,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
util.useAsync ? false : {},
|
|
];
|
|
result = await util.prompt("confirmEx", promptArgs);
|
|
is(
|
|
util.useAsync ? result.buttonNumClicked : result,
|
|
1,
|
|
"checked button click num unchanged from default"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: ConfirmEx (invalid request for no buttons)");
|
|
// BUTTON_TITLE_IS_STRING with no title removes the button. This is forbidden
|
|
// for button0 unless flags includes
|
|
// Ci.nsIPromptService.BUTTON_NONE_ENABLE_BIT.
|
|
flags =
|
|
Ci.nsIPromptService.BUTTON_TITLE_IS_STRING *
|
|
Ci.nsIPromptService.BUTTON_POS_0;
|
|
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmEx text.",
|
|
flags,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
util.useAsync ? false : {},
|
|
];
|
|
|
|
let gotException = false;
|
|
try {
|
|
await util.prompt("confirmEx", promptArgs);
|
|
} catch {
|
|
gotException = true;
|
|
}
|
|
ok(gotException, "Received exception for invalid button request");
|
|
|
|
// =====
|
|
info("Starting test: ConfirmEx (ok/cancel, ok)");
|
|
state = {
|
|
msg: "This is the confirmEx text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
butt0Label: "OK",
|
|
butt1Label: "Cancel",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
flags = Ci.nsIPromptService.STD_OK_CANCEL_BUTTONS;
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmEx text.",
|
|
flags,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
util.useAsync ? false : {},
|
|
];
|
|
result = await util.prompt("confirmEx", promptArgs);
|
|
is(
|
|
util.useAsync ? result.buttonNumClicked : result,
|
|
0,
|
|
"checked expected button num click"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: ConfirmEx (yes/no, cancel)");
|
|
state = {
|
|
msg: "This is the confirmEx text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
butt0Label: "Yes",
|
|
butt1Label: "No",
|
|
};
|
|
action = {
|
|
buttonClick: "cancel",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
flags = Ci.nsIPromptService.STD_YES_NO_BUTTONS;
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmEx text.",
|
|
flags,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
util.useAsync ? false : {},
|
|
];
|
|
result = await util.prompt("confirmEx", promptArgs);
|
|
is(
|
|
util.useAsync ? result.buttonNumClicked : result,
|
|
1,
|
|
"checked expected button num click"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: ConfirmEx (buttons from args, checkbox, ok)");
|
|
state = {
|
|
msg: "This is the confirmEx text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: false,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "Check me out!",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
butt0Label: "butt0",
|
|
butt1Label: "butt1",
|
|
butt2Label: "butt2",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
setCheckbox: true,
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
let b = Ci.nsIPromptService.BUTTON_TITLE_IS_STRING;
|
|
flags =
|
|
b * Ci.nsIPromptService.BUTTON_POS_2 +
|
|
b * Ci.nsIPromptService.BUTTON_POS_1 +
|
|
b * Ci.nsIPromptService.BUTTON_POS_0;
|
|
checkVal.value = false;
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmEx text.",
|
|
flags,
|
|
"butt0",
|
|
"butt1",
|
|
"butt2",
|
|
"Check me out!",
|
|
util.useAsync ? checkVal.value : checkVal,
|
|
];
|
|
result = await util.prompt("confirmEx", promptArgs);
|
|
is(
|
|
util.useAsync ? result.buttonNumClicked : result,
|
|
0,
|
|
"checked expected button num click"
|
|
);
|
|
is(
|
|
util.useAsync ? result.checked : checkVal.value,
|
|
true,
|
|
"expected checkbox setting"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: ConfirmEx (buttons from args, checkbox, cancel)");
|
|
state = {
|
|
msg: "This is the confirmEx text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: false,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "Check me out!",
|
|
checked: false,
|
|
focused: "button1", // Default changed!
|
|
defButton: "button1",
|
|
butt0Label: "butt0",
|
|
butt1Label: "butt1",
|
|
butt2Label: "butt2",
|
|
};
|
|
action = {
|
|
buttonClick: "cancel",
|
|
setCheckbox: true,
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
b = Ci.nsIPromptService.BUTTON_TITLE_IS_STRING;
|
|
flags =
|
|
b * Ci.nsIPromptService.BUTTON_POS_2 +
|
|
b * Ci.nsIPromptService.BUTTON_POS_1 +
|
|
b * Ci.nsIPromptService.BUTTON_POS_0;
|
|
flags ^= Ci.nsIPromptService.BUTTON_POS_1_DEFAULT;
|
|
checkVal.value = false;
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmEx text.",
|
|
flags,
|
|
"butt0",
|
|
"butt1",
|
|
"butt2",
|
|
"Check me out!",
|
|
util.useAsync ? checkVal.value : checkVal,
|
|
];
|
|
result = await util.prompt("confirmEx", promptArgs);
|
|
is(
|
|
util.useAsync ? result.buttonNumClicked : result,
|
|
1,
|
|
"checked expected button num click"
|
|
);
|
|
is(
|
|
util.useAsync ? result.checked : checkVal.value,
|
|
true,
|
|
"expected checkbox setting"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: ConfirmEx (buttons from args, checkbox, button3)");
|
|
state = {
|
|
msg: "This is the confirmEx text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: false,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "Check me out!",
|
|
checked: false,
|
|
focused: "button2", // Default changed!
|
|
defButton: "button2",
|
|
butt0Label: "butt0",
|
|
butt1Label: "butt1",
|
|
butt2Label: "butt2",
|
|
};
|
|
action = {
|
|
buttonClick: 2,
|
|
setCheckbox: true,
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
b = Ci.nsIPromptService.BUTTON_TITLE_IS_STRING;
|
|
flags =
|
|
b * Ci.nsIPromptService.BUTTON_POS_2 +
|
|
b * Ci.nsIPromptService.BUTTON_POS_1 +
|
|
b * Ci.nsIPromptService.BUTTON_POS_0;
|
|
flags ^= Ci.nsIPromptService.BUTTON_POS_2_DEFAULT;
|
|
checkVal.value = false;
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmEx text.",
|
|
flags,
|
|
"butt0",
|
|
"butt1",
|
|
"butt2",
|
|
"Check me out!",
|
|
util.useAsync ? checkVal.value : checkVal,
|
|
];
|
|
result = await util.prompt("confirmEx", promptArgs);
|
|
is(
|
|
util.useAsync ? result.buttonNumClicked : result,
|
|
2,
|
|
"checked expected button num click"
|
|
);
|
|
is(
|
|
util.useAsync ? result.checked : checkVal.value,
|
|
true,
|
|
"expected checkbox setting"
|
|
);
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
info("Starting test: ConfirmEx (buttons from args, cancel, isExtra1Secondary flag)");
|
|
state = {
|
|
msg: "This is the confirmEx text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
butt0Label: "butt0",
|
|
butt1Label: "Cancel",
|
|
butt2Label: "butt2",
|
|
isExtra1Secondary: true,
|
|
};
|
|
action = {
|
|
buttonClick: "cancel",
|
|
};
|
|
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
flags =
|
|
(Ci.nsIPromptService.BUTTON_TITLE_IS_STRING *
|
|
Ci.nsIPromptService.BUTTON_POS_0 +
|
|
Ci.nsIPromptService.BUTTON_TITLE_CANCEL *
|
|
Ci.nsIPromptService.BUTTON_POS_1 +
|
|
Ci.nsIPromptService.BUTTON_TITLE_IS_STRING *
|
|
Ci.nsIPromptService.BUTTON_POS_2) |
|
|
Ci.nsIPromptService.BUTTON_POS_1_IS_SECONDARY;
|
|
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmEx text.",
|
|
flags,
|
|
"butt0",
|
|
null,
|
|
"butt2",
|
|
null,
|
|
util.useAsync ? false : {},
|
|
];
|
|
result = await util.prompt("confirmEx", promptArgs);
|
|
if (util.useAsync && AppConstants.XP_UNIX) {
|
|
is(
|
|
result.isExtra1Secondary,
|
|
true,
|
|
"checking extra1 button is positioned as a secondary action"
|
|
);
|
|
}
|
|
|
|
await promptDone;
|
|
|
|
// =====
|
|
// (skipped for E10S and tabmodal tests: window is required)
|
|
info("Starting test: Alert, no window");
|
|
state = {
|
|
msg: "This is the alert text.",
|
|
title: "TestTitle",
|
|
iconClass: "alert-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: "button0",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
};
|
|
if (util.modalType === Ci.nsIPrompt.MODAL_TYPE_WINDOW && !isE10S) {
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
promptArgs = ["TestTitle", "This is the alert text."];
|
|
await util.prompt("alert", promptArgs);
|
|
|
|
await promptDone;
|
|
}
|
|
|
|
// =====
|
|
// (skipped for tabmodal tests: delay not supported)
|
|
info("Starting test: ConfirmEx (delay, ok)");
|
|
state = {
|
|
msg: "This is the confirmEx delay text.",
|
|
title: "TestTitle",
|
|
iconClass: "question-icon",
|
|
titleHidden: true,
|
|
textHidden: true,
|
|
passHidden: true,
|
|
checkHidden: true,
|
|
textValue: "",
|
|
passValue: "",
|
|
checkMsg: "",
|
|
checked: false,
|
|
focused: null, // Nothing focused until the delay triggers.
|
|
defButton: "button0",
|
|
butt0Label: "OK",
|
|
butt1Label: "Cancel",
|
|
butt0Disabled: true,
|
|
};
|
|
|
|
if (isOSX) {
|
|
// OS X doesn't initially focus the button, but rather the infoBody.
|
|
// The focus stays there even after the button-enable delay has fired.
|
|
state.focused = "infoBody";
|
|
}
|
|
|
|
action = {
|
|
buttonClick: "pollOK",
|
|
};
|
|
if (util.modalType === Ci.nsIPrompt.MODAL_TYPE_WINDOW) {
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
flags =
|
|
Ci.nsIPromptService.STD_OK_CANCEL_BUTTONS |
|
|
Ci.nsIPromptService.BUTTON_DELAY_ENABLE;
|
|
promptArgs = [
|
|
"TestTitle",
|
|
"This is the confirmEx delay text.",
|
|
flags,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
util.useAsync ? false : {},
|
|
];
|
|
result = await util.prompt("confirmEx", promptArgs);
|
|
is(
|
|
util.useAsync ? result.buttonNumClicked : result,
|
|
0,
|
|
"checked expected button num click"
|
|
);
|
|
|
|
await promptDone;
|
|
}
|
|
|
|
// promptAuth already tested via password manager but do a few specific things here.
|
|
var channel = NetUtil.newChannel({
|
|
uri: "http://example.com",
|
|
loadUsingSystemPrincipal: true,
|
|
});
|
|
|
|
var level = Ci.nsIAuthPrompt2.LEVEL_NONE;
|
|
var authinfo = {
|
|
username: "",
|
|
password: "",
|
|
domain: "",
|
|
flags: Ci.nsIAuthInformation.AUTH_HOST,
|
|
authenticationScheme: "basic",
|
|
realm: "",
|
|
};
|
|
|
|
let msg =
|
|
util.modalType == Ci.nsIPrompt.MODAL_TYPE_TAB
|
|
? "This site is asking you to sign in."
|
|
: "http://example.com is requesting your username and password.";
|
|
// =====
|
|
// (promptAuth is only accessible from the prompt service)
|
|
info("Starting test: promptAuth with empty realm");
|
|
state = {
|
|
msg,
|
|
title: "TestTitle",
|
|
iconClass: "authentication-icon question-icon",
|
|
titleHidden: true,
|
|
textHidden: false,
|
|
passHidden: false,
|
|
checkHidden: true,
|
|
checkMsg: "",
|
|
checked: false,
|
|
textValue: "",
|
|
passValue: "",
|
|
focused: "textField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
textField: "username",
|
|
passField: "password",
|
|
};
|
|
if (util.usePromptService && !util.useAsync) {
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
promptArgs = [channel, level, authinfo];
|
|
isOK = await util.prompt("promptAuth", promptArgs);
|
|
is(isOK, true, "checked expected retval");
|
|
is(authinfo.username, "username", "checking filled username");
|
|
is(authinfo.password, "password", "checking filled password");
|
|
|
|
await promptDone;
|
|
}
|
|
|
|
// =====
|
|
// (promptAuth is only accessible from the prompt service)
|
|
msg =
|
|
util.modalType == Ci.nsIPrompt.MODAL_TYPE_TAB
|
|
? "This site is asking you to sign in."
|
|
: "http://example.com is requesting your username and password. The site " +
|
|
"says: \u201cabcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi " +
|
|
"abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi " +
|
|
"abcdefghi \u2026\u201d";
|
|
|
|
info("Starting test: promptAuth with long realm");
|
|
state = {
|
|
msg,
|
|
title: "TestTitle",
|
|
iconClass: "authentication-icon question-icon",
|
|
titleHidden: true,
|
|
textHidden: false,
|
|
passHidden: false,
|
|
checkHidden: true,
|
|
checkMsg: "",
|
|
checked: false,
|
|
textValue: "",
|
|
passValue: "",
|
|
focused: "textField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
textField: "username",
|
|
passField: "password",
|
|
};
|
|
if (util.usePromptService && !util.useAsync) {
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
var longString = "";
|
|
for (var i = 0; i < 20; i++) longString += "abcdefghi "; // 200 chars long
|
|
authinfo.realm = longString;
|
|
authinfo.username = "";
|
|
authinfo.password = "";
|
|
promptArgs = [channel, level, authinfo];
|
|
isOK = await util.prompt("promptAuth", promptArgs);
|
|
is(isOK, true, "checked expected retval");
|
|
is(authinfo.username, "username", "checking filled username");
|
|
is(authinfo.password, "password", "checking filled password");
|
|
|
|
await promptDone;
|
|
}
|
|
|
|
msg =
|
|
util.modalType == Ci.nsIPrompt.MODAL_TYPE_TAB
|
|
? ("This site is asking you to sign in. Warning: Your login information " +
|
|
"will be shared with example.com, not the website you are currently visiting.")
|
|
: ("http://example.com is requesting your username and password. " +
|
|
"WARNING: Your password will not be sent to the website you are currently visiting!");
|
|
info("Starting test: promptAuth for a cross-origin and a empty realm");
|
|
authinfo = {
|
|
username: "",
|
|
password: "",
|
|
domain: "",
|
|
flags:
|
|
Ci.nsIAuthInformation.AUTH_HOST |
|
|
Ci.nsIAuthInformation.CROSS_ORIGIN_SUB_RESOURCE,
|
|
authenticationScheme: "basic",
|
|
realm: "",
|
|
};
|
|
state = {
|
|
msg,
|
|
title: "TestTitle",
|
|
iconClass: "authentication-icon question-icon",
|
|
titleHidden: true,
|
|
textHidden: false,
|
|
passHidden: false,
|
|
checkHidden: true,
|
|
checkMsg: "",
|
|
checked: false,
|
|
textValue: "",
|
|
passValue: "",
|
|
focused: "textField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
textField: "username",
|
|
passField: "password",
|
|
};
|
|
if (util.usePromptService && !util.useAsync) {
|
|
promptDone = handlePrompt(state, action);
|
|
promptArgs = [channel, level, authinfo];
|
|
isOK = await util.prompt("promptAuth", promptArgs);
|
|
is(isOK, true, "checked expected retval");
|
|
is(authinfo.username, "username", "checking filled username");
|
|
is(authinfo.password, "password", "checking filled password");
|
|
|
|
await promptDone;
|
|
}
|
|
|
|
info("Starting test: promptAuth for a cross-origin with realm");
|
|
authinfo = {
|
|
username: "",
|
|
password: "",
|
|
domain: "",
|
|
flags:
|
|
Ci.nsIAuthInformation.AUTH_HOST |
|
|
Ci.nsIAuthInformation.CROSS_ORIGIN_SUB_RESOURCE,
|
|
authenticationScheme: "basic",
|
|
realm: "Something!!!",
|
|
};
|
|
state = {
|
|
msg, // Same as previous test, see above.
|
|
title: "TestTitle",
|
|
iconClass: "authentication-icon question-icon",
|
|
titleHidden: true,
|
|
textHidden: false,
|
|
passHidden: false,
|
|
checkHidden: true,
|
|
checkMsg: "",
|
|
checked: false,
|
|
textValue: "",
|
|
passValue: "",
|
|
focused: "textField",
|
|
defButton: "button0",
|
|
};
|
|
action = {
|
|
buttonClick: "ok",
|
|
textField: "username",
|
|
passField: "password",
|
|
};
|
|
if (util.usePromptService && !util.useAsync) {
|
|
promptDone = handlePrompt(state, action);
|
|
|
|
promptArgs = [channel, level, authinfo];
|
|
isOK = await util.prompt("promptAuth", promptArgs);
|
|
is(isOK, true, "checked expected retval");
|
|
is(authinfo.username, "username", "checking filled username");
|
|
is(authinfo.password, "password", "checking filled password");
|
|
|
|
await promptDone;
|
|
}
|
|
}
|
|
|
|
let promptArgs;
|
|
|
|
add_task(async function runPromptTests() {
|
|
await runPromptCombinations(window, runTests);
|
|
});
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
</html>
|