@@ -405,14 +405,29 @@ /* * Handler for messages from Chrome related to listing certificates */ function cackeyListCertificates(chromeCallback) { var callbackId; + var promiseHandle = null, promiseResolve, promiseReject; if (goog.DEBUG) { console.log("[cackey] Asked to provide a list of certificates -- throwing that request over to the NaCl side... "); } + + if (!chromeCallback) { + /* + * If no callback supplied, arrange for a promise to be returned instead + */ + promiseHandle = new Promise(function(resolve, reject) { + promiseResolve = resolve; + promiseReject = reject; + }); + + chromeCallback = function(certs) { + promiseResolve(certs); + }; + } callbackId = ++cackeyOutstandingCallbackCounter; cackeyInitPCSC(function() { cackeyHandle.postMessage( @@ -428,11 +443,11 @@ if (goog.DEBUG) { console.log("[cackey] Thrown."); } }, chromeCallback); - return; + return(promiseHandle); } /* * Handler for messages from Chrome related to listing readers */