/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * 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 http://mozilla.org/MPL/2.0/. */ var gSignedUINode = null; var gEncryptedUINode = null; var gSMIMEContainer = null; var gStatusBar = null; var gSignedStatusPanel = null; var gEncryptedStatusPanel = null; var gEncryptedURIService = null; var gMyLastEncryptedURI = null; var gSMIMEBundle = null; // var gBrandBundle; -- defined in mailWindow.js // manipulates some globals from msgReadSMIMEOverlay.js var nsICMSMessageErrors = Components.interfaces.nsICMSMessageErrors; /// Get the necko URL for the message URI. function neckoURLForMessageURI(aMessageURI) { let msgSvc = Components.classes["@mozilla.org/messenger;1"] .createInstance(Components.interfaces.nsIMessenger) .messageServiceFromURI(aMessageURI); let neckoURI = {}; msgSvc.GetUrlForUri(aMessageURI, neckoURI, null); return neckoURI.value.spec; } var smimeHeaderSink = { maxWantedNesting: function() { return 1; }, signedStatus: function(aNestingLevel, aSignatureStatus, aSignerCert) { if (aNestingLevel > 1) { // we are not interested return; } gSignatureStatus = aSignatureStatus; gSignerCert = aSignerCert; gSMIMEContainer.collapsed = false; gSignedUINode.collapsed = false; gSignedStatusPanel.collapsed = false; switch (aSignatureStatus) { case nsICMSMessageErrors.SUCCESS: gSignedUINode.setAttribute("signed", "ok"); gStatusBar.setAttribute("signed", "ok"); break; case nsICMSMessageErrors.VERIFY_NOT_YET_ATTEMPTED: gSignedUINode.setAttribute("signed", "unknown"); gStatusBar.setAttribute("signed", "unknown"); break; case nsICMSMessageErrors.VERIFY_CERT_WITHOUT_ADDRESS: case nsICMSMessageErrors.VERIFY_HEADER_MISMATCH: gSignedUINode.setAttribute("signed", "mismatch"); gStatusBar.setAttribute("signed", "mismatch"); break; default: gSignedUINode.setAttribute("signed", "notok"); gStatusBar.setAttribute("signed", "notok"); break; } }, encryptionStatus: function(aNestingLevel, aEncryptionStatus, aRecipientCert) { if (aNestingLevel > 1) { // we are not interested return; } gEncryptionStatus = aEncryptionStatus; gEncryptionCert = aRecipientCert; gSMIMEContainer.collapsed = false; gEncryptedUINode.collapsed = false; gEncryptedStatusPanel.collapsed = false; if (nsICMSMessageErrors.SUCCESS == aEncryptionStatus) { gEncryptedUINode.setAttribute("encrypted", "ok"); gStatusBar.setAttribute("encrypted", "ok"); } else { gEncryptedUINode.setAttribute("encrypted", "notok"); gStatusBar.setAttribute("encrypted", "notok"); } if (gEncryptedURIService) { // Remember the message URI and the corresponding necko URI. gMyLastEncryptedURI = GetLoadedMessage(); gEncryptedURIService.rememberEncrypted(gMyLastEncryptedURI); gEncryptedURIService.rememberEncrypted( neckoURLForMessageURI(gMyLastEncryptedURI)); } switch (aEncryptionStatus) { case nsICMSMessageErrors.SUCCESS: case nsICMSMessageErrors.ENCRYPT_INCOMPLETE: break; default: var brand = gBrandBundle.getString("brandShortName"); var title = gSMIMEBundle.getString("CantDecryptTitle").replace(/%brand%/g, brand); var body = gSMIMEBundle.getString("CantDecryptBody").replace(/%brand%/g, brand); // insert our message msgWindow.displayHTMLInMessagePane(title, "\n" + "\n" + "



\n" + "\n" + "
\n" + "
\n" + title+"

