Index: manager/ssl/src/nsCRLManager.cpp =================================================================== RCS file: /cvsroot/mozilla/security/manager/ssl/src/nsCRLManager.cpp,v retrieving revision 1.15 diff -u -p -r1.15 nsCRLManager.cpp --- manager/ssl/src/nsCRLManager.cpp 5 Aug 2007 11:54:00 -0000 1.15 +++ manager/ssl/src/nsCRLManager.cpp 10 Jul 2008 22:58:56 -0000 @@ -50,6 +50,7 @@ #include "nsIMutableArray.h" #include "nsIPrefService.h" #include "nsIPrefBranch.h" +#include "nsIObserverService.h" #include "nsNSSShutDown.h" #include "nsNSSCertHeader.h" @@ -146,6 +147,27 @@ nsCRLManager::ImportCrl (PRUint8 *aData, SEC_DestroyCrl(crl); importSuccessful = PR_TRUE; + if (crlData) { + /* yes, if observer service isn't threadsafe + * then this code isn't correct either. + */ + nsCOMPtr obs = + do_GetService("@mozilla.org/observer-service;1"); + if (obs) { + if (!NS_IsMainThread()) { + nsCOMPtr result; + NS_GetProxyForObject(NS_PROXY_TO_MAIN_THREAD, + NS_GET_IID(nsIObserverService), + obs, NS_PROXY_ASYNC | NS_PROXY_ALWAYS, + getter_AddRefs(result)); + obs.swap(result); + } + /* yes, this could be false if the Proxy Call failed */ + if (obs) { + obs->Observe(crlData, "new-crl-entry", null); + } + } + } goto done; loser: Index: manager/pki/resources/content/crlManager.js =================================================================== RCS file: /cvsroot/mozilla/security/manager/pki/resources/content/crlManager.js,v retrieving revision 1.14 diff -u -p -r1.14 crlManager.js --- manager/pki/resources/content/crlManager.js 3 May 2005 23:56:18 -0000 1.14 +++ manager/pki/resources/content/crlManager.js 10 Jul 2008 22:58:56 -0000 @@ -42,11 +42,14 @@ const nsISupportsArray = Components.inte const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock; const nsPKIParamBlock = "@mozilla.org/security/pkiparamblock;1"; const nsIPrefService = Components.interfaces.nsIPrefService; +const nsIObserverService = Components.interfaces.nsIObserverService; var crlManager; +var crlListener; var crls; var prefService; var prefBranch; +var bundle; var autoupdateEnabledBaseString = "security.crl.autoupdate.enable."; var autoupdateTimeTypeBaseString = "security.crl.autoupdate.timingType."; @@ -59,46 +62,47 @@ var autoupdateFreqCntString = "sec function onLoad() { - var crlEntry; - var i; - crlManager = Components.classes[nsCRLManager].getService(nsICRLManager); crls = crlManager.getCrls(); prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(nsIPrefService); prefBranch = prefService.getBranch(null); - var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties"); - var autoupdateEnabledString; - var autoupdateErrCntString; - - for (i=0; i 0){ - status = bundle.GetStringFromName("crlAutoupdateFailed"); - } else { - status = bundle.GetStringFromName("crlAutoupdateOk"); - } - }catch(exception){} - - AddItem("crlList", [org, orgUnit, lastUpdate, nextUpdate, enabledStr, status], "crltree_", i); + bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties"); + var obs = Components.classes["@mozilla.org/observer-service;1"].getService(nsIObserverService); + obs.addObserver(crlListener = new CRLListener, "new-crl-entry", true); + + for (var i=0; i 0){ + status = bundle.GetStringFromName("crlAutoupdateFailed"); + } else { + status = bundle.GetStringFromName("crlAutoupdateOk"); + } + }catch(exception){} + + AddItem("crlList", [org, orgUnit, lastUpdate, nextUpdate, enabledStr, status], "crltree_", i); +} + function AddItem(children,cells,prefix,idfier) { var kids = document.getElementById(children); @@ -116,6 +120,25 @@ function AddItem(children,cells,prefix,i kids.appendChild(item); } +function CRLListener() +{} +CRLListener.prototype.QueryInterface = function QueryInterface(iid) +{ + if (iid.equals(nsIObserver) || + iid.equals(nsIWeakReference) || + iid.equals(nsISupports)) + return this; + throw Components.results.NS_ERROR_NO_INTERFACE; +} +CRLListener.prototype.observe = function (crlEntry, topic, message) +{ + switch (topic) { + case "new-crl-entry": + /* yes, we should try to deal w/ the update case ... */ + AddCRL(crlEntry); + } +} + function DeleteCrlSelected() { var crlEntry;