diff --git a/mail/base/content/mailWindow.js b/mail/base/content/mailWindow.js index 8fd42fd5b7..7ef97c5900 100644 --- a/mail/base/content/mailWindow.js +++ b/mail/base/content/mailWindow.js @@ -29,6 +29,7 @@ XPCOMUtils.defineLazyScriptGetter( ); // This file stores variables common to mail windows +var messenger; var statusFeedback; var msgWindow; diff --git a/mail/base/content/messenger.js b/mail/base/content/messenger.js index 4171d5148d..be3ee1ea29 100644 --- a/mail/base/content/messenger.js +++ b/mail/base/content/messenger.js @@ -8,7 +8,6 @@ /* import-globals-from ../../components/customizableui/content/panelUI.js */ /* import-globals-from ../../components/newmailaccount/content/provisionerCheckout.js */ /* import-globals-from ../../components/preferences/preferencesTab.js */ -/* import-globals-from ../../extensions/openpgp/content/ui/enigmailMessengerOverlay.js */ /* import-globals-from commandglue.js */ /* import-globals-from folderPane.js */ /* import-globals-from glodaFacetTab.js */ @@ -187,13 +186,6 @@ function verifyOpenAccountHubTab() { function initOpenPGPIfEnabled() { BondOpenPGP.init(); - - try { - Enigmail.msg.messengerStartup.bind(Enigmail.msg); - Enigmail.msg.messengerStartup(); - } catch (ex) { - console.log(ex); - } } var gMailInit = { diff --git a/mail/base/content/messenger.xhtml b/mail/base/content/messenger.xhtml index d60548d1fd..9bb9c9f0b2 100644 --- a/mail/base/content/messenger.xhtml +++ b/mail/base/content/messenger.xhtml @@ -114,7 +114,6 @@ - diff --git a/mail/base/content/msgSecurityPane.js b/mail/base/content/msgSecurityPane.js index d1e25298bd..d020eefd6f 100644 --- a/mail/base/content/msgSecurityPane.js +++ b/mail/base/content/msgSecurityPane.js @@ -7,8 +7,9 @@ * header to display S/MIME and OpenPGP encryption and signature info. */ -/* globals gFolderDisplay, gSignatureStatus, Enigmail, gDBView */ -/* globals showImapSignatureUnknown, loadSmimeMessageSecurityInfo */ +/* import-globals-from ../../../mailnews/extensions/smime/msgReadSMIMEOverlay.js */ +/* import-globals-from ../../extensions/openpgp/content/ui/enigmailMessengerOverlay.js */ +/* import-globals-from aboutMessage.js */ var { XPCOMUtils } = ChromeUtils.importESModule( "resource://gre/modules/XPCOMUtils.sys.mjs" @@ -28,10 +29,7 @@ var gEncKeyId = null; */ function showMessageReadSecurityInfo() { // Interrupt if no message is selected or no encryption technology was used. - if ( - !gFolderDisplay.selectedMessage || - document.getElementById("cryptoBox").hidden - ) { + if (!gMessage || document.getElementById("cryptoBox").hidden) { return; } diff --git a/mail/extensions/openpgp/content/modules/decryption.jsm b/mail/extensions/openpgp/content/modules/decryption.jsm index bfead89cd5..18696c131e 100644 --- a/mail/extensions/openpgp/content/modules/decryption.jsm +++ b/mail/extensions/openpgp/content/modules/decryption.jsm @@ -82,19 +82,8 @@ var EnigmailDecryption = { getFromAddr(win) { var fromAddr; - if ( - win && - win.gFolderDisplay && - win.gFolderDisplay.messageDisplay && - win.gFolderDisplay.messageDisplay.displayedMessage - ) { - fromAddr = win.gFolderDisplay.messageDisplay.displayedMessage.author; - } else if ( - win && - win.gFolderDisplay && - win.gFolderDisplay.selectedMessage - ) { - fromAddr = win.gFolderDisplay.selectedMessage.author; + if (win?.gMessage) { + fromAddr = win.gMessage.author; } if (fromAddr) { try { @@ -115,21 +104,8 @@ var EnigmailDecryption = { // "date" appears to be available more reliably, and it appears // to be in microseconds (1/1000000 second). Convert // to milliseconds (1/1000 of a second) for conversion to Date. - if ( - win && - win.gFolderDisplay && - win.gFolderDisplay.messageDisplay && - win.gFolderDisplay.messageDisplay.displayedMessage - ) { - return new Date( - win.gFolderDisplay.messageDisplay.displayedMessage.date / 1000 - ); - } else if ( - win && - win.gFolderDisplay && - win.gFolderDisplay.selectedMessage - ) { - return new Date(win.gFolderDisplay.selectedMessage.date / 1000); + if (win?.gMessage) { + return new Date(win.gMessage.date / 1000); } return null; }, diff --git a/mail/extensions/openpgp/content/ui/enigmailMessengerOverlay.js b/mail/extensions/openpgp/content/ui/enigmailMessengerOverlay.js index e8c3237054..afe18a921d 100644 --- a/mail/extensions/openpgp/content/ui/enigmailMessengerOverlay.js +++ b/mail/extensions/openpgp/content/ui/enigmailMessengerOverlay.js @@ -1,25 +1,16 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public +/* 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, You can obtain one at https://mozilla.org/MPL/2.0/. - */ + * file, you can obtain one at https://mozilla.org/MPL/2.0/. */ "use strict"; -// TODO: Fix undefined things in this file. -/* eslint-disable no-undef */ +/* import-globals-from ../../../../base/content/aboutMessage.js */ +/* import-globals-from ../../../../base/content/msgHdrView.js */ +/* import-globals-from ../../../../base/content/msgSecurityPane.js */ // TODO: check if this is safe /* eslint-disable no-unsanitized/property */ -/* Globals from Thunderbird: */ -/* global ReloadMessage: false, gDBView: false, gSignatureStatus: false, gEncryptionStatus: false, showMessageReadSecurityInfo: false */ -/* global messenger: false, currentAttachments: false, msgWindow: false, PanelUI: false */ -/* global currentHeaderData: false, gViewAllHeaders: false, gExpandedHeaderList: false, goDoCommand: false, HandleSelectedAttachments: false */ -/* global statusFeedback: false, displayAttachmentsForExpandedView: false, gExpandedHeaderView */ -/* global gSigKeyId:true, gEncKeyId:true */ -/* globals gMessageNotificationBar */ - var { AppConstants } = ChromeUtils.importESModule( "resource://gre/modules/AppConstants.sys.mjs" ); @@ -67,10 +58,7 @@ XPCOMUtils.defineLazyGetter(this, "l10n", () => { return new Localization(["messenger/openpgp/openpgp.ftl"], true); }); -var Enigmail; -if (!Enigmail) { - Enigmail = {}; -} +var Enigmail = {}; Enigmail.getEnigmailSvc = function() { return EnigmailCore.getService(window); @@ -264,19 +252,7 @@ Enigmail.msg = { }, getCurrentMsgUriSpec() { - try { - // Thunderbird - if (gFolderDisplay.selectedMessages.length != 1) { - return ""; - } - - var uriSpec = gFolderDisplay.selectedMessageUris[0]; - //EnigmailLog.DEBUG("enigmailMessengerOverlay.js: getCurrentMsgUriSpec: uriSpec="+uriSpec+"\n"); - - return uriSpec; - } catch (ex) { - return ""; - } + return gMessageURI || ""; }, getCurrentMsgUrl() { @@ -346,40 +322,6 @@ Enigmail.msg = { } }, - prepareAppMenu() { - let menu = document.querySelector("#appMenu-mainView > vbox"); - if (!menu) { - return; - } - - // don't try to add Enigmail menu more than once - if (document.getElementById("appmenu-Enigmail")) { - return; - } - - let tsk = document.getElementById("appmenu_toolsMenu"); - let e = document.createXULElement("toolbarbutton"); - e.setAttribute("label", "xxEnigmail"); - e.id = "appmenu-Enigmail"; - e.setAttribute( - "class", - "subviewbutton subviewbutton-nav subviewbutton-iconic" - ); - e.setAttribute("closemenu", "none"); - e.setAttribute( - "oncommand", - "Enigmail.msg.displayAppmenu('appMenu-enigmailView', this)" - ); - e.setAttribute("overlay_source", "enigmail"); - menu.insertBefore(e, tsk); - }, - - displayAppmenu(targetId, targetObj) { - let menuElem = document.getElementById("appmenu_enigmailMenuPlaceholder"); - this.displayMainMenu(menuElem); - PanelUI.showSubView(targetId, targetObj); - }, - displayMainMenu(menuPopup) { let obj = menuPopup.firstChild; @@ -862,7 +804,7 @@ Enigmail.msg = { ); // Warn that we can't fix a message that was opened from a local file. - if (!gFolderDisplay.selectedMessage.folder) { + if (!gFolder) { Enigmail.msg.notificationBox.appendNotification( "brokenExchange", { @@ -1708,7 +1650,7 @@ Enigmail.msg = { "subject" in currentHeaderData && currentHeaderData.subject.headerValue === "pEp" ) { - if (gFolderDisplay.selectedMessage) { + if (gMessage) { let m = EnigmailMime.extractSubjectFromBody(bodyElement.textContent); if (m) { let node = bodyElement.firstChild; @@ -1756,7 +1698,7 @@ Enigmail.msg = { null ); - let msg = gFolderDisplay.messageDisplay.displayedMessage; + let msg = gMessage; EnigmailFixExchangeMsg.fixExchangeMessage(msg, this.buggyMailType) .then(msgKey => { // Display the new message which now has the key msgKey. @@ -1765,7 +1707,9 @@ Enigmail.msg = { msgKey + "\n" ); - gFolderDisplay.view.dbView.selectMsgByKey(msgKey); + // TODO: scope is about:message, and this doesn't work + // parent.gDBView.selectMsgByKey(msgKey); + // ReloadMessage(); }) .catch(async function(ex) { console.debug(ex); @@ -1858,7 +1802,7 @@ Enigmail.msg = { if (includeHeaders) { try { - var msg = gFolderDisplay.selectedMessage; + var msg = gMessage; if (msg) { let msgHdr = { From: msg.author, @@ -1871,10 +1815,11 @@ Enigmail.msg = { }).format(new Date(msg.dateInSeconds * 1000)), }; - if (gFolderDisplay.selectedMessageIsNews) { - if (currentHeaderData.newsgroups) { - msgHdr.Newsgroups = currentHeaderData.newsgroups.headerValue; - } + if ( + msg?.folder?.flags & Ci.nsMsgFolderFlags.Newsgroup && + currentHeaderData.newsgroups + ) { + msgHdr.Newsgroups = currentHeaderData.newsgroups.headerValue; } for (let headerName in msgHdr) { @@ -2105,7 +2050,7 @@ Enigmail.msg = { msgSvc.streamMessage( msgUriSpec, streamListener, - msgWindow, + top.msgWindow, null, false, null, @@ -2574,7 +2519,7 @@ Enigmail.msg = { }, loadExternalURL(url) { - messenger.launchExternalURL(url); + top.messenger.launchExternalURL(url); }, // retrieves the most recent navigator window (opens one if need be) @@ -2647,13 +2592,12 @@ Enigmail.msg = { // decrypted and copy/move all selected messages in a target folder async decryptToFolder(destFolder, move) { - let msgHdrs = gFolderDisplay ? gFolderDisplay.selectedMessages : null; + let msgHdrs = gDBView.getSelectedMsgHdrs(); if (!msgHdrs || msgHdrs.length === 0) { return; } - let total = gFolderDisplay.selectedMessages.length; - + let total = msgHdrs.length; let failures = 0; for (let msgHdr of msgHdrs) { await EnigmailPersistentCrypto.cryptMessage( @@ -2718,6 +2662,7 @@ Enigmail.msg = { Enigmail.hdrView.onUnloadEnigmail(); } + // eslint-disable-next-line no-global-assign Enigmail = undefined; }, @@ -2778,7 +2723,7 @@ Enigmail.msg = { let existing = await db.findKeyForFingerprint(newKey.fpr); if (existing) { let key = await db.mergeExisting(newKey, newKey.pubKey, { - uri: `mid:${gMessageDisplay.displayedMessage.messageId}`, + uri: `mid:${gMessage.messageId}`, type: isBinaryAutocrypt ? "autocrypt" : "attachment", description, }); @@ -2878,7 +2823,7 @@ Enigmail.msg = { ? RNP.enArmorString(newKey.pubKey, "public key") : newKey.pubKey; candidate.source = { - uri: `mid:${gMessageDisplay.displayedMessage.messageId}`, + uri: `mid:${gMessage.messageId}`, type: isBinaryAutocrypt ? "autocrypt" : "attachment", description, }; @@ -3063,21 +3008,19 @@ Enigmail.msg = { this.toAndCCSet = new Set(); // This message may have already disappeared. - if (!gMessageDisplay.displayedMessage) { + if (!gMessage) { return; } let addresses = MailServices.headerParser.parseEncodedHeader( - gMessageDisplay.displayedMessage.author + gMessage.author ); if (addresses.length) { this.authorEmail = addresses[0].email.toLowerCase(); } addresses = MailServices.headerParser.parseEncodedHeader( - gMessageDisplay.displayedMessage.recipients + - "," + - gMessageDisplay.displayedMessage.ccList + gMessage.recipients + "," + gMessage.ccList ); for (let addr of addresses) { this.toAndCCSet.add(addr.email.toLowerCase()); diff --git a/mail/extensions/openpgp/content/ui/enigmailMsgComposeOverlay.js b/mail/extensions/openpgp/content/ui/enigmailMsgComposeOverlay.js index f0572739cc..61fa06668e 100644 --- a/mail/extensions/openpgp/content/ui/enigmailMsgComposeOverlay.js +++ b/mail/extensions/openpgp/content/ui/enigmailMsgComposeOverlay.js @@ -77,9 +77,7 @@ var l10nOpenPGP = new Localization(["messenger/openpgp/openpgp.ftl"]); // const kEncryptionPolicy_IfPossible = 1; var kEncryptionPolicy_Always = 2; -if (!Enigmail) { - var Enigmail = {}; -} +var Enigmail = {}; const IOSERVICE_CONTRACTID = "@mozilla.org/network/io-service;1"; const LOCAL_FILE_CONTRACTID = "@mozilla.org/file/local;1"; diff --git a/mail/extensions/openpgp/content/ui/enigmailMsgHdrViewOverlay.js b/mail/extensions/openpgp/content/ui/enigmailMsgHdrViewOverlay.js index 290f49853a..e09b50a21e 100644 --- a/mail/extensions/openpgp/content/ui/enigmailMsgHdrViewOverlay.js +++ b/mail/extensions/openpgp/content/ui/enigmailMsgHdrViewOverlay.js @@ -1,18 +1,12 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public +/* 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, You can obtain one at https://mozilla.org/MPL/2.0/. - */ + * file, you can obtain one at https://mozilla.org/MPL/2.0/. */ "use strict"; -// aboutMessage.js -/* global gFolderDisplay */ -/* global setMessageEncryptionStateButton */ -/* global currentAttachments: false */ -/* global gDBView: false, msgWindow: false, messageHeaderSink: false, gMessageListeners: false */ -/* global gExpandedHeaderView: false, CanDetachAttachments: true, gEncryptedURIService: false, FillAttachmentListPopup: false */ -/* global attachmentList: false, currentHeaderData: false */ +/* import-globals-from ../../../../base/content/aboutMessage.js */ +/* import-globals-from ../../../../base/content/msgHdrView.js */ +/* import-globals-from ../../../smime/content/msgHdrViewSMIMEOverlay.js */ var { XPCOMUtils } = ChromeUtils.importESModule( "resource://gre/modules/XPCOMUtils.sys.mjs" @@ -36,10 +30,6 @@ XPCOMUtils.defineLazyModuleGetters(this, { // EnigmailWks: "chrome://openpgp/content/modules/webKey.jsm", }); -if (!Enigmail) { - var Enigmail = {}; -} - Enigmail.hdrView = { lastEncryptedMsgKey: null, lastEncryptedUri: null, @@ -79,6 +69,7 @@ Enigmail.hdrView = { if (!this.alreadyWrappedCDA) { this.alreadyWrappedCDA = true; this.origCanDetachAttachments = CanDetachAttachments; + // eslint-disable-next-line no-global-assign CanDetachAttachments = function() { return ( Enigmail.hdrView.origCanDetachAttachments() && @@ -187,11 +178,8 @@ Enigmail.hdrView = { } */ - if ( - gFolderDisplay.selectedMessageUris && - gFolderDisplay.selectedMessageUris.length > 0 - ) { - this.lastEncryptedMsgKey = gFolderDisplay.selectedMessageUris[0]; + if (gMessageURI) { + this.lastEncryptedMsgKey = gMessageURI; } if (!errorMsg) { @@ -201,11 +189,8 @@ Enigmail.hdrView = { } var replaceUid = null; - if (keyId && gFolderDisplay.selectedMessage) { - replaceUid = EnigmailMsgRead.matchUidToSender( - keyId, - gFolderDisplay.selectedMessage.author - ); + if (keyId && gMessage) { + replaceUid = EnigmailMsgRead.matchUidToSender(keyId, gMessage.author); } if (!replaceUid && userId) { @@ -598,8 +583,9 @@ Enigmail.hdrView = { try { EnigmailVerify.setWindow(null, null); - Enigmail.hdrView.statusBarHide(); } catch (ex) {} + + Enigmail.hdrView.messageLoad(); }, beforeStartHeaders() { @@ -735,7 +721,7 @@ Enigmail.hdrView = { updateMsgDb() { EnigmailLog.DEBUG("enigmailMsgHdrViewOverlay.js: this.updateMsgDb\n"); - var msg = gFolderDisplay.selectedMessage; + var msg = gMessage; if (!msg || !msg.folder) { return; } @@ -794,10 +780,7 @@ Enigmail.hdrView = { }, setSubject(subject) { - if ( - gFolderDisplay.selectedMessages.length === 1 && - gFolderDisplay.selectedMessage - ) { + if (gMessage) { // Strip multiple localised Re: prefixes. This emulates NS_MsgStripRE(). let newSubject = subject; let prefixes = Services.prefs.getStringPref("mailnews.localizedRe", "Re"); @@ -813,21 +796,14 @@ Enigmail.hdrView = { // Update the header pane. this.updateHdrBox("subject", hadRe ? "Re: " + newSubject : newSubject); - // Update the thread pane. - let tree = gFolderDisplay.tree; - let msgHdr = gFolderDisplay.selectedMessage; + // Update the message. + let msgHdr = gMessage; msgHdr.subject = EnigmailData.convertFromUnicode(newSubject, "utf-8"); - // Set the corred HasRe flag and refresh the row. let oldFlags = msgHdr.flags; if (hadRe && !(oldFlags & Ci.nsMsgMessageFlags.HasRe)) { let newFlags = oldFlags | Ci.nsMsgMessageFlags.HasRe; msgHdr.flags = newFlags; - if (tree && tree.view) { - tree.view.db.notifyHdrChangeAll(msgHdr, oldFlags, newFlags, {}); - } - } else if (tree && tree.view && tree.view.selection) { - tree.invalidateRow(tree.view.selection.currentIndex); } } }, @@ -861,45 +837,7 @@ Enigmail.hdrView = { "\n" ); - if (!uriSpec) { - // We cannot compare if no URI, => assume it's the current message. - return true; - } - - let msgUriSpec = Enigmail.msg.getCurrentMsgUriSpec(); - let currUrl = EnigmailFuncs.getUrlFromUriSpec(msgUriSpec); - if (!currUrl) { - return false; - } - - let currMsgId = EnigmailURIs.msgIdentificationFromUrl(currUrl); - let gotMsgId = EnigmailURIs.msgIdentificationFromUrl(uri); - - if (!gotMsgId) { - return false; - } - - EnigmailLog.DEBUG( - "enigmailMsgHdrViewOverlay.js: EnigMimeHeaderSink.isCurrentMessage: url=" + - currUrl.spec + - "\n" - ); - - if ( - uri.host == currUrl.host && - currMsgId.folder === gotMsgId.folder && - currMsgId.msgNum === gotMsgId.msgNum - ) { - EnigmailLog.DEBUG( - "enigmailMsgHdrViewOverlay.js: EnigMimeHeaderSink.isCurrentMessage: true\n" - ); - return true; - } - - EnigmailLog.DEBUG( - "enigmailMsgHdrViewOverlay.js: EnigMimeHeaderSink.isCurrentMessage: false\n" - ); - return false; + return true; }, /** @@ -1045,8 +983,7 @@ Enigmail.hdrView = { if (statusFlags & EnigmailConstants.DECRYPTION_OKAY) { if (gEncryptedURIService) { // remember encrypted message URI to enable TB prevention against EFAIL attack - Enigmail.hdrView.lastEncryptedUri = - gFolderDisplay.selectedMessageUris[0]; + Enigmail.hdrView.lastEncryptedUri = gMessageURI; gEncryptedURIService.rememberEncrypted( Enigmail.hdrView.lastEncryptedUri ); @@ -1104,14 +1041,11 @@ Enigmail.hdrView = { "\n" ); - let msg = gFolderDisplay.selectedMessage; + let msg = gMessage; if (!msg) { return; } - if ( - !this.isCurrentMessage(uri) || - gFolderDisplay.selectedMessages.length !== 1 - ) { + if (!this.isCurrentMessage(uri)) { return; } @@ -1150,7 +1084,7 @@ Enigmail.hdrView = { return; } - let msg = gFolderDisplay.selectedMessage; + let msg = gMessage; if ("subject" in hdr) { Enigmail.hdrView.setSubject(hdr.subject); diff --git a/mail/extensions/smime/content/msgHdrViewSMIMEOverlay.js b/mail/extensions/smime/content/msgHdrViewSMIMEOverlay.js index ff4b1c1b7b..3becac1c15 100644 --- a/mail/extensions/smime/content/msgHdrViewSMIMEOverlay.js +++ b/mail/extensions/smime/content/msgHdrViewSMIMEOverlay.js @@ -4,7 +4,9 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* import-globals-from ../../../../mailnews/extensions/smime/msgReadSMIMEOverlay.js */ +/* import-globals-from ../../../base/content/aboutMessage.js */ /* import-globals-from ../../../base/content/msgHdrView.js */ +/* import-globals-from ../../../base/content/msgSecurityPane.js */ var gEncryptedURIService = null; var gMyLastEncryptedURI = null; @@ -142,10 +144,10 @@ var smimeHeaderSink = { * message is displayed in a separate window. */ getSelectedMessageURI() { - if (!gFolderDisplay.selectedMessage) { + if (!gMessage) { return null; } - if (!gFolderDisplay.selectedMessage.folder) { + if (!gFolder) { // The folder should be absent only if the message gets opened // from an external file (.eml), which is opened in its own window. // That window won't get reused for other messages. We conclude @@ -156,7 +158,7 @@ var smimeHeaderSink = { return null; } - return neckoURLForMessageURI(gFolderDisplay.selectedMessageUris[0]); + return neckoURLForMessageURI(gMessageURI); }, signedStatus(aNestingLevel, aSignatureStatus, aSignerCert, aMsgNeckoURL) { @@ -267,7 +269,7 @@ var smimeHeaderSink = { if (gEncryptedURIService) { // Remember the message URI and the corresponding necko URI. - gMyLastEncryptedURI = gFolderDisplay.selectedMessageUris[0]; + gMyLastEncryptedURI = gMessageURI; gEncryptedURIService.rememberEncrypted(gMyLastEncryptedURI); gEncryptedURIService.rememberEncrypted( neckoURLForMessageURI(gMyLastEncryptedURI) diff --git a/mail/test/browser/folder-display/browser.ini b/mail/test/browser/folder-display/browser.ini index e24bf53307..ebf73bd460 100644 --- a/mail/test/browser/folder-display/browser.ini +++ b/mail/test/browser/folder-display/browser.ini @@ -59,7 +59,6 @@ skip-if = true # TODO skip-if = true # TODO [browser_invalidDbFolderLoad.js] [browser_mailTelemetry.js] -skip-if = true # TODO [browser_mailViews.js] skip-if = true # TODO [browser_messageCommands.js] diff --git a/mail/test/browser/folder-display/browser_mailTelemetry.js b/mail/test/browser/folder-display/browser_mailTelemetry.js index 984e22f2cf..525239af99 100644 --- a/mail/test/browser/folder-display/browser_mailTelemetry.js +++ b/mail/test/browser/folder-display/browser_mailTelemetry.js @@ -17,10 +17,20 @@ let { } = ChromeUtils.import( "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" ); +let { SmimeUtils } = ChromeUtils.import( + "resource://testing-common/mailnews/smimeUtils.jsm" +); let { TelemetryTestUtils } = ChromeUtils.import( "resource://testing-common/TelemetryTestUtils.jsm" ); +add_setup(function() { + SmimeUtils.ensureNSS(); + SmimeUtils.loadCertificateAndKey( + new FileUtils.File(getTestFilePath("../openpgp/data/smime/Bob.p12")) + ); +}); + /** * Check that we're counting secure mails read. */ @@ -46,7 +56,10 @@ add_task(async function test_secure_mails_read() { await add_message_to_folder( [folder], create_encrypted_smime_message({ - clobberHeaders: headers, + to: "Bob@example.com", + body: { + body: smimeMessage, + }, }) ); } @@ -102,3 +115,20 @@ add_task(async function test_secure_mails_read() { "Count of openpgp encrypted mails read must still be correct." ); }); + +var smimeMessage = [ + "MIAGCSqGSIb3DQEHA6CAMIACAQAxggGFMIIBgQIBADBpMGQxCzAJBgNVBAYTAlVT", + "MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRIw", + "EAYDVQQKEwlCT0dVUyBOU1MxFDASBgNVBAMTC05TUyBUZXN0IENBAgEoMA0GCSqG", + "SIb3DQEBAQUABIIBAGgZHxKKXrR3tMqJkkADZoYNqIJJXOXmrmXHHV830/RUW6gU", + "V3NNwsnl4L99kygitGe4X4gnjqPHs0FNxEL1DfxwyySfkcQge5BktBcBk448TUzz", + "WrS19L4UAfJkalu+stezAO0L4hs/kYaSrvFhuQ6vxfixHxGydwX008Ps16aua5zI", + "EYgiSoXxAUajtEh6phqAcC+FMhObZyEZXQKSgs3X0nYTQib8I6L7dWquYoQMVfsp", + "wpERLhEqtTghEW/CT8z6gQajkEgV9tFM0f2gLSH1672LRlHVAbk4ZceBmvxa02sr", + "PHW8gffMVWF6RX05rKzVnxm9IzJjHdWblc7SPJowgAYJKoZIhvcNAQcBMB0GCWCG", + "SAFlAwQBAgQQSSldfdzyN/cUjHJO2EXrGKCABIGglkOJOh25hjmvYeJtxlyih1CC", + "1tlMGVnct6Zuiy1y7jVIsJRSRFXsA4TQyFICPe4aq7ArNzT0Bizj8mzDXmJQNh5v", + "5bwmMwMrvW5p9NMasuFIaIqbvmVnLC5c/DcJoplx1eOG0OOfXevGLrepLzF9Yeya", + "TFli/xvLNSwTA+xSsFCxets7vknAXFBSqnRQP2fk2bnihfHdBh6JYIFKWStJlwQQ", + "Y0jCR94CgCHcP6Yi/0bwKQAAAAAAAAAAAAA=", +].join("\n"); diff --git a/mail/test/browser/openpgp/browser.ini b/mail/test/browser/openpgp/browser.ini index 66c8c5ce01..1f50932a49 100644 --- a/mail/test/browser/openpgp/browser.ini +++ b/mail/test/browser/openpgp/browser.ini @@ -7,13 +7,12 @@ prefs = mailnews.start_page.url=about:blank subsuite = thunderbird support-files = data/** -skip-if = true # TODO [browser_collectKeys.js] [browser_editDraftTemplate.js] +[browser_keyWizard.js] [browser_openPGPDrafts.js] [browser_perm_decrypt.js] [browser_viewMessage.js] [browser_viewMessageSecurity.js] [browser_viewPartialMessage.js] -[browser_keyWizard.js] diff --git a/mail/test/browser/openpgp/browser_collectKeys.js b/mail/test/browser/openpgp/browser_collectKeys.js index 33881d42cc..be26193c3f 100644 --- a/mail/test/browser/openpgp/browser_collectKeys.js +++ b/mail/test/browser/openpgp/browser_collectKeys.js @@ -8,7 +8,7 @@ "use strict"; -const { open_message_from_file } = ChromeUtils.import( +const { get_about_message, open_message_from_file } = ChromeUtils.import( "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" ); const { close_window } = ChromeUtils.import( @@ -51,10 +51,7 @@ async function openpgpProcessed() { let [subject] = await TestUtils.topicObserved( "document-element-inserted", document => { - return ( - document.ownerGlobal?.location == - "chrome://messenger/content/messageWindow.xhtml" - ); + return document.ownerGlobal?.location == "about:message"; } ); @@ -102,13 +99,14 @@ add_task(async function testCollectKeyAttachment() { ) ); await opengpgprocessed; + let aboutMessage = get_about_message(mc.window); Assert.ok( - OpenPGPTestUtils.hasNoSignedIconState(mc.window.document), + OpenPGPTestUtils.hasNoSignedIconState(aboutMessage.document), "signed icon is not displayed" ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is not displayed" ); await keycollected; @@ -141,13 +139,14 @@ add_task(async function testSkipFakeOrUnrelatedKeys() { ) ); await opengpgprocessed; + let aboutMessage = get_about_message(mc.window); Assert.ok( - OpenPGPTestUtils.hasNoSignedIconState(mc.window.document), + OpenPGPTestUtils.hasNoSignedIconState(aboutMessage.document), "signed icon is not displayed" ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is not displayed" ); @@ -183,13 +182,14 @@ add_task(async function testSkipDuplicateKeys() { new FileUtils.File(getTestFilePath("data/eml/eve-duplicate.eml")) ); await opengpgprocessed; + let aboutMessage = get_about_message(mc.window); Assert.ok( - OpenPGPTestUtils.hasNoSignedIconState(mc.window.document), + OpenPGPTestUtils.hasNoSignedIconState(aboutMessage.document), "signed icon is not displayed" ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is not displayed" ); diff --git a/mail/test/browser/openpgp/browser_editDraftTemplate.js b/mail/test/browser/openpgp/browser_editDraftTemplate.js index bd063de4cb..cdb86870fd 100644 --- a/mail/test/browser/openpgp/browser_editDraftTemplate.js +++ b/mail/test/browser/openpgp/browser_editDraftTemplate.js @@ -13,14 +13,12 @@ var { open_compose_new_mail, setup_msg_contents } = ChromeUtils.import( "resource://testing-common/mozmill/ComposeHelpers.jsm" ); -var { mailTestUtils } = ChromeUtils.import( - "resource://testing-common/mailnews/MailTestUtils.jsm" -); - var { be_in_folder, + get_about_3pane, get_special_folder, mc, + right_click_on_row, select_click_row, } = ChromeUtils.import( "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" @@ -123,8 +121,8 @@ add_task(async function testDraftSec() { */ add_task(async function testTemplSec() { await be_in_folder(templatesFolder); - await doTestSecState(true, false); // template, not secure - await doTestSecState(true, true); // template, secure + await doTestSecState(false, false); // template, not secure + await doTestSecState(false, true); // template, secure }); /** @@ -172,12 +170,22 @@ async function doTestSecState(isDraft, secure) { await be_in_folder(theFolder); select_click_row(0); - info(`Will double click to open the ${type}`); + info(`Will open the ${type}`); let draftWindowPromise = waitForComposeWindow(); - let threadTree = mc.window.document.getElementById("threadTree"); - mailTestUtils.treeClick(EventUtils, mc.window, threadTree, 0, 4, { - clickCount: 2, - }); + select_click_row(0); + await right_click_on_row(0); + + let about3Pane = get_about_3pane(); + let mailContext = about3Pane.document.getElementById("mailContext"); + if (isDraft) { + mailContext.activateItem( + about3Pane.document.getElementById("mailContext-editDraftMsg") + ); + } else { + mailContext.activateItem( + about3Pane.document.getElementById("mailContext-newMsgFromTemplate") + ); + } // The double click on col 4 (the subject) should bring up compose window // for editing this draft. diff --git a/mail/test/browser/openpgp/browser_openPGPDrafts.js b/mail/test/browser/openpgp/browser_openPGPDrafts.js index 13de2f8b8d..e1c3f65e3b 100644 --- a/mail/test/browser/openpgp/browser_openPGPDrafts.js +++ b/mail/test/browser/openpgp/browser_openPGPDrafts.js @@ -10,6 +10,7 @@ const { save_compose_message } = ChromeUtils.import( const { open_message_from_file, be_in_folder, + get_about_message, get_special_folder, select_click_row, open_selected_message, @@ -126,7 +127,9 @@ add_task(async function testDraftReplyToEncryptedMessageKeepsRePrefix() { ); let replyWindowPromise = waitForComposeWindow(); - mc.window.document.querySelector("#hdrReplyButton").click(); + get_about_message(mc.window) + .document.querySelector("#hdrReplyButton") + .click(); close_window(mc); let replyWindow = await replyWindowPromise; @@ -157,4 +160,5 @@ add_task(async function testDraftReplyToEncryptedMessageKeepsRePrefix() { registerCleanupFunction(function tearDown() { aliceIdentity.setUnicharAttribute("openpgp_key_id", initialKeyIdPref); MailServices.accounts.removeIncomingServer(aliceAcct.incomingServer, true); + MailServices.accounts.removeAccount(aliceAcct); }); diff --git a/mail/test/browser/openpgp/browser_perm_decrypt.js b/mail/test/browser/openpgp/browser_perm_decrypt.js index 0a5738ddc8..60e2c68790 100644 --- a/mail/test/browser/openpgp/browser_perm_decrypt.js +++ b/mail/test/browser/openpgp/browser_perm_decrypt.js @@ -10,6 +10,8 @@ const { be_in_folder, + get_about_3pane, + get_about_message, get_special_folder, mc, select_click_row, @@ -38,7 +40,7 @@ var { AppConstants } = ChromeUtils.importESModule( const MSG_TEXT = "Sundays are nothing without callaloo."; function getMsgBodyTxt(mc) { - let msgPane = mc.window.document.getElementById("messagepane"); + let msgPane = get_about_message(mc.window).content; return msgPane.contentDocument.documentElement.textContent; } @@ -119,20 +121,22 @@ add_task(async function testPermanentDecrypt() { // Select the first row. select_click_row(0); + let aboutMessage = get_about_message(); Assert.equal( - mc.window.document.getElementById("encryptionTechBtn").querySelector("span") - .textContent, + aboutMessage.document + .getElementById("encryptionTechBtn") + .querySelector("span").textContent, "OpenPGP" ); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is displayed" ); // Get header of selected message - let hdr = window.gFolderDisplay.selectedMessages[0]; + let hdr = get_about_3pane().gDBView.hdrForFirstSelectedMessage; await EnigmailPersistentCrypto.cryptMessage(hdr, gDecFolder.URI, false, null); @@ -143,18 +147,15 @@ add_task(async function testPermanentDecrypt() { select_click_row(0); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon NOT displayed" ); }); -registerCleanupFunction(function tearDown() { +registerCleanupFunction(function() { // Reset the OpenPGP key and delete the account. aliceIdentity.setUnicharAttribute("openpgp_key_id", initialKeyIdPref); MailServices.accounts.removeIncomingServer(aliceAcct.incomingServer, true); MailServices.accounts.removeAccount(aliceAcct); aliceAcct = null; - - // Work around this test timing out at completion because of focus weirdness. - window.gFolderDisplay.tree.focus(); }); diff --git a/mail/test/browser/openpgp/browser_viewMessage.js b/mail/test/browser/openpgp/browser_viewMessage.js index 359a049d1a..b0a5823560 100644 --- a/mail/test/browser/openpgp/browser_viewMessage.js +++ b/mail/test/browser/openpgp/browser_viewMessage.js @@ -9,6 +9,7 @@ "use strict"; const { + get_about_message, open_message_from_file, wait_for_message_display_completion, } = ChromeUtils.import( @@ -42,31 +43,12 @@ const { MailServices } = ChromeUtils.import( const MSG_TEXT = "Sundays are nothing without callaloo."; function getMsgBodyTxt(mc) { - let msgPane = mc.window.document.getElementById("messagepane"); + let msgPane = get_about_message(mc.window).content; return msgPane.contentDocument.documentElement.textContent; } var aliceAcct; -/** - * When testing a scenario that should automatically process the OpenPGP - * contents (it's not suppressed e.g. because of a partial content), - * then we need to wait for the automatic processing to complete. - */ -async function openpgpProcessed() { - let [subject] = await TestUtils.topicObserved( - "document-element-inserted", - document => { - return ( - document.ownerGlobal?.location == - "chrome://messenger/content/messageWindow.xhtml" - ); - } - ); - - return BrowserTestUtils.waitForEvent(subject, "openpgpprocessed"); -} - /** * Set up the base account, identity and keys needed for the tests. */ @@ -113,14 +95,15 @@ add_task(async function testOpenNoPGPSecurity() { getTestFilePath("data/eml/unsigned-unencrypted-from-bob-to-alice.eml") ) ); + let aboutMessage = get_about_message(mc.window); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - OpenPGPTestUtils.hasNoSignedIconState(mc.window.document), + OpenPGPTestUtils.hasNoSignedIconState(aboutMessage.document), "signed icon is not displayed" ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is not displayed" ); close_window(mc); @@ -137,14 +120,15 @@ add_task(async function testOpenSignedByVerifiedUnencrypted() { ) ) ); + let aboutMessage = get_about_message(mc.window); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - OpenPGPTestUtils.hasSignedIconState(mc.window.document, "verified"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "verified"), "signed verified icon is displayed" ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is not displayed" ); close_window(mc); @@ -160,14 +144,15 @@ add_task(async function testOpenSignedDateMismatch() { getTestFilePath("data/eml/signed-mismatch-email-date.eml") ) ); + let aboutMessage = get_about_message(mc.window); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - OpenPGPTestUtils.hasSignedIconState(mc.window.document, "mismatch"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "mismatch"), "signed unknown icon is displayed" ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is not displayed" ); close_window(mc); @@ -184,14 +169,15 @@ add_task(async function testOpenVerifiedUnsignedEncrypted() { ) ) ); + let aboutMessage = get_about_message(mc.window); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - OpenPGPTestUtils.hasNoSignedIconState(mc.window.document), + OpenPGPTestUtils.hasNoSignedIconState(aboutMessage.document), "signed icon is not displayed" ); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is displayed" ); close_window(mc); @@ -205,6 +191,7 @@ add_task(async function testOpenForwardedEncrypted() { let mc = await open_message_from_file( new FileUtils.File(getTestFilePath("data/eml/fwd-unsigned-encrypted.eml")) ); + let aboutMessage = get_about_message(mc.window); Assert.ok( getMsgBodyTxt(mc).includes("wrapper message with plain text"), @@ -215,23 +202,24 @@ add_task(async function testOpenForwardedEncrypted() { "message text should not be shown" ); Assert.ok( - OpenPGPTestUtils.hasNoSignedIconState(mc.window.document), + OpenPGPTestUtils.hasNoSignedIconState(aboutMessage.document), "signed icon is not displayed" ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is not displayed" ); let newWindowPromise = async_plan_for_new_window("mail:messageWindow"); EventUtils.synthesizeMouseAtCenter( - mc.e("attachmentName"), + aboutMessage.document.getElementById("attachmentName"), { clickCount: 1 }, - mc.window + aboutMessage ); let mc2 = await newWindowPromise; wait_for_message_display_completion(mc2, true); wait_for_window_focused(mc2.window); + let aboutMessage2 = get_about_message(mc2.window); // Check properties of the opened attachment window. Assert.ok( @@ -239,11 +227,11 @@ add_task(async function testOpenForwardedEncrypted() { "message text should be shown" ); Assert.ok( - OpenPGPTestUtils.hasNoSignedIconState(mc2.window.document), + OpenPGPTestUtils.hasNoSignedIconState(aboutMessage2.document), "signed icon is not displayed" ); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc2.window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage2.document, "ok"), "encrypted icon is displayed" ); close_window(mc2); @@ -252,16 +240,16 @@ add_task(async function testOpenForwardedEncrypted() { // Ensure there were no side effects for the primary window. Assert.ok( - OpenPGPTestUtils.hasNoSignedIconState(mc.window.document), + OpenPGPTestUtils.hasNoSignedIconState(aboutMessage.document), "signed icon is still not displayed" ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is still not displayed" ); close_window(mc); -}); +}).skip(); // TODO can't open message attachments yet /** * Test that opening a message that is signed by a verified key shows as such. @@ -274,14 +262,15 @@ add_task(async function testOpenSignedByVerifiedEncrypted() { ) ) ); + let aboutMessage = get_about_message(mc.window); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - OpenPGPTestUtils.hasSignedIconState(mc.window.document, "verified"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "verified"), "signed verified icon is displayed" ); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is displayed" ); close_window(mc); @@ -302,14 +291,15 @@ add_task(async function testOpenSignedEncryptedMultiFrom() { ) ) ); + let aboutMessage = get_about_message(mc.window); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - OpenPGPTestUtils.hasSignedIconState(mc.window.document, "mismatch"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "mismatch"), "mismatch icon should be displayed" ); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon should be displayed" ); close_window(mc); @@ -326,14 +316,15 @@ add_task(async function testOpenSignedByUnverifiedUnencrypted() { ) ) ); + let aboutMessage = get_about_message(mc.window); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - OpenPGPTestUtils.hasSignedIconState(mc.window.document, "unknown"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "unknown"), "signed unknown icon is displayed" ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is not displayed" ); close_window(mc); @@ -349,10 +340,11 @@ add_task(async function testOpenSignedWithOuterLayer() { getTestFilePath("data/eml/signed-with-mailman-footer.eml") ) ); + let aboutMessage = get_about_message(mc.window); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - OpenPGPTestUtils.hasNoSignedIconState(mc.window.document), + OpenPGPTestUtils.hasNoSignedIconState(aboutMessage.document), "signed icon is not displayed" ); close_window(mc); @@ -369,14 +361,15 @@ add_task(async function testOpenUnverifiedUnsignedEncrypted() { ) ) ); + let aboutMessage = get_about_message(mc.window); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - OpenPGPTestUtils.hasNoSignedIconState(mc.window.document), + OpenPGPTestUtils.hasNoSignedIconState(aboutMessage.document), "signed icon is not displayed" ); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is displayed" ); close_window(mc); @@ -394,14 +387,15 @@ add_task(async function testOpenSignedByUnverifiedEncrypted() { ) ) ); + let aboutMessage = get_about_message(mc.window); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - OpenPGPTestUtils.hasSignedIconState(mc.window.document, "unknown"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "unknown"), "signed unknown icon is displayed" ); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is displayed" ); close_window(mc); @@ -420,21 +414,22 @@ add_task(async function testUpdateMessageSignature() { ) ) ); + let aboutMessage = get_about_message(mc.window); // Verify current signature acceptance. Assert.ok( - OpenPGPTestUtils.hasSignedIconState(mc.window.document, "verified"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "verified"), "signed verified icon is displayed" ); let popupshown = BrowserTestUtils.waitForEvent( - mc.e("messageSecurityPanel"), + aboutMessage.document.getElementById("messageSecurityPanel"), "popupshown" ); EventUtils.synthesizeMouseAtCenter( - mc.e("encryptionTechBtn"), + aboutMessage.document.getElementById("encryptionTechBtn"), { clickCount: 1 }, - mc.window + aboutMessage ); // Wait for the popup panel and signature button to become visible otherwise // we can't click on it. @@ -470,9 +465,9 @@ add_task(async function testUpdateMessageSignature() { // This will open the key details, the domWindowOpened handler // will catch it and execute the changes. EventUtils.synthesizeMouseAtCenter( - mc.e("viewSignatureKey"), + aboutMessage.document.getElementById("viewSignatureKey"), { clickCount: 1 }, - mc.window + aboutMessage ); // Wait until we are done with keyDetailsDlg. @@ -482,11 +477,12 @@ add_task(async function testUpdateMessageSignature() { // Verify the new acceptance level is correct. await TestUtils.waitForCondition( - () => OpenPGPTestUtils.hasSignedIconState(mc.window.document, "unverified"), + () => + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "unverified"), "signed unverified icon should be displayed" ); close_window(mc); -}); +}).skip(); // TODO // After test testUpdateMessageSignature acceptance of Bob's key // has changed from verified to unverified. @@ -496,22 +492,22 @@ add_task(async function testUpdateMessageSignature() { * can be correctly verified. */ add_task(async function testOpenSignedInlineWithUTF8() { - let opengpgprocessed = openpgpProcessed(); let mc = await open_message_from_file( new FileUtils.File(getTestFilePath("data/eml/alice-utf.eml")) ); - await opengpgprocessed; + let aboutMessage = get_about_message(mc.window); Assert.ok( getMsgBodyTxt(mc).includes("£35.00"), "UTF-8 character found in message" ); - Assert.ok( - OpenPGPTestUtils.hasSignedIconState(mc.window.document, "unverified"), + await TestUtils.waitForCondition( + () => + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "unverified"), "signed unverified icon is displayed" ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is not displayed" ); close_window(mc); @@ -522,44 +518,43 @@ add_task(async function testOpenSignedInlineWithUTF8() { * can be correctly verified. */ add_task(async function testOpenSignedInlineWithLeadingWS() { - let opengpgprocessed = openpgpProcessed(); let mc = await open_message_from_file( new FileUtils.File(getTestFilePath("data/eml/signed-inline-indented.eml")) ); - await opengpgprocessed; + let aboutMessage = get_about_message(mc.window); Assert.ok( getMsgBodyTxt(mc).includes("indent test with £"), "expected text should be found in message" ); - Assert.ok( - OpenPGPTestUtils.hasSignedIconState(mc.window.document, "unverified"), + await TestUtils.waitForCondition( + () => + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "unverified"), "signed unverified icon is displayed" ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is not displayed" ); close_window(mc); -}); +}).skip(); // TODO /** * Test that an encrypted inline message, with nbsp encoded as qp * in the PGP separator line, is trimmed and decrypted. */ add_task(async function testDecryptInlineWithNBSPasQP() { - let opengpgprocessed = openpgpProcessed(); let mc = await open_message_from_file( new FileUtils.File(getTestFilePath("data/eml/bob-enc-inline-nbsp-qp.eml")) ); - await opengpgprocessed; + let aboutMessage = get_about_message(mc.window); Assert.ok( getMsgBodyTxt(mc).includes("My real name is not Bob."), "Secret text should be contained in message" ); - Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + await TestUtils.waitForCondition( + () => OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "Encrypted icon should be displayed" ); close_window(mc); @@ -570,18 +565,17 @@ add_task(async function testDecryptInlineWithNBSPasQP() { * encoded as qp in the PGP separator line, is trimmed and decrypted. */ add_task(async function testDecryptHtmlWithNBSP() { - let opengpgprocessed = openpgpProcessed(); let mc = await open_message_from_file( new FileUtils.File(getTestFilePath("data/eml/bob-enc-html-nbsp.eml")) ); - await opengpgprocessed; + let aboutMessage = get_about_message(mc.window); Assert.ok( getMsgBodyTxt(mc).includes("My real name is not Bob."), "Secret text should be contained in message" ); - Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + await TestUtils.waitForCondition( + () => OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "Encrypted icon should be displayed" ); close_window(mc); diff --git a/mail/test/browser/openpgp/browser_viewMessageSecurity.js b/mail/test/browser/openpgp/browser_viewMessageSecurity.js index cd30ed6203..5c58463e42 100644 --- a/mail/test/browser/openpgp/browser_viewMessageSecurity.js +++ b/mail/test/browser/openpgp/browser_viewMessageSecurity.js @@ -13,6 +13,7 @@ const { create_encrypted_smime_message, add_message_to_folder, be_in_folder, + get_about_message, get_special_folder, mc, select_click_row, @@ -35,20 +36,24 @@ const { OpenPGPTestUtils } = ChromeUtils.import( const { PromiseTestUtils } = ChromeUtils.import( "resource://testing-common/mailnews/PromiseTestUtils.jsm" ); +const { SmimeUtils } = ChromeUtils.import( + "resource://testing-common/mailnews/smimeUtils.jsm" +); + const { FileUtils } = ChromeUtils.importESModule( "resource://gre/modules/FileUtils.sys.mjs" ); const { MailServices } = ChromeUtils.import( "resource:///modules/MailServices.jsm" ); -var { AppConstants } = ChromeUtils.importESModule( +const { AppConstants } = ChromeUtils.importESModule( "resource://gre/modules/AppConstants.sys.mjs" ); const MSG_TEXT = "Sundays are nothing without callaloo."; function getMsgBodyTxt(mc) { - let msgPane = mc.window.document.getElementById("messagepane"); + let msgPane = get_about_message(mc.window).content; return msgPane.contentDocument.documentElement.textContent; } @@ -61,6 +66,11 @@ var gInbox; * Set up the base account, identity and keys needed for the tests. */ add_setup(async function() { + SmimeUtils.ensureNSS(); + SmimeUtils.loadCertificateAndKey( + new FileUtils.File(getTestFilePath("data/smime/Bob.p12")) + ); + aliceAcct = MailServices.accounts.createAccount(); aliceAcct.incomingServer = MailServices.accounts.createIncomingServer( "alice", @@ -104,6 +114,9 @@ add_setup(async function() { * encryption states. */ add_task(async function testSmimeOpenPgpSelection() { + let smimeFile = new FileUtils.File( + getTestFilePath("data/smime/alice.env.eml") + ); // Fetch a local OpenPGP message. let openPgpFile = new FileUtils.File( getTestFilePath( @@ -111,8 +124,22 @@ add_task(async function testSmimeOpenPgpSelection() { ) ); - // Add the fetched OpenPGP message to the inbox folder. + // Add the fetched S/MIME message to the inbox folder. let copyListener = new PromiseTestUtils.PromiseCopyListener(); + MailServices.copy.copyFileMessage( + smimeFile, + gInbox, + null, + false, + 0, + "", + copyListener, + null + ); + await copyListener.promise; + + // Add the fetched OpenPGP message to the inbox folder. + copyListener = new PromiseTestUtils.PromiseCopyListener(); MailServices.copy.copyFileMessage( openPgpFile, gInbox, @@ -125,43 +152,43 @@ add_task(async function testSmimeOpenPgpSelection() { ); await copyListener.promise; - // Create an S/MIME message and add it to the inbox folder. - await add_message_to_folder([gInbox], create_encrypted_smime_message()); - - // Select the first row, which should contain the S/MIME message. - select_click_row(0); + // Select the second row, which should contain the S/MIME message. + select_click_row(1); + let aboutMessage = get_about_message(); Assert.equal( - mc.window.document.getElementById("encryptionTechBtn").querySelector("span") - .textContent, + aboutMessage.document + .getElementById("encryptionTechBtn") + .querySelector("span").textContent, "S/MIME" ); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "notok"), - "S/MIME message cannot be decrypted" + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), + "S/MIME message should be decrypted" ); let openpgpprocessed = BrowserTestUtils.waitForEvent( - mc.window.document, + aboutMessage.document, "openpgpprocessed" ); - // Select the second row, which should contain the OpenPGP message. - select_click_row(1); + // Select the first row, which should contain the OpenPGP message. + select_click_row(0); await openpgpprocessed; Assert.equal( - mc.window.document.getElementById("encryptionTechBtn").querySelector("span") - .textContent, + aboutMessage.document + .getElementById("encryptionTechBtn") + .querySelector("span").textContent, "OpenPGP" ); Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); Assert.ok( - OpenPGPTestUtils.hasSignedIconState(mc.window.document, "verified"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "verified"), "signed verified icon is displayed" ); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is displayed" ); @@ -200,11 +227,16 @@ add_task(async function testBrokenMSExchangeEncryption() { select_click_row(0); // Assert the "corrupted by MS-Exchange" notification is visible. - wait_for_notification_to_show(mc, notificationBox, notificationValue); + let aboutMessage = get_about_message(); + wait_for_notification_to_show( + aboutMessage, + notificationBox, + notificationValue + ); // Click on the "repair" button. let repairButton = get_notification_button( - mc, + aboutMessage, notificationBox, notificationValue, { @@ -212,10 +244,14 @@ add_task(async function testBrokenMSExchangeEncryption() { } ); plan_for_message_display(mc); - EventUtils.synthesizeMouseAtCenter(repairButton, {}, mc.window); + EventUtils.synthesizeMouseAtCenter(repairButton, {}, aboutMessage); // Wait for the "fixing in progress" notification to go away. - wait_for_notification_to_stop(mc, notificationBox, "brokenExchangeProgress"); + wait_for_notification_to_stop( + aboutMessage, + notificationBox, + "brokenExchangeProgress" + ); // The broken exchange repair process generates a new fixed message body and // then copies the new message in the same folder. Therefore, we need to wait @@ -223,14 +259,14 @@ add_task(async function testBrokenMSExchangeEncryption() { wait_for_message_display_completion(mc, true); // Assert that the message was repaired and decrypted. - Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + await TestUtils.waitForCondition( + () => OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is displayed" ); // Delete the message. press_delete(); -}); +}).skip(); // TODO /** * Test the working keyboard shortcut event listener for the message header. @@ -243,9 +279,11 @@ add_task(async function testMessageSecurityShortcut() { // Select the first row, which should contain the S/MIME message. select_click_row(0); + let aboutMessage = get_about_message(); Assert.equal( - mc.window.document.getElementById("encryptionTechBtn").querySelector("span") - .textContent, + aboutMessage.document + .getElementById("encryptionTechBtn") + .querySelector("span").textContent, "S/MIME" ); @@ -255,11 +293,11 @@ add_task(async function testMessageSecurityShortcut() { : { accelKey: true, altKey: true }; let popupshown = BrowserTestUtils.waitForEvent( - mc.e("messageSecurityPanel"), + aboutMessage.document.getElementById("messageSecurityPanel"), "popupshown" ); - EventUtils.synthesizeKey("s", modifiers, mc.window); + EventUtils.synthesizeKey("s", modifiers, aboutMessage); // The Message Security popup panel should show up. await popupshown; @@ -268,7 +306,7 @@ add_task(async function testMessageSecurityShortcut() { select_click_row(0); // Delete the message. press_delete(); -}); +}).skip(); // TODO registerCleanupFunction(async function tearDown() { // Reset the OpenPGP key and delete the account. @@ -276,7 +314,4 @@ registerCleanupFunction(async function tearDown() { aliceAcct = null; await OpenPGPTestUtils.removeKeyById("0xf231550c4f47e38e", true); - - // Work around this test timing out at completion because of focus weirdness. - window.gFolderDisplay.tree.focus(); }); diff --git a/mail/test/browser/openpgp/browser_viewPartialMessage.js b/mail/test/browser/openpgp/browser_viewPartialMessage.js index f0fae9a8e6..1933a4e4b6 100644 --- a/mail/test/browser/openpgp/browser_viewPartialMessage.js +++ b/mail/test/browser/openpgp/browser_viewPartialMessage.js @@ -8,7 +8,7 @@ "use strict"; -const { open_message_from_file } = ChromeUtils.import( +const { get_about_message, open_message_from_file } = ChromeUtils.import( "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" ); const { close_window } = ChromeUtils.import( @@ -37,7 +37,7 @@ const { MailServices } = ChromeUtils.import( const MSG_TEXT = "Sundays are nothing without callaloo."; function getMsgBodyTxt(mc) { - let msgPane = mc.window.document.getElementById("messagepane"); + let msgPane = get_about_message(mc.window).content; return msgPane.contentDocument.documentElement.textContent; } @@ -147,12 +147,17 @@ add_task(async function testPartialInlinePGPDecrypt() { let mc = await open_message_from_file( new FileUtils.File(getTestFilePath("data/eml/" + test.filename)) ); + let aboutMessage = get_about_message(mc.window); let notificationBox = "mail-notification-top"; let notificationValue = "decryptInlinePG"; // Ensure the "partially encrypted notification" is visible. - wait_for_notification_to_show(mc, notificationBox, notificationValue); + wait_for_notification_to_show( + aboutMessage, + notificationBox, + notificationValue + ); let body = getMsgBodyTxt(mc); @@ -166,19 +171,19 @@ add_task(async function testPartialInlinePGPDecrypt() { // Click on the button to process the message subset. let processButton = get_notification_button( - mc, + aboutMessage, notificationBox, notificationValue, { popup: null, } ); - EventUtils.synthesizeMouseAtCenter(processButton, {}, mc.window); + EventUtils.synthesizeMouseAtCenter(processButton, {}, aboutMessage); // Assert that the message was processed and the partial content reminder // notification is visible. wait_for_notification_to_show( - mc, + aboutMessage, notificationBox, "decryptInlinePGReminder" ); @@ -196,7 +201,7 @@ add_task(async function testPartialInlinePGPDecrypt() { if (test.expectSuccess) { Assert.ok(containsSecret, "secret decrypted content should be shown"); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "decryption success icon is shown" ); } else { @@ -205,19 +210,25 @@ add_task(async function testPartialInlinePGPDecrypt() { "secret decrypted content should not be shown" ); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(mc.window.document, "notok"), + OpenPGPTestUtils.hasEncryptedIconState( + aboutMessage.document, + "notok" + ), "decryption failure icon is shown" ); } } else if (test.expectVerification) { if (test.expectSuccess) { Assert.ok( - OpenPGPTestUtils.hasSignedIconState(mc.window.document, "verified"), + OpenPGPTestUtils.hasSignedIconState( + aboutMessage.document, + "verified" + ), "ok verification icon is shown for " + test.filename ); } else { Assert.ok( - OpenPGPTestUtils.hasSignedIconState(mc.window.document, "unknown"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "unknown"), "unknown verification icon is shown" ); } diff --git a/mail/test/browser/openpgp/composition/browser.ini b/mail/test/browser/openpgp/composition/browser.ini index 6e2fa0fba8..60819b7625 100644 --- a/mail/test/browser/openpgp/composition/browser.ini +++ b/mail/test/browser/openpgp/composition/browser.ini @@ -11,10 +11,8 @@ subsuite = thunderbird support-files = ../data/** [browser_composeSigned.js] -skip-if = true # TODO -# skip-if = debug # Bug 1673652 - L10NRegistry throws NS_ERROR_FILE_UNRECOGNIZED_PATH +skip-if = debug # Bug 1673652 - L10NRegistry throws NS_ERROR_FILE_UNRECOGNIZED_PATH [browser_composeEncrypted.js] -skip-if = true # TODO -# skip-if = debug # Bug 1673652 - L10NRegistry throws NS_ERROR_FILE_UNRECOGNIZED_PATH +skip-if = debug # Bug 1673652 - L10NRegistry throws NS_ERROR_FILE_UNRECOGNIZED_PATH [browser_composeSwitchIdentity.js] skip-if = debug # Bug 1673652 - L10NRegistry throws NS_ERROR_FILE_UNRECOGNIZED_PATH diff --git a/mail/test/browser/openpgp/composition/browser_composeEncrypted.js b/mail/test/browser/openpgp/composition/browser_composeEncrypted.js index 7755dbae21..7d6ae19019 100644 --- a/mail/test/browser/openpgp/composition/browser_composeEncrypted.js +++ b/mail/test/browser/openpgp/composition/browser_composeEncrypted.js @@ -11,6 +11,7 @@ const { open_message_from_file, be_in_folder, + get_about_message, get_special_folder, select_click_row, } = ChromeUtils.import( @@ -37,6 +38,8 @@ let bobIdentity; let gOutbox; let gDrafts; +let aboutMessage = get_about_message(); + // Used in some of the tests to verify key status display. let l10n = new Localization(["messenger/openpgp/composeKeyStatus.ftl"]); @@ -119,18 +122,18 @@ add_task(async function testEncryptedMessageComposition() { select_click_row(0); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "message should have encrypted icon" ); Assert.equal( - window.document.querySelector("#attachmentList").itemChildren.length, + aboutMessage.document.querySelector("#attachmentList").itemChildren.length, 0, "no keys should be attached to message" ); Assert.ok( - OpenPGPTestUtils.hasNoSignedIconState(window.document), + OpenPGPTestUtils.hasNoSignedIconState(aboutMessage.document), "message should have signed icon" ); @@ -164,11 +167,11 @@ add_task(async function testEncryptedMessageWithKeyComposition() { select_click_row(0); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "message should have encrypted icon" ); - let attachmentList = window.document.querySelector("#attachmentList"); + let attachmentList = aboutMessage.document.querySelector("#attachmentList"); await TestUtils.waitForCondition( () => attachmentList.itemChildren.length == 1, @@ -183,7 +186,7 @@ add_task(async function testEncryptedMessageWithKeyComposition() { ); Assert.ok( - OpenPGPTestUtils.hasNoSignedIconState(window.document), + OpenPGPTestUtils.hasNoSignedIconState(aboutMessage.document), "message should have no signed icon" ); @@ -312,7 +315,7 @@ add_task( select_click_row(0); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "message should have encrypted icon" ); @@ -444,7 +447,7 @@ add_task( select_click_row(0); await TestUtils.waitForCondition( - () => OpenPGPTestUtils.hasEncryptedIconState(window.document, "ok"), + () => OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "message should have encrypted icon" ); @@ -475,11 +478,16 @@ add_task(async function testEncryptedMessageReplyIsEncrypted() { ); }); - mc.window.document.querySelector("#hdrReplyButton").click(); + get_about_message(mc.window) + .document.querySelector("#hdrReplyButton") + .click(); close_window(mc); let replyWindow = await replyWindowPromise; - await BrowserTestUtils.waitForEvent(replyWindow, "focus", true); + await Promise.all([ + BrowserTestUtils.waitForEvent(replyWindow, "focus", true), + BrowserTestUtils.waitForEvent(replyWindow, "compose-editor-ready", true), + ]); replyWindow.document.querySelector("#button-save").click(); await TestUtils.waitForCondition( @@ -488,15 +496,11 @@ add_task(async function testEncryptedMessageReplyIsEncrypted() { ); replyWindow.close(); - if (Services.focus.activeWindow != window) { - await BrowserTestUtils.waitForEvent(window, "focus"); - } - await be_in_folder(gDrafts); select_click_row(0); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon should be displayed" ); }); diff --git a/mail/test/browser/openpgp/composition/browser_composeSigned.js b/mail/test/browser/openpgp/composition/browser_composeSigned.js index 1f9404d9f2..25d918a1f9 100644 --- a/mail/test/browser/openpgp/composition/browser_composeSigned.js +++ b/mail/test/browser/openpgp/composition/browser_composeSigned.js @@ -11,6 +11,7 @@ const { assert_selected_and_displayed, be_in_folder, + get_about_message, get_special_folder, select_click_row, } = ChromeUtils.import( @@ -34,6 +35,8 @@ let bobIdentity; let initialKeyIdPref = ""; let gOutbox; +let aboutMessage = get_about_message(); + /** * Setup a mail account with a private key and import the public key for the * receiver. @@ -101,18 +104,18 @@ add_task(async function testSignedMessageComposition() { assert_selected_and_displayed(0); Assert.ok( - OpenPGPTestUtils.hasSignedIconState(window.document, "ok"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "ok"), "message has signed icon" ); Assert.equal( - window.document.querySelector("#attachmentList").itemChildren.length, + aboutMessage.document.querySelector("#attachmentList").itemChildren.length, 0, "no keys attached to message" ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is not displayed" ); @@ -145,11 +148,11 @@ add_task(async function testSignedMessageWithKeyComposition() { assert_selected_and_displayed(0); Assert.ok( - OpenPGPTestUtils.hasSignedIconState(window.document, "ok"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "ok"), "message has signed icon" ); - let attachmentList = window.document.querySelector("#attachmentList"); + let attachmentList = aboutMessage.document.querySelector("#attachmentList"); Assert.equal( attachmentList.itemChildren.length, @@ -165,7 +168,7 @@ add_task(async function testSignedMessageWithKeyComposition() { ); Assert.ok( - !OpenPGPTestUtils.hasEncryptedIconState(window.document, "ok"), + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "encrypted icon is not displayed" ); @@ -199,17 +202,17 @@ add_task(async function testSignedEncryptedMessageComposition() { assert_selected_and_displayed(0); Assert.ok( - OpenPGPTestUtils.hasSignedIconState(window.document, "ok"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "ok"), "message has signed icon" ); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "message has encrypted icon" ); Assert.equal( - window.document.querySelector("#attachmentList").itemChildren.length, + aboutMessage.document.querySelector("#attachmentList").itemChildren.length, 0, "no keys attached to message" ); @@ -243,16 +246,16 @@ add_task(async function testSignedEncryptedMessageWithKeyComposition() { assert_selected_and_displayed(0); Assert.ok( - OpenPGPTestUtils.hasSignedIconState(window.document, "ok"), + OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "ok"), "message has signed icon" ); Assert.ok( - OpenPGPTestUtils.hasEncryptedIconState(window.document, "ok"), + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), "message has encrypted icon" ); - let attachmentList = window.document.querySelector("#attachmentList"); + let attachmentList = aboutMessage.document.querySelector("#attachmentList"); Assert.equal( attachmentList.itemChildren.length, diff --git a/mail/test/browser/openpgp/data/smime/Bob.p12 b/mail/test/browser/openpgp/data/smime/Bob.p12 new file mode 100644 index 0000000000..14353b3786 Binary files /dev/null and b/mail/test/browser/openpgp/data/smime/Bob.p12 differ diff --git a/mail/test/browser/openpgp/data/smime/alice.env.eml b/mail/test/browser/openpgp/data/smime/alice.env.eml new file mode 100644 index 0000000000..756f179d17 --- /dev/null +++ b/mail/test/browser/openpgp/data/smime/alice.env.eml @@ -0,0 +1,25 @@ +MIME-Version: 1.0 +From: Alice@example.com +To: Bob@example.com +Subject: enveloped +Content-Type: application/pkcs7-mime; name=smime.p7m; + smime-type=enveloped-data +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename=smime.p7m +Content-Description: S/MIME Encrypted Message + +MIAGCSqGSIb3DQEHA6CAMIACAQAxggGFMIIBgQIBADBpMGQxCzAJBgNVBAYTAlVT +MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRIw +EAYDVQQKEwlCT0dVUyBOU1MxFDASBgNVBAMTC05TUyBUZXN0IENBAgEoMA0GCSqG +SIb3DQEBAQUABIIBAGgZHxKKXrR3tMqJkkADZoYNqIJJXOXmrmXHHV830/RUW6gU +V3NNwsnl4L99kygitGe4X4gnjqPHs0FNxEL1DfxwyySfkcQge5BktBcBk448TUzz +WrS19L4UAfJkalu+stezAO0L4hs/kYaSrvFhuQ6vxfixHxGydwX008Ps16aua5zI +EYgiSoXxAUajtEh6phqAcC+FMhObZyEZXQKSgs3X0nYTQib8I6L7dWquYoQMVfsp +wpERLhEqtTghEW/CT8z6gQajkEgV9tFM0f2gLSH1672LRlHVAbk4ZceBmvxa02sr +PHW8gffMVWF6RX05rKzVnxm9IzJjHdWblc7SPJowgAYJKoZIhvcNAQcBMB0GCWCG +SAFlAwQBAgQQSSldfdzyN/cUjHJO2EXrGKCABIGglkOJOh25hjmvYeJtxlyih1CC +1tlMGVnct6Zuiy1y7jVIsJRSRFXsA4TQyFICPe4aq7ArNzT0Bizj8mzDXmJQNh5v +5bwmMwMrvW5p9NMasuFIaIqbvmVnLC5c/DcJoplx1eOG0OOfXevGLrepLzF9Yeya +TFli/xvLNSwTA+xSsFCxets7vknAXFBSqnRQP2fk2bnihfHdBh6JYIFKWStJlwQQ +Y0jCR94CgCHcP6Yi/0bwKQAAAAAAAAAAAAA= + diff --git a/mail/test/browser/smime/browser.ini b/mail/test/browser/smime/browser.ini index ae6ea1177c..fbe5f97d43 100644 --- a/mail/test/browser/smime/browser.ini +++ b/mail/test/browser/smime/browser.ini @@ -10,4 +10,3 @@ subsuite = thunderbird support-files = data/** [browser_multipartAlternative.js] -skip-if = true # TODO, crashes diff --git a/mailnews/extensions/smime/msgReadSMIMEOverlay.js b/mailnews/extensions/smime/msgReadSMIMEOverlay.js index abf1434544..8610f0ea1f 100644 --- a/mailnews/extensions/smime/msgReadSMIMEOverlay.js +++ b/mailnews/extensions/smime/msgReadSMIMEOverlay.js @@ -2,8 +2,7 @@ * 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/. */ -/* globals gDBView, GetNumSelectedMessages */ -/* global currentHeaderData: false */ +/* import-globals-from ../../../mail/base/content/aboutMessage.js */ var gEncryptionStatus = -1; var gSignatureStatus = -1; diff --git a/mailnews/local/src/nsMsgFileHdr.cpp b/mailnews/local/src/nsMsgFileHdr.cpp index dfb5ca40b8..13753f9dc6 100644 --- a/mailnews/local/src/nsMsgFileHdr.cpp +++ b/mailnews/local/src/nsMsgFileHdr.cpp @@ -211,7 +211,13 @@ NS_IMETHODIMP nsMsgFileHdr::GetBccList(char** aBccList) { return NS_OK; } NS_IMETHODIMP nsMsgFileHdr::SetBccList(const char* aBccList) { return NS_OK; } -NS_IMETHODIMP nsMsgFileHdr::GetAuthor(char** aAuthor) { return NS_OK; } +NS_IMETHODIMP nsMsgFileHdr::GetAuthor(char** aAuthor) { + nsresult rv = ReadFile(); + NS_ENSURE_SUCCESS(rv, rv); + + *aAuthor = strdup(mAuthor.get()); + return NS_OK; +} NS_IMETHODIMP nsMsgFileHdr::SetAuthor(const char* aAuthor) { return NS_OK; }