| Index: chrome/browser/gtk/ssl_client_certificate_selector.cc
|
| diff --git a/chrome/browser/gtk/ssl_client_certificate_selector.cc b/chrome/browser/gtk/ssl_client_certificate_selector.cc
|
| index 987e51a40229407942c850d84d95e2da0b01f124..dad8084bc80cf13246886501a5ff75fc02126030 100644
|
| --- a/chrome/browser/gtk/ssl_client_certificate_selector.cc
|
| +++ b/chrome/browser/gtk/ssl_client_certificate_selector.cc
|
| @@ -4,7 +4,6 @@
|
|
|
| #include "chrome/browser/ssl_client_certificate_selector.h"
|
|
|
| -#include <cert.h>
|
| #include <gtk/gtk.h>
|
|
|
| #include <string>
|
| @@ -22,16 +21,11 @@
|
| #include "chrome/browser/gtk/owned_widget_gtk.h"
|
| #include "chrome/browser/ssl/ssl_client_auth_handler.h"
|
| #include "chrome/browser/tab_contents/tab_contents.h"
|
| -#include "chrome/third_party/mozilla_security_manager/nsNSSCertHelper.h"
|
| -#include "chrome/third_party/mozilla_security_manager/nsNSSCertificate.h"
|
| -#include "chrome/third_party/mozilla_security_manager/nsUsageArrayHelper.h"
|
| +#include "chrome/common/net/x509_certificate_model.h"
|
| #include "gfx/native_widget_types.h"
|
| #include "grit/generated_resources.h"
|
| #include "net/base/x509_certificate.h"
|
|
|
| -// PSM = Mozilla's Personal Security Manager.
|
| -namespace psm = mozilla_security_manager;
|
| -
|
| namespace {
|
|
|
| enum {
|
| @@ -60,9 +54,11 @@ class SSLClientCertificateSelector : public ConstrainedDialogDelegate {
|
|
|
| net::X509Certificate* GetSelectedCert();
|
|
|
| - static std::string FormatComboBoxText(CERTCertificate* cert,
|
| - const char* nickname);
|
| - static std::string FormatDetailsText(CERTCertificate* cert);
|
| + static std::string FormatComboBoxText(
|
| + net::X509Certificate::OSCertHandle cert,
|
| + const std::string& nickname);
|
| + static std::string FormatDetailsText(
|
| + net::X509Certificate::OSCertHandle cert);
|
|
|
| CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnComboBoxChanged);
|
| CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnViewClicked);
|
| @@ -191,39 +187,27 @@ void SSLClientCertificateSelector::Show() {
|
| }
|
|
|
| void SSLClientCertificateSelector::PopulateCerts() {
|
| - CERTCertList* cert_list = CERT_NewCertList();
|
| - for (size_t i = 0; i < cert_request_info_->client_certs.size(); ++i) {
|
| - CERT_AddCertToListTail(
|
| - cert_list,
|
| - CERT_DupCertificate(
|
| - cert_request_info_->client_certs[i]->os_cert_handle()));
|
| - }
|
| - // Would like to use CERT_GetCertNicknameWithValidity on each cert
|
| - // individually instead of having to build a CERTCertList for this, but that
|
| - // function is not exported.
|
| - CERTCertNicknames* nicknames = CERT_NicknameStringsFromCertList(
|
| - cert_list,
|
| - const_cast<char*>(l10n_util::GetStringUTF8(
|
| - IDS_CERT_SELECTOR_CERT_EXPIRED).c_str()),
|
| - const_cast<char*>(l10n_util::GetStringUTF8(
|
| - IDS_CERT_SELECTOR_CERT_NOT_YET_VALID).c_str()));
|
| - DCHECK_EQ(nicknames->numnicknames,
|
| - static_cast<int>(cert_request_info_->client_certs.size()));
|
| + std::vector<std::string> nicknames;
|
| + x509_certificate_model::GetNicknameStringsFromCertList(
|
| + cert_request_info_->client_certs,
|
| + l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_CERT_EXPIRED),
|
| + l10n_util::GetStringUTF8(IDS_CERT_SELECTOR_CERT_NOT_YET_VALID),
|
| + &nicknames);
|
| +
|
| + DCHECK_EQ(nicknames.size(),
|
| + cert_request_info_->client_certs.size());
|
|
|
| for (size_t i = 0; i < cert_request_info_->client_certs.size(); ++i) {
|
| - CERTCertificate* cert =
|
| + net::X509Certificate::OSCertHandle cert =
|
| cert_request_info_->client_certs[i]->os_cert_handle();
|
|
|
| details_strings_.push_back(FormatDetailsText(cert));
|
|
|
| gtk_combo_box_append_text(
|
| GTK_COMBO_BOX(cert_combo_box_),
|
| - FormatComboBoxText(cert, nicknames->nicknames[i]).c_str());
|
| + FormatComboBoxText(cert, nicknames[i]).c_str());
|
| }
|
|
|
| - CERT_FreeNicknames(nicknames);
|
| - CERT_DestroyCertList(cert_list);
|
| -
|
| // Auto-select the first cert.
|
| gtk_combo_box_set_active(GTK_COMBO_BOX(cert_combo_box_), 0);
|
| }
|
| @@ -239,70 +223,57 @@ net::X509Certificate* SSLClientCertificateSelector::GetSelectedCert() {
|
|
|
| // static
|
| std::string SSLClientCertificateSelector::FormatComboBoxText(
|
| - CERTCertificate* cert, const char* nickname) {
|
| + net::X509Certificate::OSCertHandle cert, const std::string& nickname) {
|
| std::string rv(nickname);
|
| - char* serial_hex = CERT_Hexify(&cert->serialNumber, TRUE);
|
| rv += " [";
|
| - rv += serial_hex;
|
| + rv += x509_certificate_model::GetSerialNumberHexified(cert, "");
|
| rv += ']';
|
| - PORT_Free(serial_hex);
|
| return rv;
|
| }
|
|
|
| // static
|
| std::string SSLClientCertificateSelector::FormatDetailsText(
|
| - CERTCertificate* cert) {
|
| + net::X509Certificate::OSCertHandle cert) {
|
| std::string rv;
|
|
|
| - rv += l10n_util::GetStringFUTF8(IDS_CERT_SUBJECTNAME_FORMAT,
|
| - UTF8ToUTF16(cert->subjectName));
|
| + rv += l10n_util::GetStringFUTF8(
|
| + IDS_CERT_SUBJECTNAME_FORMAT,
|
| + UTF8ToUTF16(x509_certificate_model::GetSubjectName(cert)));;
|
|
|
| - char* serial_hex = CERT_Hexify(&cert->serialNumber, TRUE);
|
| rv += "\n ";
|
| - rv += l10n_util::GetStringFUTF8(IDS_CERT_SERIAL_NUMBER_FORMAT,
|
| - UTF8ToUTF16(serial_hex));
|
| - PORT_Free(serial_hex);
|
| + rv += l10n_util::GetStringFUTF8(
|
| + IDS_CERT_SERIAL_NUMBER_FORMAT,
|
| + UTF8ToUTF16(
|
| + x509_certificate_model::GetSerialNumberHexified(cert, "")));
|
|
|
| - PRTime issued, expires;
|
| - if (CERT_GetCertTimes(cert, &issued, &expires) == SECSuccess) {
|
| + base::Time issued, expires;
|
| + if (x509_certificate_model::GetTimes(cert, &issued, &expires)) {
|
| string16 issued_str = WideToUTF16(
|
| - base::TimeFormatShortDateAndTime(base::PRTimeToBaseTime(issued)));
|
| + base::TimeFormatShortDateAndTime(issued));
|
| string16 expires_str = WideToUTF16(
|
| - base::TimeFormatShortDateAndTime(base::PRTimeToBaseTime(expires)));
|
| + base::TimeFormatShortDateAndTime(expires));
|
| rv += "\n ";
|
| rv += l10n_util::GetStringFUTF8(IDS_CERT_VALIDITY_RANGE_FORMAT,
|
| issued_str, expires_str);
|
| }
|
|
|
| std::vector<std::string> usages;
|
| - psm::GetCertUsageStrings(cert, &usages);
|
| + x509_certificate_model::GetUsageStrings(cert, &usages);
|
| if (usages.size()) {
|
| rv += "\n ";
|
| rv += l10n_util::GetStringFUTF8(IDS_CERT_X509_EXTENDED_KEY_USAGE_FORMAT,
|
| UTF8ToUTF16(JoinString(usages, ',')));
|
| }
|
|
|
| - SECItem key_usage;
|
| - key_usage.data = NULL;
|
| - if (CERT_FindKeyUsageExtension(cert, &key_usage) == SECSuccess) {
|
| - std::string key_usage_str = psm::ProcessKeyUsageBitString(&key_usage, ',');
|
| - PORT_Free(key_usage.data);
|
| - if (!key_usage_str.empty()) {
|
| - rv += "\n ";
|
| - rv += l10n_util::GetStringFUTF8(IDS_CERT_X509_KEY_USAGE_FORMAT,
|
| - UTF8ToUTF16(key_usage_str));
|
| - }
|
| + std::string key_usage_str = x509_certificate_model::GetKeyUsageString(cert);
|
| + if (!key_usage_str.empty()) {
|
| + rv += "\n ";
|
| + rv += l10n_util::GetStringFUTF8(IDS_CERT_X509_KEY_USAGE_FORMAT,
|
| + UTF8ToUTF16(key_usage_str));
|
| }
|
|
|
| std::vector<std::string> email_addresses;
|
| - for (const char* addr = CERT_GetFirstEmailAddress(cert);
|
| - addr; addr = CERT_GetNextEmailAddress(cert, addr)) {
|
| - // The first email addr (from Subject) may be duplicated in Subject
|
| - // Alternative Name, so check subsequent addresses are not equal to the
|
| - // first one before adding to the list.
|
| - if (!email_addresses.size() || email_addresses[0] != addr)
|
| - email_addresses.push_back(addr);
|
| - }
|
| + x509_certificate_model::GetEmailAddresses(cert, &email_addresses);
|
| if (email_addresses.size()) {
|
| rv += "\n ";
|
| rv += l10n_util::GetStringFUTF8(
|
| @@ -311,10 +282,11 @@ std::string SSLClientCertificateSelector::FormatDetailsText(
|
| }
|
|
|
| rv += '\n';
|
| - rv += l10n_util::GetStringFUTF8(IDS_CERT_ISSUERNAME_FORMAT,
|
| - UTF8ToUTF16(cert->issuerName));
|
| + rv += l10n_util::GetStringFUTF8(
|
| + IDS_CERT_ISSUERNAME_FORMAT,
|
| + UTF8ToUTF16(x509_certificate_model::GetIssuerName(cert)));
|
|
|
| - string16 token(UTF8ToUTF16(psm::GetCertTokenName(cert)));
|
| + string16 token(UTF8ToUTF16(x509_certificate_model::GetTokenName(cert)));
|
| if (!token.empty()) {
|
| rv += '\n';
|
| rv += l10n_util::GetStringFUTF8(IDS_CERT_TOKEN_FORMAT, token);
|
|
|