Commit c5b36d3e authored by Carsten Schoenert's avatar Carsten Schoenert
Browse files

New upstream version 91.4.1

parent 0899850a
---
GECKO_BASE_REPOSITORY: https://hg.mozilla.org/mozilla-unified
GECKO_HEAD_REPOSITORY: https://hg.mozilla.org/releases/mozilla-esr91
GECKO_HEAD_REF: FIREFOX_91_4_0esr_BUILD1
GECKO_HEAD_REV: 3359a85a2277bbcbcc2b5ebcc425922a23d07f34
GECKO_HEAD_REF: FIREFOX_91_4_1esr_BUILD1
GECKO_HEAD_REV: a1fd35b0b8f66b8660de9ed95223120765de2e11
### For comm-central
# GECKO_BASE_REPOSITORY: https://hg.mozilla.org/mozilla-unified
......
......@@ -2234,8 +2234,8 @@ function makePrettyName(aUri) {
* Asynchronously uploads the given attachment to the cloud provider, updating
* the passed listItem as things progress.
*
* @param attachment A calIAttachment to upload
* @param cloudProvider The clould provider to upload to
* @param attachment A calIAttachment to upload.
* @param cloudFileAccount The cloud file account used for uploading.
* @param listItem The listitem in attachment-link listbox to update.
*/
function uploadCloudAttachment(attachment, cloudFileAccount, listItem) {
......@@ -2249,16 +2249,17 @@ function uploadCloudAttachment(attachment, cloudFileAccount, listItem) {
delete gAttachMap[attachment.hashId];
attachment.uri = Services.io.newURI(upload.url);
attachment.setParameter("FILENAME", file.leafName);
attachment.setParameter("PROVIDER", cloudFileAccount.type);
attachment.setParameter("X-SERVICE-ICONURL", upload.serviceIcon);
listItem.setAttribute("label", file.leafName);
gAttachMap[attachment.hashId] = attachment;
image.setAttribute("src", cloudFileAccount.iconURL);
image.setAttribute("src", upload.serviceIcon);
listItem.attachCloudFileUpload = upload;
updateAttachment();
},
statusCode => {
cal.ERROR(
"[calendar-event-dialog] Uploading cloud attachment failed. Status code: " + statusCode
"[calendar-event-dialog] Uploading cloud attachment failed. Status code: " +
statusCode.result
);
// Uploading failed. First of all, show an error icon. Also,
......@@ -2295,6 +2296,8 @@ function addAttachment(attachment, cloudFileAccount) {
let listItem = document.createXULElement("richlistitem");
let image = document.createElement("img");
image.setAttribute("alt", "");
image.width = "24";
image.height = "24";
listItem.appendChild(image);
let label = document.createXULElement("label");
label.setAttribute("value", makePrettyName(attachment.uri));
......@@ -2307,8 +2310,9 @@ function addAttachment(attachment, cloudFileAccount) {
image.setAttribute("src", "chrome://messenger/skin/icons/connecting.png");
uploadCloudAttachment(attachment, cloudFileAccount, listItem);
} else {
let cloudFileIconURL = attachment.getParameter("X-SERVICE-ICONURL");
image.setAttribute("src", cloudFileIconURL);
let leafName = attachment.getParameter("FILENAME");
image.setAttribute("src", cloudFileAccount.iconURL);
if (leafName) {
listItem.setAttribute("label", leafName);
}
......@@ -2317,16 +2321,15 @@ function addAttachment(attachment, cloudFileAccount) {
image.setAttribute("src", "moz-icon://" + attachment.uri.spec);
} else {
let leafName = attachment.getParameter("FILENAME");
let providerType = attachment.getParameter("PROVIDER");
let cloudFileIconURL = attachment.getParameter("X-SERVICE-ICONURL");
let cloudFileEnabled = Services.prefs.getBoolPref("mail.cloud_files.enabled", false);
if (leafName) {
// TODO security issues?
listItem.setAttribute("label", leafName);
}
if (providerType && cloudFileEnabled) {
let provider = cloudFileAccounts.getProviderForType(providerType);
image.setAttribute("src", provider.iconURL);
if (cloudFileIconURL && cloudFileEnabled) {
image.setAttribute("src", cloudFileIconURL);
} else {
let iconSrc = attachment.uri.spec.length ? attachment.uri.spec : "dummy.html";
if (attachment.formatType) {
......
......@@ -155,7 +155,7 @@
overflow-x: hidden;
}
.calendar-item-flex > alarm-icons-box {
.calendar-item-flex > .alarm-icons-box {
display: contents;
}
......@@ -207,6 +207,10 @@
white-space: nowrap;
}
calendar-event-column .event-name-label {
white-space: normal;
}
.event-name-input,
.event-name-label {
flex: 1 1 auto;
......
......@@ -122,8 +122,20 @@
padding: 3px;
}
:root[lwt-tree-brighttext] .calendar-notification-bar {
background-color: #464cb9;
@media (prefers-color-scheme: dark) {
.calendar-notification-bar {
background-color: #464cb9;
}
}
@media (prefers-contrast) {
.calendar-notification-bar:not(:-moz-lwtheme) {
background-color: Highlight;
}
.calendar-notification-bar:not(:-moz-lwtheme) > *:not(#imip-view-toolbox) {
color: HighlightText;
}
}
.calendar-notification-bar {
......
......@@ -151,6 +151,11 @@ add_task(async function testAttachProvider() {
setTimeout(() =>
resolve({
url: fileUrl,
// The uploadFile() function should return serviceIcon, serviceName
// and serviceURL - either default or user defined values specified
// by the onFileUpload event. The item-edit dialog uses only the
// serviceIcon.
serviceIcon: "chrome://messenger/skin/icons/globe.svg",
})
)
);
......@@ -249,7 +254,11 @@ add_task(async function testAttachProvider() {
Assert.equal(listItem.attachCloudFileUpload.url, fileUrl, "upload attached to event");
let listItemImage = listItem.querySelector("img");
Assert.equal(listItemImage.src, iconURL, "attachment image is provider image");
Assert.equal(
listItemImage.src,
"chrome://messenger/skin/icons/globe.svg",
"attachment image is provider image"
);
// Save the new event.
eventWin.document.querySelector("#button-saveandclose").click();
......
{
"version": "2.2021a",
"version": "2.2021c",
"aliases": [
"AUS Central Standard Time",
"AUS Eastern Standard Time",
......@@ -116,6 +116,7 @@
"Pacific SA Standard Time",
"Pacific Standard Time",
"Pacific Standard Time (Mexico)",
"Pacific/Enderbury",
"Pacific/Johnston",
"Pakistan Standard Time",
"Paraguay Standard Time",
......@@ -570,7 +571,6 @@
"Pacific/Chuuk",
"Pacific/Easter",
"Pacific/Efate",
"Pacific/Enderbury",
"Pacific/Fakaofo",
"Pacific/Fiji",
"Pacific/Funafuti",
......@@ -579,6 +579,7 @@
"Pacific/Guadalcanal",
"Pacific/Guam",
"Pacific/Honolulu",
"Pacific/Kanton",
"Pacific/Kiritimati",
"Pacific/Kosrae",
"Pacific/Kwajalein",
......
{
"version": "2.2021c",
"version": "2.2021e",
"aliases": {
"AUS Central Standard Time": {
"aliasTo": "Australia/Darwin"
......@@ -2277,9 +2277,9 @@
"Asia/Gaza": {
"ics": [
"BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:20200328T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\r\nEND:DAYLIGHT",
"BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:20201024T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\r\nEND:STANDARD",
"BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:20211029T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\r\nEND:STANDARD",
"BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:20180324T010000\r\nRDATE:20180324T010000\r\nRDATE:20190329T000000\r\nEND:DAYLIGHT",
"BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19700101T000000\r\nRDATE:19700101T000000\r\nRDATE:20181027T010000\r\nRDATE:20191026T000000\r\nEND:STANDARD"
"BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19700101T000000\r\nRDATE:19700101T000000\r\nRDATE:20181027T010000\r\nRDATE:20191026T000000\r\nRDATE:20201024T010000\r\nEND:STANDARD"
],
"latitude": "+0313000",
"longitude": "+0342800"
......@@ -2287,9 +2287,9 @@
"Asia/Hebron": {
"ics": [
"BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:20200328T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\r\nEND:DAYLIGHT",
"BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:20201024T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\r\nEND:STANDARD",
"BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:20211029T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\r\nEND:STANDARD",
"BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:20180324T010000\r\nRDATE:20180324T010000\r\nRDATE:20190329T000000\r\nEND:DAYLIGHT",
"BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19700101T000000\r\nRDATE:19700101T000000\r\nRDATE:20181027T010000\r\nRDATE:20191026T000000\r\nEND:STANDARD"
"BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19700101T000000\r\nRDATE:19700101T000000\r\nRDATE:20181027T010000\r\nRDATE:20191026T000000\r\nRDATE:20201024T010000\r\nEND:STANDARD"
],
"latitude": "+0313200",
"longitude": "+0350542"
......@@ -3475,9 +3475,10 @@
},
"Pacific/Fiji": {
"ics": [
"BEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700118T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=12,13,14,15,16,17,18;BYDAY=SU\r\nEND:STANDARD",
"BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:20211114T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=2SU\r\nEND:DAYLIGHT",
"BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:20181104T020000\r\nRDATE:20181104T020000\r\nRDATE:20191110T020000\r\nRDATE:20201220T020000\r\nEND:DAYLIGHT"
"BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:20221113T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=2SU\r\nEND:DAYLIGHT",
"BEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:20230115T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=12,13,14,15,16,17,18;BYDAY=SU\r\nEND:STANDARD",
"BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:19700101T000000\r\nRDATE:19700101T000000\r\nRDATE:20181104T020000\r\nRDATE:20191110T020000\r\nRDATE:20201220T020000\r\nEND:DAYLIGHT",
"BEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:20180114T030000\r\nRDATE:20180114T030000\r\nRDATE:20190113T030000\r\nRDATE:20200112T030000\r\nRDATE:20210117T030000\r\nEND:STANDARD"
],
"latitude": "-0180800",
"longitude": "+1782500"
......
......@@ -97,6 +97,12 @@
`[tooltip="${this.id}"] richlistitem`
);
// No tooltip on search results
if (item?.hasAttribute("is-search-result")) {
return false;
}
// No tooltip on the group headers
if (item && item.matches(`:scope[is="chat-group-richlistitem"]`)) {
return false;
}
......
......@@ -3,7 +3,7 @@ at https://github.com/matrix-org/matrix-js-sdk/. Current version is v11.1.0.
The following npm dependencies are included:
* @matrix-org/olm: https://gitlab.matrix.org/matrix-org/olm/-/packages/10 v3.2.3
* @matrix-org/olm: https://gitlab.matrix.org/matrix-org/olm/-/packages/10 v3.2.8
* another-json: https://www.npmjs.com/package/another-json/ v0.2.0
* base-x: https://www.npmjs.com/package/base-x v3.0.8
* bs58: https://www.npmjs.com/package/bs58 v4.0.1
......
......@@ -349,6 +349,13 @@ function onViewToolbarsPopupShowing(
}
let popup = event.target.querySelector(".panel-subview-body") || event.target;
// Limit the toolbar menu entries to the first level of context menus.
if (
popup != event.currentTarget &&
event.currentTarget.tagName == "menupopup"
) {
return;
}
// Remove all collapsible nodes from the menu.
for (let i = popup.children.length - 1; i >= 0; --i) {
......
......@@ -37,6 +37,12 @@ XPCOMUtils.defineLazyServiceGetter(
"@mozilla.org/mime;1",
"nsIMIMEService"
);
XPCOMUtils.defineLazyServiceGetter(
this,
"gHandlerService",
"@mozilla.org/uriloader/handler-service;1",
"nsIHandlerService"
);
// Warning: It's critical that the code in here for displaying the message
// headers for a selected message remain as fast as possible. In particular,
......@@ -1952,12 +1958,140 @@ AttachmentInfo.prototype = {
// If no tabmail, open PDF same as other attachments.
}
}
messenger.openAttachment(
// Just use the old method for handling messages, it works.
if (this.contentType == "message/rfc822") {
messenger.openAttachment(
this.contentType,
this.url,
encodeURIComponent(this.name),
this.uri,
this.isExternalAttachment
);
return;
}
// Get the MIME info from the service.
let match = this.name.match(/\.([^.]+)$/);
let extension = match ? match[1] : null;
let mimeInfo = gMIMEService.getFromTypeAndExtension(
this.contentType,
this.url,
encodeURIComponent(this.name),
this.uri,
this.isExternalAttachment
extension
);
// The default action is saveToDisk, which is not what we want.
// If we don't have a stored handler, ask before handling.
if (!gHandlerService.exists(mimeInfo)) {
mimeInfo.alwaysAskBeforeHandling = true;
mimeInfo.preferredAction = Ci.nsIHandlerInfo.alwaysAsk;
}
// If we know what to do, do it.
let { name, url } = this;
async function saveToFile(path) {
let buffer = await new Promise(function(resolve, reject) {
NetUtil.asyncFetch(
{
uri: Services.io.newURI(url),
loadUsingSystemPrincipal: true,
},
function(inputStream, status) {
if (Components.isSuccessCode(status)) {
resolve(NetUtil.readInputStream(inputStream));
} else {
reject(
new Components.Exception("Failed to fetch attachment", status)
);
}
}
);
});
await IOUtils.write(path, new Uint8Array(buffer));
}
async function saveAndOpen(mimeInfo) {
let tempFile = Services.dirsvc.get("TmpD", Ci.nsIFile);
tempFile.append(name);
tempFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o755);
tempFile.remove(false);
Cc["@mozilla.org/mime;1"]
.getService(Ci.nsPIExternalAppLauncher)
.deleteTemporaryFileOnExit(tempFile);
await saveToFile(tempFile.path);
mimeInfo.launchWithFile(tempFile);
}
if (!mimeInfo.alwaysAskBeforeHandling) {
switch (mimeInfo.preferredAction) {
case Ci.nsIHandlerInfo.saveToDisk:
if (Services.prefs.getBoolPref("browser.download.useDownloadDir")) {
let destFile = new FileUtils.File(
await Downloads.getPreferredDownloadsDirectory()
);
destFile.append(name);
destFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o755);
destFile.remove(false);
await saveToFile(destFile.path);
} else {
let filePicker = Cc["@mozilla.org/filepicker;1"].createInstance(
Ci.nsIFilePicker
);
filePicker.init(window, "title", Ci.nsIFilePicker.modeSave);
let rv = await new Promise(resolve => filePicker.open(resolve));
if (rv != Ci.nsIFilePicker.returnCancel) {
await saveToFile(filePicker.file.path);
}
}
return;
case Ci.nsIHandlerInfo.useHelperApp:
case Ci.nsIHandlerInfo.useSystemDefault:
await saveAndOpen(mimeInfo);
return;
}
}
// Ask what to do, then do it.
let appLauncherDialog = Cc[
"@mozilla.org/helperapplauncherdialog;1"
].createInstance(Ci.nsIHelperAppLauncherDialog);
appLauncherDialog.show(
{
QueryInterface: ChromeUtils.generateQI(["nsIHelperAppLauncher"]),
MIMEInfo: mimeInfo,
source: Services.io.newURI(this.url),
suggestedFileName: this.name,
cancel(reason) {},
promptForSaveDestination() {
appLauncherDialog.promptForSaveToFileAsync(
this,
window,
this.suggestedFileName,
extension,
false
);
},
async launchWithApplication(handleInternally, file) {
await saveAndOpen(mimeInfo);
},
async saveDestinationAvailable(file) {
if (file) {
await saveToFile(file.path);
}
},
setWebProgressListener(webProgressListener) {},
targetFile: null,
targetFileIsExecutable: null,
timeDownloadStarted: null,
contentLength: this.size,
browsingContextId: null,
},
window,
null
);
}
},
......@@ -2707,10 +2841,6 @@ function updateAttachmentsDisplay(attachmentInfo, isFetching) {
if (isFetching) {
// Set elements busy to show the user this is potentially a long network
// fetch for the link attachment.
attachmentIcon.setAttribute(
"src",
"chrome://global/skin/icons/loading.png"
);
attachmentList.setAttachmentLoaded(attachmentItem, false);
return;
}
......
......@@ -3,10 +3,10 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
var { AddonManager } = ChromeUtils.import(
"resource://gre/modules/AddonManager.jsm"
);
var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
var { XPIDatabase } = ChromeUtils.import(
"resource://gre/modules/addons/XPIDatabase.jsm"
);
function restartApp() {
Services.startup.quit(
......@@ -24,39 +24,34 @@ function deleteLocalstore() {
}
async function disableAddons() {
for (let addon of await AddonManager.getAllAddons()) {
XPIDatabase.syncLoadDB(false);
let addons = XPIDatabase.getAddons();
for (let addon of addons) {
if (addon.type == "theme") {
// Setting userDisabled to false on the default theme activates it,
// disables all other themes and deactivates the applied persona, if
// any.
const DEFAULT_THEME_ID = "{972ce4c6-7e08-4474-a285-3208198ce6fd}";
const DEFAULT_THEME_ID = "default-theme@mozilla.org";
if (addon.id == DEFAULT_THEME_ID) {
addon.userDisabled = false;
await XPIDatabase.updateAddonDisabledState(addon, {
userDisabled: false,
});
}
} else {
addon.userDisabled = true;
await XPIDatabase.updateAddonDisabledState(addon, { userDisabled: true });
}
}
restartApp();
}
function onOK(event) {
try {
if (document.getElementById("resetToolbars").checked) {
deleteLocalstore();
}
if (document.getElementById("disableAddons").checked) {
disableAddons();
// disableAddons will asynchronously restart the application
event.preventDefault();
return;
}
} catch (e) {
Cu.reportError(e);
async function onOK(event) {
event.preventDefault();
if (document.getElementById("resetToolbars").checked) {
deleteLocalstore();
}
if (document.getElementById("disableAddons").checked) {
await disableAddons();
}
restartApp();
event.preventDefault();
}
function onCancel() {
......
......@@ -1718,6 +1718,10 @@
let type = attachment.contentType;
if (type == "text/x-moz-deleted") {
src = "chrome://messenger/skin/icons/attachment-deleted.svg";
} else if (!item.loaded || item.uploading) {
src = "chrome://global/skin/icons/loading.png";
} else if (item.cloudIcon) {
src = item.cloudIcon;
} else {
let iconName = attachment.name;
if (iconName.toLowerCase().endsWith(".eml")) {
......@@ -1768,23 +1772,23 @@
*
* @param {MozRichlistitem} item - The attachment item.
* @param {boolean} loaded - Whether the attachment is fully loaded.
* @param {string} [cloudIcon] - The icon for the cloud provider where the
* attachment was loaded, if any.
*/
setAttachmentLoaded(item, loaded, cloudIcon) {
setAttachmentLoaded(item, loaded) {
item.loaded = loaded;
if (loaded) {
if (cloudIcon !== undefined) {
this.setAttachmentIconSrc(item, cloudIcon);
} else {
this.refreshAttachmentIcon(item);
}
} else {
this.setAttachmentIconSrc(
item,
"chrome://global/skin/icons/loading.png"
);
}
this.refreshAttachmentIcon(item);
}
/**
* Set the attachment item's cloud icon, if any.
*
* @param {MozRichlistitem} item - The attachment item.
* @param {?string} cloudIcon - The icon of the cloud provider where the
* attachment was uploaded. Will be used as file type icon in the list of
* attachments, if specified.
*/
setCloudIcon(item, cloudIcon) {
item.cloudIcon = cloudIcon;
this.refreshAttachmentIcon(item);
}
invalidateItem(item, name) {
......
......@@ -214,7 +214,13 @@ FetchHTTP.prototype = {
// workaround, because open(..., username, password) does not work.
request.setRequestHeader(
"Authorization",
"Basic " + btoa(username + ":" + password)
"Basic " +
btoa(
// btoa() takes a BinaryString.
String.fromCharCode(
...new TextEncoder().encode(username + ":" + password)
)
)
);
}
for (let name in this._args.headers) {
......
......@@ -1437,6 +1437,7 @@ var gAccountSetup = {
let smtpHostname = document.getElementById("outgoingHostname").value;
let smtpPort = document.getElementById("outgoingPort").value;
let foundServer = MailServices.smtp.servers.find(
// XXX: should really match on socketType as well
s => s.hostname == smtpHostname && s.port == smtpPort
);
// If the user is using a preconfigured SMTP server.
......@@ -1636,29 +1637,21 @@ var gAccountSetup = {
// Bail out if a port number is already defined and it's not part of the
// known ports array.