#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "chrome/browser/ui/webui/certificate_viewer_webui.h"
#include <memory>
#include <string_view>
#include <utility>
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/i18n/time_formatting.h"
#include "base/json/json_writer.h"
#include "base/memory/ptr_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "base/values.h"
#include "chrome/browser/certificate_viewer.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/ui/certificate_dialogs.h"
#include "chrome/browser/ui/webui/certificate_viewer_ui.h"
#include "chrome/browser/ui/webui/constrained_web_dialog_ui.h"
#include "chrome/common/net/x509_certificate_model.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/generated_resources.h"
#include "components/strings/grit/components_strings.h"
#include "content/public/browser/host_zoom_map.h"
#include "content/public/browser/web_contents.h"
#include "net/cert/x509_util.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/mojom/ui_base_types.mojom-shared.h"
#include "ui/gfx/geometry/size.h"
#if BUILDFLAG(USE_NSS_CERTS)
#include "chrome/common/net/x509_certificate_model_nss.h"
#include "net/cert/x509_util_nss.h"
#endif
WebContents;
WebUIMessageHandler;
namespace {
class CertNodeBuilder { … };
CertNodeBuilder::CertNodeBuilder(std::string_view label) { … }
CertNodeBuilder::CertNodeBuilder(int label_id)
: … { … }
CertNodeBuilder& CertNodeBuilder::Payload(std::string_view payload) { … }
CertNodeBuilder& CertNodeBuilder::Child(base::Value::Dict child) { … }
CertNodeBuilder& CertNodeBuilder::ChildIfNotNullopt(
std::optional<base::Value::Dict> child) { … }
base::Value::Dict CertNodeBuilder::Build() { … }
std::string HandleOptionalOrError(
const x509_certificate_model::OptionalStringOrError& s) { … }
std::string DialogArgsForCertList(
const std::vector<x509_certificate_model::X509CertificateModel>& certs) { … }
}
void ShowCertificateViewer(WebContents* web_contents,
gfx::NativeWindow parent,
net::X509Certificate* cert) { … }
#if !(BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC))
void ShowCertificateViewerForClientAuth(content::WebContents* web_contents,
gfx::NativeWindow parent,
net::X509Certificate* cert) { … }
#endif
#if BUILDFLAG(USE_NSS_CERTS)
CertificateViewerDialog* CertificateViewerDialog::ShowConstrained(
net::ScopedCERTCertificateList nss_certs,
WebContents* web_contents,
gfx::NativeWindow parent) { … }
#endif
CertificateViewerDialog* CertificateViewerDialog::ShowConstrained(
std::vector<bssl::UniquePtr<CRYPTO_BUFFER>> certs,
std::vector<std::string> cert_nicknames,
content::WebContents* web_contents,
gfx::NativeWindow parent) { … }
gfx::NativeWindow CertificateViewerDialog::GetNativeWebContentsModalDialog() { … }
CertificateViewerDialog::CertificateViewerDialog(
std::vector<bssl::UniquePtr<CRYPTO_BUFFER>> in_certs,
std::vector<std::string> cert_nicknames) { … }
CertificateViewerDialog::~CertificateViewerDialog() = default;
CertificateViewerDialogHandler::CertificateViewerDialogHandler(
CertificateViewerDialog* dialog,
std::vector<x509_certificate_model::X509CertificateModel> certs)
: … { … }
CertificateViewerDialogHandler::~CertificateViewerDialogHandler() { … }
void CertificateViewerDialogHandler::RegisterMessages() { … }
void CertificateViewerDialogHandler::HandleExportCertificate(
const base::Value::List& args) { … }
void CertificateViewerDialogHandler::HandleRequestCertificateFields(
const base::Value::List& args) { … }
int CertificateViewerDialogHandler::GetCertificateIndex(
int requested_index) const { … }