File: certificate_manager_ui.cc

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,811; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (222 lines) | stat: -rw-r--r-- 10,861 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
// 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/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/browser_resources.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"
#include "chrome/browser/ui/webui/certificate_manager/client_cert_sources.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::EnableTrustedTypesCSP(source);
  webui::SetJSModuleDefaults(source);

  source->AddResourcePath("", IDR_CERT_MANAGER_DIALOG_V2_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_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());
}

CertificateManagerUI::~CertificateManagerUI() = default;

WEB_UI_CONTROLLER_TYPE_IMPL(CertificateManagerUI)