blob: 92b03ba3d7e592342e88c869793aa5252efd7973 [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_localized_strings_provider.h"
#include "chrome/browser/ui/webui/plural_string_handler.h"
#include "chrome/browser/ui/webui/webui_util.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/browser_resources.h"
#include "chrome/grit/generated_resources.h"
#include "components/strings/grit/components_strings.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "chrome/browser/ui/webui/certificate_provisioning_ui_handler.h"
#include "chrome/browser/ui/webui/certificates_handler.h"
#include "components/user_manager/user_manager.h"
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
namespace {
const char kCRSLearnMoreLink[] =
"https://chromium.googlesource.com/chromium/src/+/main/net/data/ssl/"
"chrome_root_store/faq.md";
#if BUILDFLAG(IS_CHROMEOS_ASH)
void AddCertificateManagerStrings(content::WebUIDataSource* html_source) {
struct {
const char* name;
int id;
} localized_strings[] = {
{"cancel", IDS_CANCEL},
{"close", IDS_CLOSE},
{"edit", IDS_SETTINGS_EDIT},
{"moreActions", IDS_SETTINGS_MORE_ACTIONS},
{"ok", IDS_OK},
};
for (const auto& entry : localized_strings) {
html_source->AddLocalizedString(entry.name, entry.id);
}
certificate_manager::AddLocalizedStrings(html_source);
}
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if BUILDFLAG(CHROME_ROOT_STORE_CERT_MANAGEMENT_UI)
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},
{"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)
{"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},
{"certificateManagerV2CertHashCopyAriaLabel",
IDS_CERTIFICATE_MANAGER_V2_CERT_HASH_COPY_ARIA_LABEL},
};
html_source->AddLocalizedStrings(kLocalizedStrings);
}
#endif // BUILDFLAG(CHROME_ROOT_STORE_CERT_MANAGEMENT_UI)
} // 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::EnableTrustedTypesCSP(source);
webui::SetJSModuleDefaults(source);
#if BUILDFLAG(IS_CHROMEOS_ASH)
if (!base::FeatureList::IsEnabled(features::kEnableCertManagementUIV2)) {
// Serve the old certificate manager
AddCertificateManagerStrings(source);
source->UseStringsJs();
source->SetDefaultResource(IDR_CERT_MANAGER_DIALOG_HTML);
source->AddBoolean("isGuest",
user_manager::UserManager::Get()->IsLoggedInAsGuest() ||
user_manager::UserManager::Get()
->IsLoggedInAsManagedGuestSession());
source->AddBoolean(
"isKiosk", user_manager::UserManager::Get()->IsLoggedInAsAnyKioskApp());
web_ui->AddMessageHandler(
std::make_unique<certificate_manager::CertificatesHandler>());
web_ui->AddMessageHandler(
chromeos::cert_provisioning::CertificateProvisioningUiHandler::
CreateForProfile(profile));
}
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
BUILDFLAG(IS_CHROMEOS)
if (base::FeatureList::IsEnabled(features::kEnableCertManagementUIV2)) {
source->AddResourcePath("", IDR_CERT_MANAGER_DIALOG_V2_HTML);
AddCertificateManagerV2Strings(source);
source->AddString("crsLearnMoreUrl", kCRSLearnMoreLink);
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));
}
#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) ||
// BUILDFLAG(IS_CHROMEOS)
}
#if BUILDFLAG(CHROME_ROOT_STORE_CERT_MANAGEMENT_UI)
void CertificateManagerUI::BindInterface(
mojo::PendingReceiver<
certificate_manager_v2::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_v2::mojom::CertificateManagerPage>
client,
mojo::PendingReceiver<
certificate_manager_v2::mojom::CertificateManagerPageHandler> handler) {
certificate_manager_page_handler_ =
std::make_unique<CertificateManagerPageHandler>(
std::move(client), std::move(handler), Profile::FromWebUI(web_ui()),
web_ui()->GetWebContents());
}
#endif // BUILDFLAG(CHROME_ROOT_STORE_CERT_MANAGEMENT_UI)
CertificateManagerUI::~CertificateManagerUI() = default;
WEB_UI_CONTROLLER_TYPE_IMPL(CertificateManagerUI)