我正在尝试nsICertificateDialogs
用我自己的实现替换对话框。我已经有一个扩展来处理来自 webmail 的 smime 邮件。我希望能够将 Mozilla 证书存储与我的扩展一起使用。我发现导出 smime 证书/密钥(在我的扩展中使用它)的唯一可能性是通过导出 pfx 文件。
我从命令行调用 nsIX509CertDB.nsIX509CertDB 时取消了原始证书 teddialog 并按照此处所述注册了我的失败(取消注册旧工厂并使用正确的 contractID 注册我的)。当我打电话时,Cc[@mozilla.org/nsCertificateDialogs;1].getService(Ci.nsICertificateDialogs);
我的班级被实例化。调用时certDB.importPKCS12File(null, certfile)
我得到一个NS_ERROR_FAILURE
并且我的对话框类没有被实例化。
FF 实例化证书对话框有什么区别。我该如何测试它?我错过了什么?
编辑:我的证书对话框类不会被 ff 实例化 - 即使使用有效令牌调用 certDB.importPKCS12File(token, certfile); 在更改调用 var certdialogInterface = Cc[sMimeCertificateDialog.mozillaContractID] .getService(Ci.nsICertificateDialogs); 正确实例化我的类(随后是一些 QueryInterface 调用)
编辑:我上传了一个(希望如此)简单的复制器到http://www.sodgeit.de/dialog_reproducer.zip查看 src/chrome/components/smime_certificate_dialog.js 和 src/tests/smime_certificate_dialog_test.js