| Index: chrome/browser/ui/webui/certificate_viewer_ui.cc
|
| diff --git a/chrome/browser/ui/webui/certificate_viewer_ui.cc b/chrome/browser/ui/webui/certificate_viewer_ui.cc
|
| index 57cf1dac98bdccbf415227f17babcca5cadf0f3a..c67f126171cc77dfb7ba82ab1fd728def66faf7c 100644
|
| --- a/chrome/browser/ui/webui/certificate_viewer_ui.cc
|
| +++ b/chrome/browser/ui/webui/certificate_viewer_ui.cc
|
| @@ -4,19 +4,12 @@
|
|
|
| #include "chrome/browser/ui/webui/certificate_viewer_ui.h"
|
|
|
| -#include "base/string_number_conversions.h"
|
| -#include "base/i18n/time_formatting.h"
|
| -#include "base/utf_string_conversions.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
|
| #include "chrome/browser/ui/webui/chrome_web_ui_data_source.h"
|
| #include "chrome/common/url_constants.h"
|
| -#include "chrome/common/net/x509_certificate_model.h"
|
| -#include "content/browser/cert_store.h"
|
| #include "grit/browser_resources.h"
|
| #include "grit/generated_resources.h"
|
| -#include "net/base/x509_certificate.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
|
|
| CertificateViewerUI::CertificateViewerUI(TabContents* contents)
|
| : HtmlDialogUI(contents) {
|
| @@ -25,14 +18,12 @@ CertificateViewerUI::CertificateViewerUI(TabContents* contents)
|
| ChromeWebUIDataSource* html_source =
|
| new ChromeWebUIDataSource(chrome::kChromeUICertificateViewerHost);
|
|
|
| - // Register callback handler to retrieve certificate information.
|
| - RegisterMessageCallback("requestCertificateInfo",
|
| - NewCallback(this, &CertificateViewerUI::RequestCertificateInfo));
|
| -
|
| // Localized strings.
|
| html_source->AddLocalizedString("general", IDS_CERT_INFO_GENERAL_TAB_LABEL);
|
| html_source->AddLocalizedString("details", IDS_CERT_INFO_DETAILS_TAB_LABEL);
|
| html_source->AddLocalizedString("close", IDS_CLOSE);
|
| + html_source->AddLocalizedString("export",
|
| + IDS_CERT_DETAILS_EXPORT_CERTIFICATE);
|
| html_source->AddLocalizedString("usages",
|
| IDS_CERT_INFO_VERIFIED_USAGES_GROUP);
|
| html_source->AddLocalizedString("issuedTo", IDS_CERT_INFO_SUBJECT_GROUP);
|
| @@ -71,259 +62,3 @@ CertificateViewerUI::CertificateViewerUI(TabContents* contents)
|
|
|
| CertificateViewerUI::~CertificateViewerUI() {
|
| }
|
| -
|
| -// TODO(flackr): This is duplicated from cookies_view_handler.cc
|
| -// Decodes a pointer from a hex string.
|
| -void* HexStringToPointer(const std::string& str) {
|
| - std::vector<uint8> buffer;
|
| - if (!base::HexStringToBytes(str, &buffer) ||
|
| - buffer.size() != sizeof(void*)) {
|
| - return NULL;
|
| - }
|
| -
|
| - return *reinterpret_cast<void**>(&buffer[0]);
|
| -}
|
| -
|
| -// Returns the certificate information of the requested certificate id from
|
| -// the CertStore to the javascript handler.
|
| -void CertificateViewerUI::RequestCertificateInfo(const ListValue* args) {
|
| - // The certificate id should be in the first argument.
|
| - std::string val;
|
| - if (!(args->GetString(0, &val))) {
|
| - return;
|
| - }
|
| - net::X509Certificate* cert = static_cast<net::X509Certificate*>(
|
| - HexStringToPointer(val));
|
| -
|
| - // Certificate information. The keys in this dictionary's general key
|
| - // correspond to the IDs in the Html page.
|
| - DictionaryValue cert_info;
|
| - net::X509Certificate::OSCertHandle cert_hnd = cert->os_cert_handle();
|
| -
|
| - // Get the certificate chain.
|
| - net::X509Certificate::OSCertHandles cert_chain;
|
| - x509_certificate_model::GetCertChainFromCert(cert_hnd, &cert_chain);
|
| -
|
| - // Certificate usage.
|
| - std::vector<std::string> usages;
|
| - x509_certificate_model::GetUsageStrings(cert_hnd, &usages);
|
| - std::string usagestr;
|
| - for (std::vector<std::string>::iterator it = usages.begin();
|
| - it != usages.end(); ++it) {
|
| - if (usagestr.length() > 0) {
|
| - usagestr += "\n";
|
| - }
|
| - usagestr += *it;
|
| - }
|
| - cert_info.SetString("general.usages", usagestr);
|
| -
|
| - // Standard certificate details.
|
| - const std::string alternative_text =
|
| - l10n_util::GetStringUTF8(IDS_CERT_INFO_FIELD_NOT_PRESENT);
|
| - cert_info.SetString("general.title", l10n_util::GetStringFUTF8(
|
| - IDS_CERT_INFO_DIALOG_TITLE, UTF8ToUTF16(x509_certificate_model::GetTitle(
|
| - cert_chain.front()))));
|
| -
|
| - // Issued to information.
|
| - cert_info.SetString("general.issued-cn",
|
| - x509_certificate_model::GetSubjectCommonName(cert_hnd, alternative_text));
|
| - cert_info.SetString("general.issued-o",
|
| - x509_certificate_model::GetSubjectOrgName(cert_hnd, alternative_text));
|
| - cert_info.SetString("general.issued-ou",
|
| - x509_certificate_model::GetSubjectOrgUnitName(cert_hnd,
|
| - alternative_text));
|
| - cert_info.SetString("general.issued-sn",
|
| - x509_certificate_model::GetSerialNumberHexified(cert_hnd,
|
| - alternative_text));
|
| -
|
| - // Issuer information.
|
| - cert_info.SetString("general.issuer-cn",
|
| - x509_certificate_model::GetIssuerCommonName(cert_hnd, alternative_text));
|
| - cert_info.SetString("general.issuer-o",
|
| - x509_certificate_model::GetIssuerOrgName(cert_hnd, alternative_text));
|
| - cert_info.SetString("general.issuer-ou",
|
| - x509_certificate_model::GetIssuerOrgUnitName(cert_hnd, alternative_text));
|
| -
|
| - // Validity period.
|
| - base::Time issued, expires;
|
| - std::string issued_str, expires_str;
|
| - if (x509_certificate_model::GetTimes(cert_hnd, &issued, &expires)) {
|
| - issued_str = UTF16ToUTF8(
|
| - base::TimeFormatShortDateNumeric(issued));
|
| - expires_str = UTF16ToUTF8(
|
| - base::TimeFormatShortDateNumeric(expires));
|
| - } else {
|
| - issued_str = alternative_text;
|
| - expires_str = alternative_text;
|
| - }
|
| - cert_info.SetString("general.issue-date", issued_str);
|
| - cert_info.SetString("general.expiry-date", expires_str);
|
| -
|
| - cert_info.SetString("general.sha256",
|
| - x509_certificate_model::HashCertSHA256(cert_hnd));
|
| - cert_info.SetString("general.sha1",
|
| - x509_certificate_model::HashCertSHA1(cert_hnd));
|
| -
|
| - // Certificate hierarchy is constructed from bottom up.
|
| - ListValue* children = NULL;
|
| - for (net::X509Certificate::OSCertHandles::const_iterator i =
|
| - cert_chain.begin(); i != cert_chain.end(); ++i) {
|
| - DictionaryValue* cert_node = new DictionaryValue();
|
| - ListValue cert_details;
|
| - cert_node->SetString("label", x509_certificate_model::GetTitle(*i).c_str());
|
| - cert_node->Set("payload.fields", GetCertificateFields(*i));
|
| - // Add the child from the previous iteration.
|
| - if (children)
|
| - cert_node->Set("children", children);
|
| -
|
| - // Add this node to the children list for the next iteration.
|
| - children = new ListValue();
|
| - children->Append(cert_node);
|
| - }
|
| - // Set the last node as the top of the certificate hierarchy.
|
| - cert_info.Set("hierarchy", children);
|
| -
|
| - // Send certificate information to javascript.
|
| - CallJavascriptFunction("cert_viewer.getCertificateInfo", cert_info);
|
| -}
|
| -
|
| -ListValue* CertificateViewerUI::GetCertificateFields(
|
| - net::X509Certificate::OSCertHandle cert) {
|
| - ListValue* root_list = new ListValue();
|
| - DictionaryValue* node_details;
|
| - DictionaryValue* alt_node_details;
|
| - ListValue* cert_sub_fields;
|
| - root_list->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label", x509_certificate_model::GetTitle(cert));
|
| -
|
| - ListValue* cert_fields;
|
| - node_details->Set("children", cert_fields = new ListValue());
|
| - cert_fields->Append(node_details = new DictionaryValue());
|
| -
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE));
|
| - node_details->Set("children", cert_fields = new ListValue());
|
| -
|
| - // Main certificate fields.
|
| - cert_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_VERSION));
|
| - std::string version = x509_certificate_model::GetVersion(cert);
|
| - if (!version.empty())
|
| - node_details->SetString("payload.val",
|
| - l10n_util::GetStringFUTF8(IDS_CERT_DETAILS_VERSION_FORMAT,
|
| - UTF8ToUTF16(version)));
|
| -
|
| - cert_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SERIAL_NUMBER));
|
| - node_details->SetString("payload.val",
|
| - x509_certificate_model::GetSerialNumberHexified(cert,
|
| - l10n_util::GetStringUTF8(IDS_CERT_INFO_FIELD_NOT_PRESENT)));
|
| -
|
| - cert_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_ALG));
|
| - node_details->SetString("payload.val",
|
| - x509_certificate_model::ProcessSecAlgorithmSignature(cert));
|
| -
|
| - cert_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_ISSUER));
|
| - node_details->SetString("payload.val",
|
| - x509_certificate_model::GetIssuerName(cert));
|
| -
|
| - // Validity period.
|
| - cert_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_VALIDITY));
|
| -
|
| - node_details->Set("children", cert_sub_fields = new ListValue());
|
| - cert_sub_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_NOT_BEFORE));
|
| - cert_sub_fields->Append(alt_node_details = new DictionaryValue());
|
| - alt_node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_NOT_AFTER));
|
| - base::Time issued, expires;
|
| - if (x509_certificate_model::GetTimes(cert, &issued, &expires)) {
|
| - node_details->SetString("payload.val",
|
| - UTF16ToUTF8(base::TimeFormatShortDateAndTime(issued)));
|
| - alt_node_details->SetString("payload.val",
|
| - UTF16ToUTF8(base::TimeFormatShortDateAndTime(expires)));
|
| - }
|
| -
|
| - cert_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT));
|
| - node_details->SetString("payload.val",
|
| - x509_certificate_model::GetSubjectName(cert));
|
| -
|
| - // Subject key information.
|
| - cert_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY_INFO));
|
| -
|
| - node_details->Set("children", cert_sub_fields = new ListValue());
|
| - cert_sub_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY_ALG));
|
| - node_details->SetString("payload.val",
|
| - x509_certificate_model::ProcessSecAlgorithmSubjectPublicKey(cert));
|
| - cert_sub_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY));
|
| - node_details->SetString("payload.val",
|
| - x509_certificate_model::ProcessSubjectPublicKeyInfo(cert));
|
| -
|
| - // Extensions.
|
| - x509_certificate_model::Extensions extensions;
|
| - x509_certificate_model::GetExtensions(
|
| - l10n_util::GetStringUTF8(IDS_CERT_EXTENSION_CRITICAL),
|
| - l10n_util::GetStringUTF8(IDS_CERT_EXTENSION_NON_CRITICAL),
|
| - cert, &extensions);
|
| -
|
| - if (!extensions.empty()) {
|
| - cert_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_EXTENSIONS));
|
| -
|
| - node_details->Set("children", cert_sub_fields = new ListValue());
|
| - for (x509_certificate_model::Extensions::const_iterator i =
|
| - extensions.begin(); i != extensions.end(); ++i) {
|
| - cert_sub_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label", i->name);
|
| - node_details->SetString("payload.val", i->value);
|
| - }
|
| - }
|
| -
|
| - cert_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_ALG));
|
| - node_details->SetString("payload.val",
|
| - x509_certificate_model::ProcessSecAlgorithmSignatureWrap(cert));
|
| -
|
| - cert_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_VALUE));
|
| - node_details->SetString("payload.val",
|
| - x509_certificate_model::ProcessRawBitsSignatureWrap(cert));
|
| -
|
| - cert_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_INFO_FINGERPRINTS_GROUP));
|
| - node_details->Set("children", cert_sub_fields = new ListValue());
|
| -
|
| - cert_sub_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_INFO_SHA256_FINGERPRINT_LABEL));
|
| - node_details->SetString("payload.val",
|
| - x509_certificate_model::HashCertSHA256(cert));
|
| - cert_sub_fields->Append(node_details = new DictionaryValue());
|
| - node_details->SetString("label",
|
| - l10n_util::GetStringUTF8(IDS_CERT_INFO_SHA1_FINGERPRINT_LABEL));
|
| - node_details->SetString("payload.val",
|
| - x509_certificate_model::HashCertSHA1(cert));
|
| - return root_list;
|
| -}
|
| -
|
|
|