\n" + body+"\n" + "
", false); } }, QueryInterface : function(iid) { if (iid.equals(Components.interfaces.nsIMsgSMIMEHeaderSink) || iid.equals(Components.interfaces.nsISupports)) return this; throw Components.results.NS_NOINTERFACE; } }; function forgetEncryptedURI() { if (gMyLastEncryptedURI && gEncryptedURIService) { gEncryptedURIService.forgetEncrypted(gMyLastEncryptedURI); gEncryptedURIService.forgetEncrypted( neckoURLForMessageURI(gMyLastEncryptedURI)); gMyLastEncryptedURI = null; } } function onSMIMEStartHeaders() { gEncryptionStatus = -1; gSignatureStatus = -1; gSignerCert = null; gEncryptionCert = null; gSMIMEContainer.collapsed = true; gSignedUINode.collapsed = true; gSignedUINode.removeAttribute("signed"); gSignedStatusPanel.collapsed = true; gStatusBar.removeAttribute("signed"); gEncryptedUINode.collapsed = true; gEncryptedUINode.removeAttribute("encrypted"); gEncryptedStatusPanel.collapsed = true; gStatusBar.removeAttribute("encrypted"); forgetEncryptedURI(); } function onSMIMEEndHeaders() {} function onSmartCardChange() { // only reload encrypted windows if (gMyLastEncryptedURI && gEncryptionStatus != -1) ReloadMessage(); } function msgHdrViewSMIMEOnLoad(event) { window.crypto.enableSmartCardEvents = true; document.addEventListener("smartcard-insert", onSmartCardChange, false); document.addEventListener("smartcard-remove", onSmartCardChange, false); if (!gSMIMEBundle) gSMIMEBundle = document.getElementById("bundle_read_smime"); // we want to register our security header sink as an opaque nsISupports // on the msgHdrSink used by mail..... msgWindow.msgHeaderSink.securityInfo = smimeHeaderSink; gSignedUINode = document.getElementById('signedHdrIcon'); gEncryptedUINode = document.getElementById('encryptedHdrIcon'); gSMIMEContainer = document.getElementById('smimeBox'); gStatusBar = document.getElementById('status-bar'); gSignedStatusPanel = document.getElementById('signed-status'); gEncryptedStatusPanel = document.getElementById('encrypted-status'); // add ourself to the list of message display listeners so we get notified when we are about to display a // message. var listener = {}; listener.onStartHeaders = onSMIMEStartHeaders; listener.onEndHeaders = onSMIMEEndHeaders; gMessageListeners.push(listener); gEncryptedURIService = Components.classes["@mozilla.org/messenger-smime/smime-encrypted-uris-service;1"] .getService(Components.interfaces.nsIEncryptedSMIMEURIsService); } function msgHdrViewSMIMEOnUnload(event) { window.crypto.enableSmartCardEvents = false; document.removeEventListener("smartcard-insert", onSmartCardChange, false); document.removeEventListener("smartcard-remove", onSmartCardChange, false); forgetEncryptedURI(); removeEventListener("messagepane-loaded", msgHdrViewSMIMEOnLoad, true); removeEventListener("messagepane-unloaded", msgHdrViewSMIMEOnUnload, true); removeEventListener("messagepane-hide", msgHdrViewSMIMEOnMessagePaneHide, true); removeEventListener("messagepane-unhide", msgHdrViewSMIMEOnMessagePaneUnhide, true); } function msgHdrViewSMIMEOnMessagePaneHide() { gSMIMEContainer.collapsed = true; gSignedUINode.collapsed = true; gSignedStatusPanel.collapsed = true; gEncryptedUINode.collapsed = true; gEncryptedStatusPanel.collapsed = true; } function msgHdrViewSMIMEOnMessagePaneUnhide() { if (gEncryptionStatus != -1 || gSignatureStatus != -1) { gSMIMEContainer.collapsed = false; if (gSignatureStatus != -1) { gSignedUINode.collapsed = false; gSignedStatusPanel.collapsed = false; } if (gEncryptionStatus != -1) { gEncryptedUINode.collapsed = false; gEncryptedStatusPanel.collapsed = false; } } } addEventListener('messagepane-loaded', msgHdrViewSMIMEOnLoad, true); addEventListener('messagepane-unloaded', msgHdrViewSMIMEOnUnload, true); addEventListener('messagepane-hide', msgHdrViewSMIMEOnMessagePaneHide, true); addEventListener('messagepane-unhide', msgHdrViewSMIMEOnMessagePaneUnhide, true);