blob: c40f553c6156635752a95429abe22f20e75f6abb [file] [log] [blame]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/webui/certificate_manager/certificate_manager_ui.h"
#include <memory>
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/certificate_manager/certificate_manager_utils.h"
#include "chrome/browser/ui/webui/certificate_manager/client_cert_sources.h"
#include "chrome/browser/ui/webui/plural_string_handler.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/certificate_manager_resources.h"
#include "chrome/grit/certificate_manager_resources_map.h"
#include "chrome/grit/generated_resources.h"
#include "components/prefs/pref_service.h"
#include "components/strings/grit/components_strings.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
#include "ui/webui/webui_util.h"
#if BUILDFLAG(IS_CHROMEOS)
#include "chrome/browser/ui/webui/certificate_provisioning_ui_handler.h"
#include "components/user_manager/user_manager.h"
#endif // BUILDFLAG(IS_CHROMEOS)
namespace {
const char kCRSLearnMoreLink[] =
"https://chromium.googlesource.com/chromium/src/+/main/net/data/ssl/"
"chrome_root_store/faq.md";
void AddCertificateManagerV2Strings(content::WebUIDataSource* html_source) {
static constexpr webui::LocalizedString kLocalizedStrings[] = {
{"ok", IDS_OK},
{"cancel", IDS_CANCEL},
{"opensInNewTab", IDS_SETTINGS_OPENS_IN_NEW_TAB},
{"certificateManagerV2Title", IDS_SETTINGS_CERTIFICATE_MANAGER_V2_TITLE},
{"certificateManagerV2ClientCerts",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_CLIENT_CERTIFICATES},
{"certificateManagerV2ClientCertsDescription",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_CLIENT_CERTIFICATES_DESCRIPTION},
{"certificateManagerV2ClientCertsFromPlatform",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_CLIENT_CERTIFICATES_FROM_PLATFORM},
{"certificateManagerV2ClientCertsFromExtension",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_CLIENT_CERTIFICATES_FROM_EXTENSION},
{"certificateManagerV2ClientCertsFromAdmin",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_CLIENT_CERTIFICATES_FROM_ADMIN},
{"certificateManagerV2LocalCerts",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_LOCAL_CERTIFICATES},
{"certificateManagerV2LocalCertsDescription",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_LOCAL_CERTIFICATES_DESCRIPTION},
{"certificateManagerV2CRSCerts",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_CRS_CERTIFICATES},
{"certificateManagerV2CRSCertsDescription",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_CRS_CERTIFICATES_DESCRIPTION},
{"certificateManagerV2CRSLearnMoreLink",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_CRS_LEARN_MORE_LINK},
{"certificateManagerV2CRSLearnMoreLinkAriaLabel",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_CRS_LEARN_MORE_LINK_ARIA_LABEL},
{"certificateManagerV2HashCopiedToast",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_HASH_COPIED_TOAST},
{"certificateManagerV2AdminCertsTitle",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_ADMIN_CERTS_TITLE},
{"certificateManagerV2CustomCertsTitle",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_CUSTOM_CERTS_TITLE},
{"certificateManagerV2TrustedCertsList",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_TRUSTED_CERTS_LIST},
{"certificateManagerV2IntermediateCertsList",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_INTERMEDIATE_CERTS_LIST},
{"certificateManagerV2DistrustedCertsList",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_DISTRUSTED_CERTS_LIST},
{"certificateManagerV2NoCertificatesRow",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_NO_CERTIFICATES_ROW},
{"certificateManagerV2ExportButtonLabel",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_EXPORT_BUTTON_LABEL},
{"certificateManagerV2ExportButtonAriaLabel",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_EXPORT_BUTTON_ARIA_LABEL},
{"certificateManagerV2DeleteErrorTitle",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_DELETE_ERROR_TITLE},
{"certificateManagerV2ImportErrorTitle",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_IMPORT_ERROR_TITLE},
{"certificateManagerV2ImportButtonLabel",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_IMPORT_BUTTON_LABEL},
{"certificateManagerV2ImportButtonAriaLabel",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_IMPORT_BUTTON_ARIA_LABEL},
{"certificateManagerV2ImportAndBindButtonLabel",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_IMPORT_AND_BIND_BUTTON_LABEL},
{"certificateManagerV2ImportAndBindButtonAriaLabel",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_IMPORT_AND_BIND_BUTTON_ARIA_LABEL},
{"certificateManagerV2EnterPasswordTitle",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_ENTER_PASSWORD_TITLE},
{"certificateManagerV2PlatformCertsTitle",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_PLATFORM_CERTS_TITLE},
{"certificateManagerV2PlatformCertsToggleLabel",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_PLATFORM_CERTS_TOGGLE_LABEL},
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
{"certificateManagerV2PlatformCertsManageLink",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_PLATFORM_CERTS_MANAGE_LINK},
{"certificateManagerV2PlatformCertsManageLinkAriaDescription",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_PLATFORM_CERTS_MANAGE_LINK_ARIA_DESCRIPTION},
#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
#if BUILDFLAG(IS_CHROMEOS)
{"certificateProvisioningProcessId",
IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_PROCESS_ID},
{"certificateProvisioningListHeader",
IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_LIST_HEADER},
{"certificateProvisioningRefresh",
IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_REFRESH},
{"certificateProvisioningReset",
IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_RESET},
{"certificateProvisioningDetails",
IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_DETAILS},
{"certificateProvisioningAdvancedSectionTitle",
IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_ADVANCED},
{"certificateProvisioningProfileName",
IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_CERTIFICATE_PROFILE_NAME},
{"certificateProvisioningProfileId",
IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_CERTIFICATE_PROFILE_ID},
{"certificateProvisioningStatus",
IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_STATUS},
{"certificateProvisioningStatusId",
IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_STATUS_ID},
{"certificateProvisioningLastUpdate",
IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_LAST_UPDATE},
{"certificateProvisioningLastUnsuccessfulStatus",
IDS_SETTINGS_CERTIFICATE_MANAGER_PROVISIONING_LAST_UNSUCCESSFUL_STATUS},
{"certificateProvisioningPublicKey", IDS_CERT_DETAILS_SUBJECT_KEY},
// For ChromeOS provisioning UI
{"moreActions", IDS_SETTINGS_MORE_ACTIONS},
{"menu", IDS_MENU},
{"close", IDS_CLOSE},
#endif // BUILDFLAG(IS_CHROMEOS)
{"certificateManagerV2PlatformCertsViewLink",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_PLATFORM_CERTS_VIEW_LINK},
{"certificateManagerV2Platform",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_PLATFORM},
{"certificateManagerV2SubpageBackButtonAriaLabel",
IDS_CERTIFICATE_MANAGER_V2_SUBPAGE_BACK_BUTTON_ARIA_LABEL},
{"certificateManagerV2SubpageBackButtonAriaRoleDescription",
IDS_CERTIFICATE_MANAGER_V2_SUBPAGE_BACK_BUTTON_ARIA_ROLE_DESCRIPTION},
{"certificateManagerV2CertEntryViewAriaLabel",
IDS_CERTIFICATE_MANAGER_V2_CERT_ENTRY_VIEW_ARIA_LABEL},
{"certificateManagerV2CertEntryDeleteAriaLabel",
IDS_CERTIFICATE_MANAGER_V2_CERT_ENTRY_DELETE_ARIA_LABEL},
{"certificateManagerV2CertHashCopyAriaLabel",
IDS_CERTIFICATE_MANAGER_V2_CERT_HASH_COPY_ARIA_LABEL},
{"certificateManagerV2UserCertsTitle",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_USER_CERTS_TITLE},
{"certificateManagerV2ListExpandAriaLabel",
IDS_CERTIFICATE_MANAGER_V2_LIST_EXPAND_ARIA_LABEL},
};
html_source->AddLocalizedStrings(kLocalizedStrings);
}
} // namespace
CertificateManagerUI::CertificateManagerUI(content::WebUI* web_ui)
#if BUILDFLAG(IS_CHROMEOS)
: MojoWebDialogUI(web_ui) {
#else
: MojoWebUIController(web_ui, /*enable_chrome_send=*/true) {
#endif
Profile* profile = Profile::FromWebUI(web_ui);
content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd(
profile, chrome::kChromeUICertificateManagerHost);
webui::SetupWebUIDataSource(
source, kCertificateManagerResources,
IDR_CERTIFICATE_MANAGER_CERTIFICATE_MANAGER_DIALOG_HTML);
AddCertificateManagerV2Strings(source);
source->AddString("crsLearnMoreUrl", kCRSLearnMoreLink);
#if BUILDFLAG(IS_CHROMEOS)
ClientCertManagementAccessControls client_cert_policy(profile);
source->AddBoolean("clientCertImportAllowed",
client_cert_policy.IsManagementAllowed(
ClientCertManagementAccessControls::kSoftwareBacked));
source->AddBoolean("clientCertImportAndBindAllowed",
client_cert_policy.IsManagementAllowed(
ClientCertManagementAccessControls::kHardwareBacked));
web_ui->AddMessageHandler(
chromeos::cert_provisioning::CertificateProvisioningUiHandler::
CreateForProfile(profile));
#endif
auto plural_string_handler = std::make_unique<PluralStringHandler>();
plural_string_handler->AddLocalizedString(
"certificateManagerV2NumCerts",
IDS_SETTINGS_CERTIFICATE_MANAGER_V2_NUM_CERTS);
web_ui->AddMessageHandler(std::move(plural_string_handler));
PrefService* prefs = profile->GetPrefs();
source->AddBoolean("userCertsImportAllowed",
IsCACertificateManagementAllowed(*prefs));
}
void CertificateManagerUI::BindInterface(
mojo::PendingReceiver<
certificate_manager::mojom::CertificateManagerPageHandlerFactory>
pending_receiver) {
if (certificate_manager_handler_factory_receiver_.is_bound()) {
certificate_manager_handler_factory_receiver_.reset();
}
certificate_manager_handler_factory_receiver_.Bind(
std::move(pending_receiver));
}
void CertificateManagerUI::CreateCertificateManagerPageHandler(
mojo::PendingRemote<certificate_manager::mojom::CertificateManagerPage>
client,
mojo::PendingReceiver<
certificate_manager::mojom::CertificateManagerPageHandler> handler) {
certificate_manager_page_handler_ =
std::make_unique<CertificateManagerPageHandler>(
std::move(client), std::move(handler), Profile::FromWebUI(web_ui()),
web_ui()->GetWebContents());
}
CertificateManagerUI::~CertificateManagerUI() = default;
WEB_UI_CONTROLLER_TYPE_IMPL(CertificateManagerUI)