Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
"use strict";
var { click_account_tree_row, get_account_tree_row, open_advanced_settings } =
ChromeUtils.importESModule(
);
var { close_popup, wait_for_popup_to_open } = ChromeUtils.importESModule(
);
var { content_tab_e } = ChromeUtils.importESModule(
);
var { MailServices } = ChromeUtils.importESModule(
);
var imapAccount, nntpAccount, originalAccountCount;
add_setup(function () {
// There may be pre-existing accounts from other tests.
originalAccountCount = MailServices.accounts.allServers.length;
// There already should be a Local Folders account created.
// It is needed for this test.
Assert.ok(MailServices.accounts.localFoldersServer);
// Create an IMAP server
const imapServer = MailServices.accounts
.createIncomingServer("nobody", "example.com", "imap")
.QueryInterface(Ci.nsIImapIncomingServer);
let identity = MailServices.accounts.createIdentity();
identity.email = "tinderbox@example.com";
imapAccount = MailServices.accounts.createAccount();
imapAccount.incomingServer = imapServer;
imapAccount.addIdentity(identity);
// Create a NNTP server
const nntpServer = MailServices.accounts
.createIncomingServer(null, "example.nntp.invalid", "nntp")
.QueryInterface(Ci.nsINntpIncomingServer);
identity = MailServices.accounts.createIdentity();
identity.email = "tinderbox2@example.com";
nntpAccount = MailServices.accounts.createAccount();
nntpAccount.incomingServer = nntpServer;
nntpAccount.addIdentity(identity);
// Now there should be 2 more accounts.
Assert.equal(
MailServices.accounts.allServers.length,
originalAccountCount + 2
);
});
registerCleanupFunction(function () {
// Remove our test accounts to leave the profile clean.
MailServices.accounts.removeAccount(nntpAccount);
MailServices.accounts.removeAccount(imapAccount);
// There should be only the original accounts left.
Assert.equal(MailServices.accounts.allServers.length, originalAccountCount);
});
/**
* Check that the account actions for the account are enabled or disabled appropriately.
*
* @param {object} tab - The account manager tab.
* @param {number} accountKey - The key of the account to select.
* @param {boolean} isSetAsDefaultEnabled - True if the menuitem should be enabled, false otherwise.
* "none" if the button doesn't exist.
* @param {boolean} isAddAccountEnabled - True if the menuitems (Add Mail Account+Add Other Account)
* should be enabled, false otherwise.
*/
async function subtest_check_account_actions(
tab,
accountKey,
isSetAsDefaultEnabled,
isAddAccountEnabled
) {
const accountRow = get_account_tree_row(accountKey, null, tab);
await click_account_tree_row(tab, accountRow);
// click the New Account Button to bring up the popup with menuitems to test
const button = content_tab_e(tab, "accountTreeCreateAccount");
EventUtils.synthesizeMouseAtCenter(
button,
{ clickCount: 1 },
button.ownerGlobal
);
await wait_for_popup_to_open(content_tab_e(tab, "accountAddPopup"));
const actionAddMailAccount = content_tab_e(
tab,
"accountActionsAddMailAccount"
);
Assert.notEqual(actionAddMailAccount, undefined);
Assert.equal(
!actionAddMailAccount.getAttribute("disabled"),
isAddAccountEnabled
);
const actionAddOtherAccount = content_tab_e(
tab,
"accountActionsAddOtherAccount"
);
Assert.notEqual(actionAddOtherAccount, undefined);
Assert.equal(
!actionAddOtherAccount.getAttribute("disabled"),
isAddAccountEnabled
);
await close_popup(window, content_tab_e(tab, "accountAddPopup"));
if (isSetAsDefaultEnabled == "none") {
// The button doesn't exist.
return;
}
const actionSetDefault = content_tab_e(
tab,
"contentFrame"
).contentDocument.getElementById("defaultAccount");
Assert.notEqual(actionSetDefault, undefined);
Assert.equal(
!actionSetDefault.getAttribute("disabled"),
isSetAsDefaultEnabled
);
}
add_task(async function test_account_actions() {
// IMAP account: can be default.
await open_advanced_settings(async function (tab) {
await subtest_check_account_actions(tab, imapAccount.key, true, true);
});
// NNTP (News) account: can't be default.
await open_advanced_settings(async function (tab) {
await subtest_check_account_actions(tab, nntpAccount.key, false, true);
});
// Local Folders account: can't be default.
var localFoldersAccount = MailServices.accounts.findAccountForServer(
MailServices.accounts.localFoldersServer
);
await open_advanced_settings(async function (tab) {
await subtest_check_account_actions(
tab,
localFoldersAccount.key,
"none",
true
);
});
// SMTP server row: can't be default.
await open_advanced_settings(async function (tab) {
await subtest_check_account_actions(tab, "smtp", "none", true);
});
// on the IMAP account, disable Delete Account menu item
let disableItemPref = "mail.disable_button.delete_account";
// Set the pref on the default branch, otherwise .getBoolPref on it throws.
Services.prefs.getDefaultBranch("").setBoolPref(disableItemPref, true);
Services.prefs.lockPref(disableItemPref);
await open_advanced_settings(async function (tab) {
await subtest_check_account_actions(tab, imapAccount.key, true, true);
});
Services.prefs.unlockPref(disableItemPref);
Services.prefs.getDefaultBranch("").deleteBranch(disableItemPref);
// on the IMAP account, disable Set as Default menu item
disableItemPref = "mail.disable_button.set_default_account";
Services.prefs.getDefaultBranch("").setBoolPref(disableItemPref, true);
Services.prefs.lockPref(disableItemPref);
await open_advanced_settings(async function (tab) {
await subtest_check_account_actions(tab, imapAccount.key, false, true);
});
Services.prefs.unlockPref(disableItemPref);
Services.prefs.getDefaultBranch("").deleteBranch(disableItemPref);
// on the IMAP account, disable Add new Account menu items
disableItemPref = "mail.disable_new_account_addition";
Services.prefs.getDefaultBranch("").setBoolPref(disableItemPref, true);
Services.prefs.lockPref(disableItemPref);
await open_advanced_settings(async function (tab) {
await subtest_check_account_actions(tab, imapAccount.key, true, false);
});
Services.prefs.unlockPref(disableItemPref);
Services.prefs.getDefaultBranch("").deleteBranch(disableItemPref);
});