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 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763
|
// Copyright 2022 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/password_manager/password_manager_ui.h"
#include "base/i18n/message_formatter.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h"
#include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/extension_control_handler.h"
#include "chrome/browser/ui/webui/favicon_source.h"
#include "chrome/browser/ui/webui/managed_ui_handler.h"
#include "chrome/browser/ui/webui/page_not_available_for_guest/page_not_available_for_guest_ui.h"
#include "chrome/browser/ui/webui/password_manager/promo_card.h"
#include "chrome/browser/ui/webui/password_manager/promo_cards_handler.h"
#include "chrome/browser/ui/webui/password_manager/sync_handler.h"
#include "chrome/browser/ui/webui/plural_string_handler.h"
#include "chrome/browser/ui/webui/policy_indicator_localized_strings_provider.h"
#include "chrome/browser/ui/webui/sanitized_image_source.h"
#include "chrome/browser/ui/webui/settings/safety_hub_handler.h"
#include "chrome/browser/web_applications/web_app_helpers.h"
#include "chrome/browser/web_applications/web_app_provider.h"
#include "chrome/browser/web_applications/web_app_utils.h"
#include "chrome/common/url_constants.h"
#include "chrome/common/webui_url_constants.h"
#include "chrome/grit/branded_strings.h"
#include "chrome/grit/browser_resources.h"
#include "chrome/grit/chrome_unscaled_resources.h"
#include "chrome/grit/generated_resources.h"
#include "chrome/grit/password_manager_resources.h"
#include "chrome/grit/password_manager_resources_map.h"
#include "chrome/grit/theme_resources.h"
#include "components/favicon_base/favicon_url_parser.h"
#include "components/grit/components_scaled_resources.h"
#include "components/password_manager/core/browser/leak_detection_dialog_utils.h"
#include "components/password_manager/core/common/password_manager_constants.h"
#include "components/strings/grit/components_strings.h"
#include "content/public/browser/url_data_source.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui_data_source.h"
#include "device/fido/features.h"
#include "ui/base/accelerators/accelerator.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/webui/web_ui_util.h"
#include "ui/webui/webui_util.h"
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
#include "chrome/browser/ui/webui/settings/settings_security_key_handler.h"
#endif
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS)
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_process_platform_part.h"
#include "components/password_manager/core/browser/password_manager_util.h"
#endif
#if !BUILDFLAG(OPTIMIZE_WEBUI)
#include "chrome/grit/settings_shared_resources.h"
#include "chrome/grit/settings_shared_resources_map.h"
#endif
std::unique_ptr<content::WebUIController>
PasswordManagerUIConfig::CreateWebUIController(content::WebUI* web_ui,
const GURL& url) {
Profile* profile = Profile::FromWebUI(web_ui);
if (profile->IsGuestSession()) {
return std::make_unique<PageNotAvailableForGuestUI>(
web_ui, password_manager::kChromeUIPasswordManagerHost);
}
return std::make_unique<PasswordManagerUI>(web_ui);
}
namespace {
std::u16string InsertBrandedPasswordManager(int message_id) {
return l10n_util::GetStringFUTF16(
message_id,
l10n_util::GetStringUTF16(
IDS_PASSWORD_BUBBLES_PASSWORD_MANAGER_LINK_TEXT_SAVING_ON_DEVICE));
}
content::WebUIDataSource* CreateAndAddPasswordsUIHTMLSource(
Profile* profile,
content::WebUI* web_ui) {
content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd(
profile, password_manager::kChromeUIPasswordManagerHost);
webui::SetupWebUIDataSource(source, base::span(kPasswordManagerResources),
IDR_PASSWORD_MANAGER_PASSWORD_MANAGER_HTML);
#if !BUILDFLAG(OPTIMIZE_WEBUI)
source->AddResourcePaths(base::span(kSettingsSharedResources));
#endif
static const webui::LocalizedString kStrings[] = {
{"accountStorageToggleLabel",
IDS_PASSWORD_MANAGER_UI_ACCOUNT_STORAGE_WITH_PASSKEYS_TOGGLE_LABEL},
{"accountStorageToggleSubLabel",
IDS_PASSWORD_MANAGER_UI_ACCOUNT_STORAGE_TOGGLE_SUB_LABEL},
{"addPassword", IDS_PASSWORD_MANAGER_UI_ADD_PASSWORD_BUTTON},
{"addPasswordFooter", IDS_PASSWORD_MANAGER_UI_ADD_PASSWORD_FOOTNOTE},
{"addPasswordStoreOptionAccount",
IDS_PASSWORD_MANAGER_DESTINATION_DROPDOWN_SAVE_TO_ACCOUNT},
{"addPasswordStoreOptionDevice",
IDS_PASSWORD_MANAGER_DESTINATION_DROPDOWN_SAVE_TO_DEVICE},
{"addPasswordStorePickerA11yDescription",
IDS_PASSWORD_MANAGER_DESTINATION_DROPDOWN_ACCESSIBLE_NAME},
{"addPasswordTitle", IDS_PASSWORD_MANAGER_UI_ADD_PASSWORD},
{"addShortcut", IDS_PASSWORD_MANAGER_UI_ADD_SHORTCUT_TITLE},
{"alreadyChangedPasswordLink",
IDS_PASSWORD_MANAGER_UI_ALREADY_CHANGED_PASSWORD},
{"appsLabel", IDS_PASSWORD_MANAGER_UI_APPS_LABEL},
{"authTimedOut", IDS_PASSWORD_MANAGER_UI_AUTH_TIMED_OUT},
{"autosigninLabel", IDS_PASSWORD_MANAGER_UI_AUTOSIGNIN_TOGGLE_LABEL},
{"backToCheckup",
IDS_PASSWORD_MANAGER_UI_BACK_TO_CHECKUP_ARIA_DESCRIPTION},
{"backToPasswords",
IDS_PASSWORD_MANAGER_UI_BACK_TO_PASSWORDS_ARIA_DESCRIPTION},
{"blockedSitesDescription",
IDS_PASSWORD_MANAGER_UI_BLOCKED_SITES_DESCRIPTION},
{"blockedSitesTitle", IDS_PASSWORD_MANAGER_UI_BLOCKED_SITES_TITLE},
{"cancel", IDS_CANCEL},
{"changePassword", IDS_PASSWORD_MANAGER_UI_CHANGE_PASSWORD_BUTTON},
{"changePasswordAriaDescription",
IDS_PASSWORD_MANAGER_UI_CHANGE_PASSWORD_BUTTON_ARIA_DESCRIPTION},
{"changePasswordInApp", IDS_PASSWORD_MANAGER_UI_CHANGE_PASSWORD_IN_APP},
{"changePasswordManagerPin",
IDS_PASSWORD_MANAGER_UI_CHANGE_PASSWORD_MANAGER_PIN},
{"checkup", IDS_PASSWORD_MANAGER_UI_CHECKUP},
{"checkupCanceled", IDS_PASSWORD_MANAGER_UI_CHECKUP_CANCELED},
{"checkupErrorGeneric", IDS_PASSWORD_MANAGER_UI_CHECKUP_OTHER_ERROR},
{"checkupErrorNoPasswords", IDS_PASSWORD_MANAGER_UI_CHECKUP_NO_PASSWORDS},
{"checkupErrorOffline", IDS_PASSWORD_MANAGER_UI_CHECKUP_OFFLINE},
{"checkupErrorQuota", IDS_PASSWORD_MANAGER_UI_CHECKUP_QUOTA_LIMIT},
{"checkupErrorSignedOut", IDS_PASSWORD_MANAGER_UI_CHECKUP_SIGNED_OUT},
{"checkupResultGreen", IDS_PASSWORD_MANAGER_UI_CHECKUP_GREEN_STATE_A11Y},
{"checkupResultRed", IDS_PASSWORD_MANAGER_UI_CHECKUP_RED_STATE_A11Y},
{"checkupResultYellow",
IDS_PASSWORD_MANAGER_UI_CHECKUP_YELLOW_STATE_A11Y},
{"checkupProgress", IDS_PASSWORD_MANAGER_UI_CHECKUP_PROGRESS},
{"checkupTitle", IDS_PASSWORD_MANAGER_UI_CHECKUP_TITLE},
{"clearSearch", IDS_CLEAR_SEARCH},
{"close", IDS_CLOSE},
{"closePromoCardButtonAriaLabel",
IDS_PASSWORD_MANAGER_UI_CLOSE_PROMO_CARD_BUTTON_ARIA_LABEL},
{"columnHeadingConsider", IDS_SETTINGS_COLUMN_HEADING_CONSIDER},
{"columnHeadingWhenUsed", IDS_SETTINGS_COLUMN_HEADING_WHEN_USED},
{"compromisedPasswordsDescription",
IDS_PASSWORD_MANAGER_UI_COMPROMISED_PASSWORDS_DESCRIPTION},
{"compromisedPasswordsEmpty",
IDS_PASSWORD_MANAGER_UI_NO_COMPROMISED_PASSWORDS},
{"compromisedRowWithError",
IDS_PASSWORD_MANAGER_UI_CHECKUP_COMPROMISED_SECTION},
{"confirm", IDS_PASSWORD_MANAGER_UI_CONFIRM},
{"controlledByExtension", IDS_SETTINGS_CONTROLLED_BY_EXTENSION},
{"copyDisplayName", IDS_PASSWORD_MANAGER_UI_COPY_DISPLAY_NAME_LABEL},
{"copyPassword", IDS_PASSWORD_MANAGER_UI_COPY_PASSWORD},
{"copyUsername", IDS_PASSWORD_MANAGER_UI_COPY_USERNAME},
{"delete", IDS_DELETE},
{"deletePassword", IDS_DELETE},
{"deletePasskeyConfirmationDescription",
IDS_PASSWORD_MANAGER_UI_DELETE_PASSKEY_CONFIRMATION_DESCRIPTION},
{"deletePasskeyConfirmationTitle",
IDS_PASSWORD_MANAGER_UI_DELETE_PASSKEY_CONFIRMATION_TITLE},
{"deletePasswordConfirmationDescription",
IDS_PASSWORD_MANAGER_UI_DELETE_PASSWORD_CONFIRMATION_DESCRIPTION},
{"deletePasswordConfirmationTitle",
IDS_PASSWORD_MANAGER_UI_DELETE_PASSWORD_CONFIRMATION_TITLE},
{"deletePasswordDialogDevice",
IDS_PASSWORD_MANAGER_UI_DELETE_DIALOG_FROM_DEVICE_CHECKBOX_LABEL},
{"deletePasswordDialogBody", IDS_PASSWORD_MANAGER_UI_DELETE_DIALOG_BODY},
{"deletePasswordDialogAccount",
IDS_PASSWORD_MANAGER_UI_DELETE_DIALOG_FROM_ACCOUNT_CHECKBOX_LABEL},
{"deletePasswordDialogTitle",
IDS_PASSWORD_MANAGER_UI_DELETE_DIALOG_TITLE},
{"done", IDS_DONE},
{"disable", IDS_DISABLE},
{"disconnectCloudAuthenticatorButton",
IDS_PASSKEYS_MANAGER_UI_UNENROLL_BUTTON},
{"disconnectCloudAuthenticatorToastMessage",
IDS_PASSKEYS_MANAGER_UI_UNENROLL_TOAST_MESSAGE},
{"disconnectCloudAuthenticatorTitle",
IDS_PASSKEYS_MANAGER_UI_UNENROLL_TITLE},
{"disconnectCloudAuthenticatorDescription",
IDS_PASSKEYS_MANAGER_UI_UNENROLL_DESCRIPTION},
{"disconnectCloudAuthenticatorConfirmationDialogTitle",
IDS_PASSWORD_MANAGER_UI_DISCONNECT_CLOUD_AUTHENTICATOR_DIALOG_TITLE},
{"disconnectCloudAuthenticatorConfirmationDialogDescription",
IDS_PASSWORD_MANAGER_UI_DISCONNECT_CLOUD_AUTHENTICATOR_DIALOG_DESCRIPTION},
{"displayNameCopiedToClipboard",
IDS_PASSWORD_MANAGER_UI_DISPLAY_NAME_COPIED_TO_CLIPBOARD},
{"displayNameLabel", IDS_PASSWORD_MANAGER_UI_DISPLAY_NAME_LABEL},
{"displayNamePlaceholder",
IDS_PASSWORD_MANAGER_UI_DISPLAY_NAME_PLACEHOLDER},
{"downloadFile", IDS_PASSWORD_MANAGER_UI_DOWNLOAD_FILE},
{"downloadLinkShow", IDS_DOWNLOAD_LINK_SHOW},
{"edit", IDS_EDIT2},
{"editDisclaimerDescription",
IDS_PASSWORD_MANAGER_UI_EDIT_DISCLAIMER_DESCRIPTION},
{"editDisclaimerTitle", IDS_PASSWORD_MANAGER_UI_EDIT_DISCLAIMER_TITLE},
{"editPasskeyTitle", IDS_PASSWORD_MANAGER_UI_EDIT_PASSKEY},
{"editPassword", IDS_EDIT2},
{"editPasswordFootnote", IDS_PASSWORD_MANAGER_UI_PASSWORD_EDIT_FOOTNOTE},
{"editPasswordTitle", IDS_PASSWORD_MANAGER_UI_EDIT_PASSWORD},
{"emptyNote", IDS_PASSWORD_MANAGER_UI_NO_NOTE_ADDED},
{"emptyStateImportSyncing",
IDS_PASSWORD_MANAGER_UI_EMPTY_STATE_SYNCING_USERS},
{"emptyUsername", IDS_PASSWORD_MANAGER_UI_NO_USERNAME},
{"exportPasswords", IDS_PASSWORD_MANAGER_UI_EXPORT_TITLE},
{"exportPasswordsDescription",
IDS_PASSWORD_MANAGER_UI_EXPORT_BANNER_DESCRIPTION},
{"exportPasswordsFailTips",
IDS_PASSWORD_MANAGER_UI_EXPORTING_FAILURE_TIPS},
{"exportPasswordsFailTipsAnotherFolder",
IDS_PASSWORD_MANAGER_UI_EXPORTING_FAILURE_TIP_ANOTHER_FOLDER},
{"exportPasswordsFailTipsEnoughSpace",
IDS_PASSWORD_MANAGER_UI_EXPORTING_FAILURE_TIP_ENOUGH_SPACE},
{"exportPasswordsFailTitle",
IDS_PASSWORD_MANAGER_UI_EXPORTING_FAILURE_TITLE},
{"exportPasswordsTryAgain", IDS_PASSWORD_MANAGER_UI_EXPORT_TRY_AGAIN},
{"exportSuccessful", IDS_PASSWORD_MANAGER_UI_EXPORT_SUCCESSFUL},
{"federatedCredentialProviderAriaLabel",
IDS_PASSWORD_MANAGER_UI_FEDERATED_CREDENTIAL_ARIA_LABEL},
{"federationLabel", IDS_PASSWORD_MANAGER_UI_FEDERATION_LABEL},
{"fullResetDeleteAll", IDS_PASSWORD_MANAGER_UI_FULL_RESET_DELETE_ALL},
{"fullResetConfirm", IDS_PASSWORD_MANAGER_UI_FULL_RESET_CONFIRM},
{"fullResetSuccessToast",
IDS_PASSWORD_MANAGER_UI_FULL_RESET_SUCCESS_TOAST},
{"fullResetDomainsDisplayOne",
IDS_PASSWORD_MANAGER_UI_FULL_RESET_DOMAINS_DISPLAY_ONE},
{"fullResetDomainsDisplayTwo",
IDS_PASSWORD_MANAGER_UI_FULL_RESET_DOMAINS_DISPLAY_TWO},
{"gotIt", IDS_SETTINGS_GOT_IT},
{"help", IDS_PASSWORD_MANAGER_UI_HELP},
{"hidePassword", IDS_PASSWORD_MANAGER_UI_HIDE_PASSWORD},
{"hidePasswordA11yLabel", IDS_PASSWORD_MANAGER_UI_HIDE_PASSWORD_A11Y},
{"importPasswords", IDS_PASSWORD_MANAGER_UI_IMPORT_BANNER_TITLE},
{"importPasswordsCancel", IDS_PASSWORD_MANAGER_UI_IMPORT_CANCEL},
{"importPasswordsSkip", IDS_PASSWORD_MANAGER_UI_IMPORT_SKIP},
{"importPasswordsReplace", IDS_PASSWORD_MANAGER_UI_IMPORT_REPLACE},
{"importPasswordsAlreadyActive",
IDS_PASSWORD_MANAGER_UI_IMPORT_ALREADY_ACTIVE},
{"importPasswordsFileSizeExceeded",
IDS_PASSWORD_MANAGER_UI_IMPORT_FILE_SIZE_EXCEEDED},
{"importPasswordsUnknownError",
IDS_PASSWORD_MANAGER_UI_IMPORT_ERROR_UNKNOWN},
{"importPasswordsBadFormatError",
IDS_PASSWORD_MANAGER_UI_IMPORT_ERROR_BAD_FORMAT},
{"importPasswordsErrorTitle", IDS_PASSWORD_MANAGER_UI_IMPORT_ERROR_TITLE},
{"importPasswordsMissingPassword",
IDS_PASSWORD_MANAGER_UI_IMPORT_MISSING_PASSWORD},
{"importPasswordsMissingURL", IDS_PASSWORD_MANAGER_UI_IMPORT_MISSING_URL},
{"importPasswordsInvalidURL", IDS_PASSWORD_MANAGER_UI_IMPORT_INVALID_URL},
{"importPasswordsLongURL", IDS_PASSWORD_MANAGER_UI_IMPORT_LONG_URL},
{"importPasswordsLongPassword",
IDS_PASSWORD_MANAGER_UI_IMPORT_LONG_PASSWORD},
{"importPasswordsLongUsername",
IDS_PASSWORD_MANAGER_UI_IMPORT_LONG_USERNAME},
{"importPasswordsLongNote", IDS_PASSWORD_MANAGER_UI_IMPORT_LONG_NOTE},
{"importPasswordsConflictDevice",
IDS_PASSWORD_MANAGER_UI_IMPORT_CONFLICT_DEVICE},
{"importPasswordsConflictAccount",
IDS_PASSWORD_MANAGER_UI_IMPORT_CONFLICT_ACCOUNT},
{"importPasswordsCompleteTitle",
IDS_PASSWORD_MANAGER_UI_IMPORT_COMPLETE_TITLE},
{"importPasswordsSuccessTitle",
IDS_PASSWORD_MANAGER_UI_IMPORT_SUCCESS_TITLE},
{"importPasswordsSuccessTip", IDS_PASSWORD_MANAGER_UI_IMPORT_SUCCESS_TIP},
{"importPasswordsDeleteFileOption",
IDS_PASSWORD_MANAGER_UI_IMPORT_DELETE_FILE_OPTION},
{"importPasswordsDescriptionAccount",
IDS_PASSWORD_MANAGER_UI_IMPORT_DESCRIPTION_SYNCING_USERS},
{"importPasswordsSelectFile",
IDS_PASSWORD_MANAGER_UI_IMPORT_SELECT_FILE_DESCRIPTION},
{"importPasswordsStorePickerA11yDescription",
IDS_PASSWORD_MANAGER_UI_IMPORT_STORE_PICKER_ACCESSIBLE_NAME},
{"passwordsStoreOptionAccount",
IDS_PASSWORD_MANAGER_UI_STORE_PICKER_OPTION_ACCOUNT},
{"justNow", IDS_PASSWORD_MANAGER_UI_JUST_NOW},
{"leakedPassword", IDS_PASSWORD_MANAGER_UI_PASSWORD_LEAKED},
{"localPasswordManager",
IDS_PASSWORD_BUBBLES_PASSWORD_MANAGER_LINK_TEXT_SAVING_ON_DEVICE},
{"manage", IDS_SETTINGS_MANAGE},
#if BUILDFLAG(IS_WIN)
{"managePasskeysLabel", IDS_PASSWORD_MANAGER_UI_MANAGE_PASSKEYS_LABEL},
#elif BUILDFLAG(IS_MAC)
{"managePasskeysLabel",
IDS_PASSWORD_MANAGER_UI_MANAGE_PASSKEYS_FROM_PROFILE_LABEL},
#endif
{"menu", IDS_MENU},
{"menuButtonLabel", IDS_SETTINGS_MENU_BUTTON_LABEL},
{"missingTLD", IDS_PASSWORD_MANAGER_UI_MISSING_TLD},
{"moreActions", IDS_PASSWORD_MANAGER_UI_MORE_ACTIONS},
{"moreActionsAriaDescription",
IDS_PASSWORD_MANAGER_UI_MORE_ACTIONS_ARIA_DESCRIPTION},
{"movePasswordsButton", IDS_PASSWORD_MANAGER_UI_MOVE_PASSWORDS_BUTTON},
{"moveSinglePassword",
IDS_PASSWORD_MANAGER_UI_MOVE_SINGLE_PASSWORD_TO_ACCOUNT},
{"moveSinglePasswordTitle",
IDS_PASSWORD_MANAGER_UI_MOVE_SINGLE_PASSWORD_TITLE},
{"moveSinglePasswordDescription",
IDS_PASSWORD_MANAGER_UI_MOVE_SINGLE_PASSWORD_DESCRIPTION},
{"moveSinglePasswordButton",
IDS_PASSWORD_MANAGER_UI_MOVE_SINGLE_PASSWORD_ACTION_BUTTON},
{"movePasswordsDescription",
IDS_PASSWORD_MANAGER_UI_MOVE_PASSWORDS_DESCRIPTION},
{"movePasswordsInSettingsSubLabel",
IDS_PASSWORD_MANAGER_UI_MOVE_PASSWORDS_IN_SETTINGS_SUB_LABEL},
{"movePasswordsTitle", IDS_PASSWORD_MANAGER_UI_MOVE_PASSWORDS_TITLE},
{"muteCompromisedPassword", IDS_PASSWORD_MANAGER_UI_MUTE_ISSUE},
{"mutedCompromisedCredentials",
IDS_PASSWORD_MANAGER_UI_MUTED_COMPROMISED_PASSWORDS},
{"notValidWebsite", IDS_PASSWORD_MANAGER_UI_NOT_VALID_WEB_ADDRESS},
{"noteLabel", IDS_PASSWORD_MANAGER_UI_NOTE_LABEL},
{"noPasswordsFound", IDS_PASSWORD_MANAGER_UI_NO_PASSWORDS_FOUND},
{"opensInNewTab", IDS_PASSWORD_MANAGER_UI_OPENS_IN_NEW_TAB},
{"passkeyDeleted", IDS_PASSWORD_MANAGER_UI_PASSKEY_DELETED},
{"passkeyDetailsCardAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSKEY_DETAILS_CARD_ARIA_LABEL},
{"passkeyDetailsCardNoUsernameAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSKEY_DETAILS_CARD_NO_USERNAME_ARIA_LABEL},
{"passkeyDetailsCardEditButtonAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSKEY_DETAILS_CARD_EDIT_BUTTON_ARIA_LABEL},
{"passkeyDetailsCardEditButtonNoUsernameAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSKEY_DETAILS_CARD_EDIT_BUTTON_NO_USERNAME_ARIA_LABEL},
{"passkeyDetailsCardDeleteButtonAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSKEY_DETAILS_CARD_DELETE_BUTTON_ARIA_LABEL},
{"passkeyDetailsCardDeleteButtonNoUsernameAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSKEY_DETAILS_CARD_DELETE_BUTTON_NO_USERNAME_ARIA_LABEL},
{"passkeyManagementInfoLabel",
IDS_PASSWORD_MANAGER_UI_PASSKEY_MANAGEMENT_INFO_LABEL},
{"passkeyUpgradeSettingsToggleLabel",
IDS_PASSWORD_MANAGER_UI_PASSKEY_UPGRADE_TOGGLE_LABEL},
{"passkeyUpgradeSettingsToggleSubLabel",
IDS_PASSWORD_MANAGER_UI_PASSKEY_UPGRADE_TOGGLE_SUBLABEL},
{"passwordChangeSettingLabel", IDS_SETTINGS_PASSWORD_CHANGE_LABEL},
{"passwordChangeSettingSubLabel", IDS_SETTINGS_PASSWORD_CHANGE_SUBLABEL},
{"passwordChangeSettingDataBreach",
IDS_SETTINGS_PASSWORD_CHANGE_DATA_BREACH},
{"passwordChangeSettingWhereSaved",
IDS_SETTINGS_PASSWORD_CHANGE_WHERE_SAVED},
{"passwordChangeSettingExperimental",
IDS_SETTINGS_PASSWORD_CHANGE_EXPERIMENTAL},
{"passwordChangeSettingContent", IDS_SETTINGS_PASSWORD_CHANGE_CONTENT},
{"passwordChangeSettingEncryption",
IDS_SETTINGS_PASSWORD_CHANGE_ENCRYPTION},
{"passwordCopiedToClipboard",
IDS_PASSWORD_MANAGER_UI_PASSWORD_COPIED_TO_CLIPBOARD},
{"passwordDeleted", IDS_PASSWORD_MANAGER_UI_PASSWORD_DELETED},
{"passwordDetailsCardAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSWORD_DETAILS_CARD_ARIA_LABEL},
{"passwordDetailsCardEditButtonAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSWORD_DETAILS_CARD_EDIT_BUTTON_ARIA_LABEL},
{"passwordDetailsCardEditButtonNoUsernameAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSWORD_DETAILS_CARD_EDIT_BUTTON_NO_USERNAME_ARIA_LABEL},
{"passwordDetailsCardDeleteButtonAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSWORD_DETAILS_CARD_DELETE_BUTTON_ARIA_LABEL},
{"passwordDetailsCardDeleteButtonNoUsernameAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSWORD_DETAILS_CARD_DELETE_BUTTON_NO_USERNAME_ARIA_LABEL},
{"passwordLabel", IDS_PASSWORD_MANAGER_UI_PASSWORD_LABEL},
{"passwordManager",
IDS_PASSWORD_BUBBLES_PASSWORD_MANAGER_LINK_TEXT_SYNCED_TO_ACCOUNT},
// Header for the page, always "Password Manager".
{"passwordManagerDescription", IDS_PASSWORD_MANAGER_UI_DESCRIPTION},
{"passwordManagerPinChanged", IDS_PASSWORD_MANAGER_PIN_CHANGED},
{"passwordManagerString", IDS_PASSWORD_MANAGER_UI_TITLE},
// Page title, branded. "Google Password Manager" or "Password Manager"
// depending on the build.
{"passwordManagerTitle",
IDS_PASSWORD_BUBBLES_PASSWORD_MANAGER_LINK_TEXT_SAVING_ON_DEVICE},
{"passwordNoteCharacterCount",
IDS_PASSWORD_MANAGER_UI_NOTE_CHARACTER_COUNT},
{"passwordNoteCharacterCountWarning",
IDS_PASSWORD_MANAGER_UI_NOTE_CHARACTER_COUNT_WARNING},
{"passwordListAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSWORD_LIST_ARIA_LABEL},
{"passwords", IDS_PASSWORD_MANAGER_UI_PASSWORDS},
{"phishedAndLeakedPassword",
IDS_PASSWORD_MANAGER_UI_PASSWORD_PHISHED_AND_LEAKED},
{"phishedPassword", IDS_PASSWORD_MANAGER_UI_PASSWORD_PHISHED},
{"promoCardAriaLabel", IDS_PASSWORD_MANAGER_UI_PROMO_CARD_ARIA_LABEL},
{"removeBlockedAriaDescription",
IDS_PASSWORD_MANAGER_UI_REMOVE_BLOCKED_SITE_ARIA_DESCRIPTION},
{"reload", IDS_RELOAD},
{"reusedPasswordsDescription",
IDS_PASSWORD_MANAGER_UI_REUSED_PASSWORDS_DESCRIPTION},
{"reusedPasswordsEmpty", IDS_PASSWORD_MANAGER_UI_NO_REUSED_PASSWORDS},
{"reusedPasswordsTitle", IDS_PASSWORD_MANAGER_UI_HAS_REUSED_PASSWORDS},
{"runCheckupAriaDescription",
IDS_PASSWORD_MANAGER_UI_RUN_CHECKUP_ARIA_DESCRIPTION},
{"save", IDS_SAVE},
{"savePasswordsLabel",
IDS_PASSWORD_MANAGER_UI_SAVE_PASSWORDS_TOGGLE_LABEL},
{"share", IDS_PASSWORD_MANAGER_UI_SHARE},
{"shareDialogTitle", IDS_PASSWORD_MANAGER_UI_SHARE_DIALOG_TITLE},
{"shareDialogLoadingTitle",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_LOADING_TITLE},
{"shareDialogSuccessTitle",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_SUCCESS_TITLE},
{"shareDialogCanceledTitle",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_CANCELED_TITLE},
{"sharePasswordFamilyPickerDescription",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_FAMILY_PICKER_DESCRIPTION},
{"sharePasswordConfirmationDescriptionSingleRecipient",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_CONFIRMATION_DESCRIPTION_SINGLE},
{"sharePasswordConfirmationDescriptionMultipleRecipients",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_CONFIRMATION_DESCRIPTION_MULTIPLE},
{"sharePasswordConfirmationFooterWebsite",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_CONFIRMATION_FOOTER_WEBSITE},
{"sharePasswordConfirmationFooterAndroidApp",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_CONFIRMATION_FOOTER_ANDROID_APP},
{"sharePasswordViewFamily",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_VIEW_FAMILY},
{"sharePasswordMemeberUnavailable",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_MEMBER_UNAVAILABLE},
{"sharePasswordManagedByAdmin",
IDS_PASSWORD_MANAGER_UI_SHARING_IS_MANAGED_BY_ADMIN},
{"sharePasswordNotAvailable",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_NOT_AVAILABLE},
{"sharePasswordErrorDescription",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_ERROR_DESCRIPTION},
{"sharePasswordErrorTitle",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_ERROR_TITLE},
{"sharePasswordGotIt", IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_GOT_IT},
{"sharePasswordTryAgain",
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_TRY_AGAIN},
{"searchPrompt", IDS_PASSWORD_MANAGER_UI_SEARCH_PROMPT},
{"selectFile", IDS_PASSWORD_MANAGER_UI_SELECT_FILE},
{"settings", IDS_PASSWORD_MANAGER_UI_SETTINGS},
{"showMore", IDS_PASSWORD_MANAGER_UI_SHOW_MORE},
{"showPassword", IDS_PASSWORD_MANAGER_UI_SHOW_PASSWORD},
{"showPasswordA11yLabel", IDS_PASSWORD_MANAGER_UI_SHOW_PASSWORD_A11Y},
{"sitesAndAppsLabel", IDS_PASSWORD_MANAGER_UI_SITES_AND_APPS_LABEL},
{"sitesLabel", IDS_PASSWORD_MANAGER_UI_SITES_LABEL},
{"trustedVaultBannerLabelOfferOptIn",
IDS_PASSWORD_MANAGER_UI_TRUSTED_VAULT_OPT_IN_TITLE},
{"trustedVaultBannerSubLabelOfferOptIn",
IDS_PASSWORD_MANAGER_UI_TRUSTED_VAULT_OPT_IN_DESCRIPTION},
{"trustedVaultBannerLabelOptedIn",
IDS_PASSWORD_MANAGER_UI_TRUSTED_VAULT_OPTED_IN_TITLE},
{"trustedVaultBannerSubLabelOptedIn",
IDS_PASSWORD_MANAGER_UI_TRUSTED_VAULT_OPTED_IN_DESCRIPTION},
{"tryAgain", IDS_PASSWORD_MANAGER_UI_CHECK_PASSWORDS_AFTER_ERROR},
{"undoRemovePassword", IDS_PASSWORD_MANAGER_UI_UNDO},
{"unmuteCompromisedPassword", IDS_PASSWORD_MANAGER_UI_UNMUTE_ISSUE},
{"usernameAlreadyUsed", IDS_PASSWORD_MANAGER_UI_USERNAME_ALREADY_USED},
{"usernameCopiedToClipboard",
IDS_PASSWORD_MANAGER_UI_USERNAME_COPIED_TO_CLIPBOARD},
{"usernameLabel", IDS_PASSWORD_MANAGER_UI_USERNAME_LABEL},
{"usernamePlaceholder", IDS_PASSWORD_MANAGER_UI_USERNAME_PLACEHOLDER},
{"viewExistingPassword", IDS_PASSWORD_MANAGER_UI_VIEW_EXISTING_PASSWORD},
{"viewExistingPasswordAriaDescription",
IDS_PASSWORD_MANAGER_UI_VIEW_EXISTING_PASSWORD_ARIA_DESCRIPTION},
{"viewPasswordAriaDescription",
IDS_PASSWORD_MANAGER_UI_VIEW_PASSWORD_ARIA_DESCRIPTION},
{"viewPasswordsButton", IDS_PASSWORD_MANAGER_UI_IMPORT_VIEW_PASSWORDS},
{"weakPasswordsDescription",
IDS_PASSWORD_MANAGER_UI_WEAK_PASSWORDS_DESCRIPTION},
{"weakPasswordsEmpty", IDS_PASSWORD_MANAGER_UI_NO_WEAK_PASSWORDS},
{"weakPasswordsTitle", IDS_PASSWORD_MANAGER_UI_HAS_WEAK_PASSWORDS},
{"websiteLabel", IDS_PASSWORD_MANAGER_UI_WEBSITE_LABEL},
#if BUILDFLAG(IS_MAC)
{"biometricAuthenticationForFillingLabel",
IDS_PASSWORD_MANAGER_UI_BIOMETRIC_AUTHENTICATION_FOR_FILLING_TOGGLE_LABEL_MAC},
{"biometricAuthenticationForFillingSubLabel",
IDS_PASSWORD_MANAGER_UI_BIOMETRIC_AUTHENTICATION_FOR_FILLING_TOGGLE_SUBLABEL_MAC},
#elif BUILDFLAG(IS_WIN)
{"biometricAuthenticationForFillingLabel",
IDS_PASSWORD_MANAGER_UI_BIOMETRIC_AUTHENTICATION_FOR_FILLING_TOGGLE_LABEL_WIN},
{"biometricAuthenticationForFillingSubLabel",
IDS_PASSWORD_MANAGER_UI_BIOMETRIC_AUTHENTICATION_FOR_FILLING_TOGGLE_SUBLABEL_WIN},
#elif BUILDFLAG(IS_CHROMEOS)
{"biometricAuthenticationForFillingLabel",
IDS_PASSWORD_MANAGER_UI_BIOMETRIC_AUTHENTICATION_FOR_FILLING_TOGGLE_LABEL_CHROMEOS},
{"biometricAuthenticationForFillingSubLabel",
IDS_PASSWORD_MANAGER_UI_BIOMETRIC_AUTHENTICATION_FOR_FILLING_TOGGLE_SUBLABEL_CHROMEOS},
#endif
};
for (const auto& str : kStrings) {
webui::AddLocalizedString(source, str.name, str.id);
}
source->AddString(
"passwordsSectionDescription",
l10n_util::GetStringFUTF16(IDS_PASSWORD_MANAGER_UI_PASSWORDS_DESCRIPTION,
chrome::kPasswordManagerLearnMoreURL));
source->AddString(
"sharePasswordNotFamilyMember",
l10n_util::GetStringFUTF16(
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_NOT_FAMILY_MEMBER,
chrome::kFamilyGroupCreateURL));
source->AddString(
"sharePasswordNoOtherFamilyMembers",
l10n_util::GetStringFUTF16(
IDS_PASSWORD_MANAGER_UI_SHARE_PASSWORD_NO_OTHER_FAMILY_MEMBERS,
chrome::kFamilyGroupViewURL));
source->AddString("familyGroupViewURL", chrome::kFamilyGroupViewURL);
source->AddString(
"checkupUrl",
base::UTF8ToUTF16(
password_manager::GetPasswordCheckupURL(
password_manager::PasswordCheckupReferrer::kPasswordCheck)
.spec()));
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS)
source->AddBoolean("biometricAuthenticationForFillingToggleVisible",
password_manager_util::
ShouldBiometricAuthenticationForFillingToggleBeVisible(
g_browser_process->local_state()));
#endif
source->AddString("passwordSharingLearnMoreURL",
chrome::kPasswordSharingLearnMoreURL);
source->AddString("passwordSharingTroubleshootURL",
chrome::kPasswordSharingTroubleshootURL);
source->AddString("passwordManagerLearnMoreURL",
chrome::kPasswordManagerLearnMoreURL);
ui::Accelerator undo_accelerator(ui::VKEY_Z, ui::EF_PLATFORM_ACCELERATOR);
source->AddString("undoDescription", l10n_util::GetStringFUTF16(
IDS_UNDO_DESCRIPTION,
undo_accelerator.GetShortcutText()));
// Password details page timeouts in 5 minutes:
source->AddString(
"authTimedOutDescription",
base::i18n::MessageFormatter::FormatWithNumberedArgs(
l10n_util::GetStringUTF16(
IDS_PASSWORD_MANAGER_UI_AUTH_TIMED_OUT_DESCRIPTION),
l10n_util::GetStringUTF16(
IDS_PASSWORD_BUBBLES_PASSWORD_MANAGER_LINK_TEXT_SAVING_ON_DEVICE),
password_manager::constants::kPasswordManagerAuthValidity
.InMinutes()));
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
// Overwrite ubranded logo for Chrome-branded builds.
source->AddResourcePath("images/password_manager_logo.svg",
IDR_CHROME_PASSWORD_MANAGER_LOGO);
// This path is used in the manifest of the PasswordManager web app
// (chrome/browser/resources/password_manager/
// chrome_branded_manifest.webmanifest).
source->AddResourcePath("images/password_manager_pwa_icon.svg",
IDR_CHROME_PASSWORD_MANAGER_PWA_ICON);
#endif
source->AddString("trustedVaultOptInUrl", chrome::kSyncTrustedVaultOptInURL);
source->AddString("trustedVaultLearnMoreUrl",
chrome::kSyncTrustedVaultLearnMoreURL);
source->AddString("addShortcutDescription",
InsertBrandedPasswordManager(
IDS_PASSWORD_MANAGER_UI_ADD_SHORTCUT_DESCRIPTION));
source->AddString("autosigninDescription",
InsertBrandedPasswordManager(
IDS_PASSWORD_MANAGER_UI_AUTOSIGNIN_TOGGLE_DESC));
source->AddString(
"fullResetTitle",
InsertBrandedPasswordManager(IDS_PASSWORD_MANAGER_UI_FULL_RESET_TITLE));
source->AddString("fullResetRowDescription",
InsertBrandedPasswordManager(
IDS_PASSWORD_MANAGER_UI_FULL_RESET_DESCRIPTION));
source->AddString("fullResetConfirmationTitle",
InsertBrandedPasswordManager(
IDS_PASSWORD_MANAGER_UI_FULL_RESET_CONFIRMATION_TITLE));
source->AddString(
"fullResetConfirmationTitleLocal",
InsertBrandedPasswordManager(
IDS_PASSWORD_MANAGER_UI_FULL_RESET_CONFIRMATION_TITLE_LOCAL));
source->AddString(
"fullResetConfirmationDescription",
InsertBrandedPasswordManager(
IDS_PASSWORD_MANAGER_UI_FULL_RESET_CONFIRMATION_DESCIPTION));
source->AddString(
"emptyStateImportAccountStore",
InsertBrandedPasswordManager(
IDS_PASSWORD_MANAGER_UI_EMPTY_STATE_ACCOUNT_STORE_USERS));
source->AddString("emptyStateImportDevice",
InsertBrandedPasswordManager(
IDS_PASSWORD_MANAGER_UI_EMPTY_STATE_SIGNEDOUT_USERS));
source->AddString(
"importPasswordsGenericDescription",
InsertBrandedPasswordManager(
IDS_PASSWORD_MANAGER_UI_IMPORT_DESCRIPTION_ACCOUNT_STORE_USERS));
source->AddString(
"importPasswordsDescriptionDevice",
InsertBrandedPasswordManager(
IDS_PASSWORD_MANAGER_UI_IMPORT_DESCRIPTION_SIGNEDOUT_USERS));
source->AddString("importPasswordsConflictsDescription",
InsertBrandedPasswordManager(
IDS_PASSWORD_MANAGER_UI_IMPORT_CONFLICTS_DESCRIPTION));
source->AddString("passwordsStoreOptionDevice",
InsertBrandedPasswordManager(
IDS_PASSWORD_MANAGER_UI_STORE_PICKER_OPTION_DEVICE));
source->AddString(
"importPasswordsLimitExceeded",
l10n_util::GetStringFUTF16(
IDS_PASSWORD_MANAGER_UI_IMPORT_ERROR_LIMIT_EXCEEDED,
base::NumberToString16(
password_manager::constants::kMaxPasswordsPerCSVFile)));
source->AddString("importPasswordsHelpURL",
chrome::kPasswordManagerImportLearnMoreURL);
source->AddBoolean("canAddShortcut", web_app::AreWebAppsEnabled(profile));
source->AddBoolean(
"passkeyUpgradeSettingsToggleVisible",
base::FeatureList::IsEnabled(device::kWebAuthnPasskeyUpgrade));
content::URLDataSource::Add(
profile, std::make_unique<FaviconSource>(
profile, chrome::FaviconUrlFormat::kFavicon2));
return source;
}
void AddPluralStrings(content::WebUI* web_ui) {
// Add a handler to provide pluralized strings.
auto plural_string_handler = std::make_unique<PluralStringHandler>();
plural_string_handler->AddLocalizedString(
"checkedPasswords", IDS_PASSWORD_MANAGER_UI_CHECKUP_RESULT);
plural_string_handler->AddLocalizedString(
"checkingPasswords", IDS_PASSWORD_MANAGER_UI_CHECKUP_RUNNING_LABEL);
plural_string_handler->AddLocalizedString(
"compromisedPasswords",
IDS_PASSWORD_MANAGER_UI_COMPROMISED_PASSWORDS_COUNT);
plural_string_handler->AddLocalizedString(
"compromisedPasswordsTitle",
IDS_PASSWORD_MANAGER_UI_HAS_COMPROMISED_PASSWORDS);
plural_string_handler->AddLocalizedString(
"deviceOnlyPasswordsIconTooltip",
IDS_PASSWORD_MANAGER_UI_DEVICE_ONLY_PASSWORDS_ICON_TOOLTIP);
plural_string_handler->AddLocalizedString(
"fullResetDomainsDisplayTwoAndXMore",
IDS_PASSWORD_MANAGER_UI_FULL_RESET_DOMAINS_DISPLAY_TWO_AND_X_MORE);
plural_string_handler->AddLocalizedString(
"fullResetPasswordsCounter", IDS_PASSWORD_MANAGER_PASSWORDS_COUNTER);
plural_string_handler->AddLocalizedString(
"fullResetPasskeysCounter", IDS_PASSWORD_MANAGER_PASSKEYS_COUNTER);
plural_string_handler->AddLocalizedString(
"importPasswordsFailuresSummary",
IDS_PASSWORD_MANAGER_UI_IMPORT_FAILURES_SUMMARY);
plural_string_handler->AddLocalizedString(
"importPasswordsBadRowsFormat",
IDS_PASSWORD_MANAGER_UI_IMPORT_BAD_ROWS_FORMAT);
plural_string_handler->AddLocalizedString(
"importPasswordsSuccessSummaryAccount",
IDS_PASSWORD_MANAGER_UI_IMPORT_SUCCESS_SUMMARY_ACCOUNT);
plural_string_handler->AddLocalizedString(
"importPasswordsSuccessSummaryDevice",
IDS_PASSWORD_MANAGER_UI_IMPORT_SUCCESS_SUMMARY_DEVICE);
plural_string_handler->AddLocalizedString(
"importPasswordsConflictsTitle",
IDS_PASSWORD_MANAGER_UI_IMPORT_CONFLICTS_TITLE);
plural_string_handler->AddLocalizedString(
"numberOfAccounts", IDS_PASSWORD_MANAGER_UI_NUMBER_OF_ACCOUNTS);
plural_string_handler->AddLocalizedString(
"numberOfPasswordReuse",
IDS_PASSWORD_MANAGER_UI_NUMBER_OF_CREDENTIALS_WITH_REUSED_PASSWORD);
plural_string_handler->AddLocalizedString(
"reusedPasswords", IDS_PASSWORD_MANAGER_UI_REUSED_PASSWORDS_COUNT);
plural_string_handler->AddLocalizedString(
"weakPasswords", IDS_PASSWORD_MANAGER_UI_WEAK_PASSWORDS_COUNT);
plural_string_handler->AddLocalizedString(
"searchResults", IDS_PASSWORD_MANAGER_UI_SEARCH_RESULT);
plural_string_handler->AddLocalizedString(
"movePasswords", IDS_PASSWORD_MANAGER_UI_MOVE_PASSWORDS_TO_ACCOUNT);
plural_string_handler->AddLocalizedString(
"deviceOnlyListItemAriaLabel",
IDS_PASSWORD_MANAGER_UI_PASSWORD_LIST_ITEM_ARIA_LABEL);
plural_string_handler->AddLocalizedString(
"passwordsMovedToastMessage",
IDS_PASSWORD_MANAGER_UI_PASSWORD_MOVED_TOAST_MESSAGE);
web_ui->AddMessageHandler(std::move(plural_string_handler));
}
} // namespace
DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(PasswordManagerUI,
kSettingsMenuItemElementId);
DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(PasswordManagerUI, kAddShortcutElementId);
DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(PasswordManagerUI,
kOverflowMenuElementId);
DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(PasswordManagerUI,
kSharePasswordElementId);
DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(PasswordManagerUI,
kAccountStoreToggleElementId);
DEFINE_CLASS_CUSTOM_ELEMENT_EVENT_TYPE(PasswordManagerUI,
kAddShortcutCustomEventId);
PasswordManagerUI::PasswordManagerUI(content::WebUI* web_ui)
: ui::MojoWebUIController(web_ui, /*enable_chrome_send=*/true) {
// Set up the chrome://password-manager/ source.
Profile* profile = Profile::FromWebUI(web_ui);
passwords_private_delegate_ =
extensions::PasswordsPrivateDelegateFactory::GetForBrowserContext(profile,
true);
web_ui->AddMessageHandler(
std::make_unique<password_manager::SyncHandler>(profile));
web_ui->AddMessageHandler(std::make_unique<ExtensionControlHandler>());
web_ui->AddMessageHandler(std::make_unique<SafetyHubHandler>(profile));
web_ui->AddMessageHandler(
std::make_unique<password_manager::PromoCardsHandler>(profile));
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
web_ui->AddMessageHandler(std::make_unique<settings::PasskeysHandler>());
#endif
auto* source = CreateAndAddPasswordsUIHTMLSource(profile, web_ui);
policy_indicator::AddLocalizedStrings(source);
AddPluralStrings(web_ui);
ManagedUIHandler::Initialize(web_ui, source);
content::URLDataSource::Add(profile,
std::make_unique<SanitizedImageSource>(profile));
}
PasswordManagerUI::~PasswordManagerUI() = default;
// static
base::RefCountedMemory* PasswordManagerUI::GetFaviconResourceBytes(
ui::ResourceScaleFactor scale_factor) {
return static_cast<base::RefCountedMemory*>(
ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
IDR_PASSWORD_MANAGER_FAVICON, scale_factor));
}
WEB_UI_CONTROLLER_TYPE_IMPL(PasswordManagerUI)
void PasswordManagerUI::BindInterface(
mojo::PendingReceiver<help_bubble::mojom::HelpBubbleHandlerFactory>
pending_receiver) {
if (help_bubble_handler_factory_receiver_.is_bound()) {
help_bubble_handler_factory_receiver_.reset();
}
help_bubble_handler_factory_receiver_.Bind(std::move(pending_receiver));
}
void PasswordManagerUI::CreateHelpBubbleHandler(
mojo::PendingRemote<help_bubble::mojom::HelpBubbleClient> client,
mojo::PendingReceiver<help_bubble::mojom::HelpBubbleHandler> handler) {
help_bubble_handler_ = std::make_unique<user_education::HelpBubbleHandler>(
std::move(handler), std::move(client), this,
std::vector<ui::ElementIdentifier>{
PasswordManagerUI::kSettingsMenuItemElementId,
PasswordManagerUI::kAddShortcutElementId,
PasswordManagerUI::kSharePasswordElementId,
PasswordManagerUI::kAccountStoreToggleElementId,
PasswordManagerUI::kOverflowMenuElementId});
}
|