1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/ui/webui/settings/settings_localized_strings_provider.h"
6 
7 #include <string>
8 
9 #include "base/command_line.h"
10 #include "base/feature_list.h"
11 #include "base/i18n/number_formatting.h"
12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/utf_string_conversions.h"
14 #include "base/win/windows_version.h"
15 #include "build/branding_buildflags.h"
16 #include "build/build_config.h"
17 #include "build/buildflag.h"
18 #include "chrome/browser/autofill/personal_data_manager_factory.h"
19 #include "chrome/browser/browser_process.h"
20 #include "chrome/browser/browser_process_platform_part.h"
21 #include "chrome/browser/chromeos/profiles/profile_helper.h"
22 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
23 #include "chrome/browser/profiles/profile.h"
24 #include "chrome/browser/profiles/profile_shortcut_manager.h"
25 #include "chrome/browser/signin/account_consistency_mode_manager.h"
26 #include "chrome/browser/sync/profile_sync_service_factory.h"
27 #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h"
28 #include "chrome/browser/ui/webui/management_ui.h"
29 #include "chrome/browser/ui/webui/policy_indicator_localized_strings_provider.h"
30 #include "chrome/browser/ui/webui/settings/shared_settings_localized_strings_provider.h"
31 #include "chrome/browser/ui/webui/webui_util.h"
32 #include "chrome/common/chrome_features.h"
33 #include "chrome/common/chrome_switches.h"
34 #include "chrome/common/url_constants.h"
35 #include "chrome/grit/chromium_strings.h"
36 #include "chrome/grit/generated_resources.h"
37 #include "chrome/grit/locale_settings.h"
38 #include "components/autofill/content/browser/content_autofill_driver.h"
39 #include "components/autofill/content/browser/content_autofill_driver_factory.h"
40 #include "components/autofill/core/browser/autofill_experiments.h"
41 #include "components/autofill/core/browser/autofill_manager.h"
42 #include "components/autofill/core/browser/payments/credit_card_access_manager.h"
43 #include "components/autofill/core/browser/payments/payments_service_url.h"
44 #include "components/autofill/core/browser/payments/payments_util.h"
45 #include "components/autofill/core/browser/personal_data_manager.h"
46 #include "components/autofill/core/browser/sync_utils.h"
47 #include "components/autofill/core/common/autofill_constants.h"
48 #include "components/autofill/core/common/autofill_features.h"
49 #include "components/autofill/core/common/autofill_payments_features.h"
50 #include "components/browsing_data/core/features.h"
51 #include "components/content_settings/core/common/features.h"
52 #include "components/dom_distiller/core/dom_distiller_features.h"
53 #include "components/google/core/common/google_util.h"
54 #include "components/omnibox/common/omnibox_features.h"
55 #include "components/password_manager/core/browser/leak_detection_dialog_utils.h"
56 #include "components/password_manager/core/browser/manage_passwords_referrer.h"
57 #include "components/password_manager/core/common/password_manager_features.h"
58 #include "components/safe_browsing/core/common/safe_browsing_prefs.h"
59 #include "components/signin/public/base/signin_buildflags.h"
60 #include "components/strings/grit/components_strings.h"
61 #include "components/subresource_filter/core/browser/subresource_filter_features.h"
62 #include "components/sync/driver/sync_service.h"
63 #include "components/sync/driver/sync_service_utils.h"
64 #include "components/sync/driver/sync_user_settings.h"
65 #include "components/zoom/page_zoom_constants.h"
66 #include "content/public/browser/web_contents.h"
67 #include "content/public/browser/web_ui_data_source.h"
68 #include "content/public/common/content_features.h"
69 #include "content/public/common/content_switches.h"
70 #include "device/fido/features.h"
71 #include "media/base/media_switches.h"
72 #include "net/base/url_util.h"
73 #include "services/device/public/cpp/device_features.h"
74 #include "third_party/blink/public/common/features.h"
75 #include "ui/accessibility/accessibility_switches.h"
76 #include "ui/base/accelerators/accelerator.h"
77 #include "ui/base/l10n/l10n_util.h"
78 #include "ui/base/webui/web_ui_util.h"
79 #include "ui/strings/grit/ui_strings.h"
80 
81 #if defined(OS_CHROMEOS)
82 #include "ash/public/cpp/ash_switches.h"
83 #include "base/system/sys_info.h"
84 #include "chrome/browser/chromeos/account_manager/account_manager_util.h"
85 #include "chrome/browser/chromeos/assistant/assistant_util.h"
86 #include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h"
87 #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h"
88 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h"
89 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.h"
90 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
91 #include "chrome/common/pref_names.h"
92 #include "chrome/common/webui_url_constants.h"
93 #include "chromeos/constants/chromeos_features.h"
94 #include "components/prefs/pref_service.h"
95 #include "components/user_manager/user_manager.h"
96 #include "ui/chromeos/devicetype_utils.h"
97 #else
98 #include "chrome/browser/ui/webui/settings/system_handler.h"
99 #endif
100 
101 #if defined(OS_WIN)
102 #include "chrome/browser/safe_browsing/chrome_cleaner/srt_field_trial_win.h"
103 #include "device/fido/win/webauthn_api.h"
104 
105 #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
106 #include "base/metrics/field_trial_params.h"
107 #include "base/strings/strcat.h"
108 #include "chrome/grit/chrome_unscaled_resources.h"
109 #include "ui/base/resource/resource_bundle.h"
110 #endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
111 #endif  // defined(OS_WIN)
112 
113 #if defined(USE_NSS_CERTS)
114 #include "chrome/browser/ui/webui/certificate_manager_localized_strings_provider.h"
115 #endif
116 namespace settings {
117 namespace {
118 
119 #if defined(OS_CHROMEOS)
120 // Generates a Google Help URL which includes a "board type" parameter. Some
121 // help pages need to be adjusted depending on the type of CrOS device that is
122 // accessing the page.
GetHelpUrlWithBoard(const std::string & original_url)123 base::string16 GetHelpUrlWithBoard(const std::string& original_url) {
124   return base::ASCIIToUTF16(original_url +
125                             "&b=" + base::SysInfo::GetLsbReleaseBoard());
126 }
127 #endif
128 
AddCommonStrings(content::WebUIDataSource * html_source,Profile * profile)129 void AddCommonStrings(content::WebUIDataSource* html_source, Profile* profile) {
130   static constexpr webui::LocalizedString kLocalizedStrings[] = {
131     {"add", IDS_ADD},
132     {"advancedPageTitle", IDS_SETTINGS_ADVANCED},
133     {"back", IDS_ACCNAME_BACK},
134     {"basicPageTitle", IDS_SETTINGS_BASIC},
135     {"cancel", IDS_CANCEL},
136     {"clear", IDS_SETTINGS_CLEAR},
137     {"close", IDS_CLOSE},
138     {"confirm", IDS_CONFIRM},
139     {"continue", IDS_SETTINGS_CONTINUE},
140     {"controlledByExtension", IDS_SETTINGS_CONTROLLED_BY_EXTENSION},
141     {"custom", IDS_SETTINGS_CUSTOM},
142     {"delete", IDS_SETTINGS_DELETE},
143     {"disable", IDS_DISABLE},
144     {"done", IDS_DONE},
145     {"edit", IDS_SETTINGS_EDIT},
146     {"extensionsLinkTooltip", IDS_SETTINGS_MENU_EXTENSIONS_LINK_TOOLTIP},
147     {"learnMore", IDS_LEARN_MORE},
148     {"menu", IDS_MENU},
149     {"menuButtonLabel", IDS_SETTINGS_MENU_BUTTON_LABEL},
150     {"moreActions", IDS_SETTINGS_MORE_ACTIONS},
151     {"ok", IDS_OK},
152     {"restart", IDS_SETTINGS_RESTART},
153 #if !defined(OS_CHROMEOS)
154     {"restartToApplyChanges", IDS_SETTINGS_RESTART_TO_APPLY_CHANGES},
155 #endif
156     {"retry", IDS_SETTINGS_RETRY},
157     {"save", IDS_SAVE},
158     {"searchResultBubbleText", IDS_SEARCH_RESULT_BUBBLE_TEXT},
159     {"searchResultsBubbleText", IDS_SEARCH_RESULTS_BUBBLE_TEXT},
160     {"sentenceEnd", IDS_SENTENCE_END},
161     {"settings", IDS_SETTINGS_SETTINGS},
162     {"settingsAltPageTitle", IDS_SETTINGS_ALT_PAGE_TITLE},
163     {"subpageArrowRoleDescription", IDS_SETTINGS_SUBPAGE_BUTTON},
164     {"notValid", IDS_SETTINGS_NOT_VALID},
165     {"notValidWebAddress", IDS_SETTINGS_NOT_VALID_WEB_ADDRESS},
166     {"notValidWebAddressForContentType",
167      IDS_SETTINGS_NOT_VALID_WEB_ADDRESS_FOR_CONTENT_TYPE},
168 
169     // Common font related strings shown in a11y and appearance sections.
170     {"quickBrownFox", IDS_SETTINGS_QUICK_BROWN_FOX},
171     {"verySmall", IDS_SETTINGS_VERY_SMALL_FONT},
172     {"small", IDS_SETTINGS_SMALL_FONT},
173     {"medium", IDS_SETTINGS_MEDIUM_FONT},
174     {"large", IDS_SETTINGS_LARGE_FONT},
175     {"veryLarge", IDS_SETTINGS_VERY_LARGE_FONT},
176   };
177   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
178 
179   html_source->AddBoolean(
180       "isGuest",
181 #if defined(OS_CHROMEOS)
182       user_manager::UserManager::Get()->IsLoggedInAsGuest() ||
183           user_manager::UserManager::Get()->IsLoggedInAsPublicAccount());
184 #else
185       profile->IsOffTheRecord());
186 #endif
187 
188   html_source->AddBoolean("isSupervised", profile->IsSupervised());
189 }
190 
AddA11yStrings(content::WebUIDataSource * html_source)191 void AddA11yStrings(content::WebUIDataSource* html_source) {
192   static constexpr webui::LocalizedString kLocalizedStrings[] = {
193     {"moreFeaturesLink", IDS_SETTINGS_MORE_FEATURES_LINK},
194     {"a11yPageTitle", IDS_SETTINGS_ACCESSIBILITY},
195     {"a11yWebStore", IDS_SETTINGS_ACCESSIBILITY_WEB_STORE},
196     {"moreFeaturesLinkDescription",
197      IDS_SETTINGS_MORE_FEATURES_LINK_DESCRIPTION},
198     {"accessibleImageLabelsTitle", IDS_SETTINGS_ACCESSIBLE_IMAGE_LABELS_TITLE},
199     {"accessibleImageLabelsSubtitle",
200      IDS_SETTINGS_ACCESSIBLE_IMAGE_LABELS_SUBTITLE},
201     {"settingsSliderRoleDescription",
202      IDS_SETTINGS_SLIDER_MIN_MAX_ARIA_ROLE_DESCRIPTION},
203     {"captionsEnableLiveCaptionTitle",
204      IDS_SETTINGS_CAPTIONS_ENABLE_LIVE_CAPTION_TITLE},
205     {"captionsEnableLiveCaptionSubtitle",
206      IDS_SETTINGS_CAPTIONS_ENABLE_LIVE_CAPTION_SUBTITLE},
207 #if defined(OS_CHROMEOS)
208     {"manageAccessibilityFeatures",
209      IDS_SETTINGS_ACCESSIBILITY_MANAGE_ACCESSIBILITY_FEATURES},
210     {"androidAppsManageAppLinks", IDS_SETTINGS_ANDROID_APPS_MANAGE_APP_LINKS},
211 #endif
212   };
213   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
214 
215 #if defined(OS_WIN)
216   html_source->AddBoolean("isWindows10OrNewer",
217                           base::win::GetVersion() >= base::win::Version::WIN10);
218 #endif
219   html_source->AddBoolean(
220       "showExperimentalA11yLabels",
221       base::FeatureList::IsEnabled(features::kExperimentalAccessibilityLabels));
222 
223   html_source->AddBoolean("enableLiveCaption",
224                           base::FeatureList::IsEnabled(media::kLiveCaption));
225 
226   AddCaptionSubpageStrings(html_source);
227 }
228 
AddAboutStrings(content::WebUIDataSource * html_source,Profile * profile)229 void AddAboutStrings(content::WebUIDataSource* html_source, Profile* profile) {
230   // Top level About Page strings.
231   static constexpr webui::LocalizedString kLocalizedStrings[] = {
232     {"aboutProductLogoAlt", IDS_SHORT_PRODUCT_LOGO_ALT_TEXT},
233 #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
234     {"aboutReportAnIssue", IDS_SETTINGS_ABOUT_PAGE_REPORT_AN_ISSUE},
235 #endif
236     {"aboutRelaunch", IDS_SETTINGS_ABOUT_PAGE_RELAUNCH},
237     {"aboutUpgradeCheckStarted", IDS_SETTINGS_ABOUT_UPGRADE_CHECK_STARTED},
238     {"aboutUpgradeRelaunch", IDS_SETTINGS_UPGRADE_SUCCESSFUL_RELAUNCH},
239     {"aboutUpgradeUpdating", IDS_SETTINGS_UPGRADE_UPDATING},
240     {"aboutUpgradeUpdatingPercent", IDS_SETTINGS_UPGRADE_UPDATING_PERCENT},
241     {"aboutGetHelpUsingChrome", IDS_SETTINGS_GET_HELP_USING_CHROME},
242     {"aboutPageTitle", IDS_SETTINGS_ABOUT_PROGRAM},
243     {"aboutProductTitle", IDS_PRODUCT_NAME},
244 #if defined(OS_CHROMEOS)
245     {"aboutUpdateOsSettingsLink",
246      IDS_SETTINGS_ABOUT_SEE_OS_SETTINGS_FOR_UPDATE_MESSAGE},
247 #endif
248   };
249   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
250 
251   html_source->AddString("managementPage",
252                          ManagementUI::GetManagementPageSubtitle(profile));
253   html_source->AddString(
254       "aboutUpgradeUpToDate",
255 #if defined(OS_CHROMEOS)
256       ui::SubstituteChromeOSDeviceType(IDS_SETTINGS_UPGRADE_UP_TO_DATE));
257 #else
258       l10n_util::GetStringUTF16(IDS_SETTINGS_UPGRADE_UP_TO_DATE));
259 #endif
260 }
261 
AddAppearanceStrings(content::WebUIDataSource * html_source,Profile * profile)262 void AddAppearanceStrings(content::WebUIDataSource* html_source,
263                           Profile* profile) {
264   static constexpr webui::LocalizedString kLocalizedStrings[] = {
265     {"appearancePageTitle", IDS_SETTINGS_APPEARANCE},
266     {"customWebAddress", IDS_SETTINGS_CUSTOM_WEB_ADDRESS},
267     {"enterCustomWebAddress", IDS_SETTINGS_ENTER_CUSTOM_WEB_ADDRESS},
268     {"homeButtonDisabled", IDS_SETTINGS_HOME_BUTTON_DISABLED},
269     {"themes", IDS_SETTINGS_THEMES},
270     {"chromeColors", IDS_SETTINGS_CHROME_COLORS},
271     {"showHomeButton", IDS_SETTINGS_SHOW_HOME_BUTTON},
272     {"showBookmarksBar", IDS_SETTINGS_SHOW_BOOKMARKS_BAR},
273     {"homePageNtp", IDS_SETTINGS_HOME_PAGE_NTP},
274     {"changeHomePage", IDS_SETTINGS_CHANGE_HOME_PAGE},
275     {"themesGalleryUrl", IDS_THEMES_GALLERY_URL},
276     {"chooseFromWebStore", IDS_SETTINGS_WEB_STORE},
277     {"pageZoom", IDS_SETTINGS_PAGE_ZOOM_LABEL},
278     {"fontSize", IDS_SETTINGS_FONT_SIZE_LABEL},
279     {"customizeFonts", IDS_SETTINGS_CUSTOMIZE_FONTS},
280     {"fonts", IDS_SETTINGS_FONTS},
281     {"standardFont", IDS_SETTINGS_STANDARD_FONT_LABEL},
282     {"serifFont", IDS_SETTINGS_SERIF_FONT_LABEL},
283     {"sansSerifFont", IDS_SETTINGS_SANS_SERIF_FONT_LABEL},
284     {"fixedWidthFont", IDS_SETTINGS_FIXED_WIDTH_FONT_LABEL},
285     {"minimumFont", IDS_SETTINGS_MINIMUM_FONT_SIZE_LABEL},
286     {"tiny", IDS_SETTINGS_TINY_FONT_SIZE},
287     {"huge", IDS_SETTINGS_HUGE_FONT_SIZE},
288 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
289     {"systemTheme", IDS_SETTINGS_SYSTEM_THEME},
290     {"useSystemTheme", IDS_SETTINGS_USE_SYSTEM_THEME},
291     {"classicTheme", IDS_SETTINGS_CLASSIC_THEME},
292     {"useClassicTheme", IDS_SETTINGS_USE_CLASSIC_THEME},
293     {"showWindowDecorations", IDS_SHOW_WINDOW_DECORATIONS},
294 #else
295     {"resetToDefaultTheme", IDS_SETTINGS_RESET_TO_DEFAULT_THEME},
296 #endif
297 #if defined(OS_MACOSX)
298     {"tabsToLinks", IDS_SETTINGS_TABS_TO_LINKS_PREF},
299     {"warnBeforeQuitting", IDS_SETTINGS_WARN_BEFORE_QUITTING_PREF},
300 #endif
301     {"readerMode", IDS_SETTINGS_READER_MODE},
302     {"readerModeDescription", IDS_SETTINGS_READER_MODE_DESCRIPTION},
303   };
304   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
305 
306   html_source->AddString("presetZoomFactors",
307                          zoom::GetPresetZoomFactorsAsJSON());
308   html_source->AddBoolean("showReaderModeOption",
309                           dom_distiller::OfferReaderModeInSettings());
310 }
311 
AddClearBrowsingDataStrings(content::WebUIDataSource * html_source,Profile * profile)312 void AddClearBrowsingDataStrings(content::WebUIDataSource* html_source,
313                                  Profile* profile) {
314   static constexpr webui::LocalizedString kLocalizedStrings[] = {
315       {"clearTimeRange", IDS_SETTINGS_CLEAR_PERIOD_TITLE},
316       {"clearBrowsingDataWithSync", IDS_SETTINGS_CLEAR_BROWSING_DATA_WITH_SYNC},
317       {"clearBrowsingDataWithSyncError",
318        IDS_SETTINGS_CLEAR_BROWSING_DATA_WITH_SYNC_ERROR},
319       {"clearBrowsingDataWithSyncPassphraseError",
320        IDS_SETTINGS_CLEAR_BROWSING_DATA_WITH_SYNC_PASSPHRASE_ERROR},
321       {"clearBrowsingDataWithSyncPaused",
322        IDS_SETTINGS_CLEAR_BROWSING_DATA_WITH_SYNC_PAUSED},
323       {"clearBrowsingHistory", IDS_SETTINGS_CLEAR_BROWSING_HISTORY},
324       {"clearBrowsingHistorySummary",
325        IDS_SETTINGS_CLEAR_BROWSING_HISTORY_SUMMARY},
326       {"clearDownloadHistory", IDS_SETTINGS_CLEAR_DOWNLOAD_HISTORY},
327       {"clearCache", IDS_SETTINGS_CLEAR_CACHE},
328       {"clearCookies", IDS_SETTINGS_CLEAR_COOKIES},
329       {"clearCookiesSummary",
330        IDS_SETTINGS_CLEAR_COOKIES_AND_SITE_DATA_SUMMARY_BASIC},
331       {"clearCookiesSummarySignedIn",
332        IDS_SETTINGS_CLEAR_COOKIES_AND_SITE_DATA_SUMMARY_BASIC_WITH_EXCEPTION},
333       {"clearCookiesCounter", IDS_DEL_COOKIES_COUNTER},
334       {"clearCookiesFlash", IDS_SETTINGS_CLEAR_COOKIES_FLASH},
335       {"clearPasswords", IDS_SETTINGS_CLEAR_PASSWORDS},
336       {"clearFormData", IDS_SETTINGS_CLEAR_FORM_DATA},
337       {"clearHostedAppData", IDS_SETTINGS_CLEAR_HOSTED_APP_DATA},
338       {"clearPeriodHour", IDS_SETTINGS_CLEAR_PERIOD_HOUR},
339       {"clearPeriod24Hours", IDS_SETTINGS_CLEAR_PERIOD_24_HOURS},
340       {"clearPeriod7Days", IDS_SETTINGS_CLEAR_PERIOD_7_DAYS},
341       {"clearPeriod4Weeks", IDS_SETTINGS_CLEAR_PERIOD_FOUR_WEEKS},
342       {"clearPeriodEverything", IDS_SETTINGS_CLEAR_PERIOD_EVERYTHING},
343       {"historyDeletionDialogTitle",
344        IDS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_TITLE},
345       {"historyDeletionDialogOK", IDS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_OK},
346       {"installedAppsConfirm", IDS_SETTINGS_CLEAR_INSTALLED_APPS_DATA_CONFIRM},
347       {"installedAppsTitle", IDS_SETTINGS_CLEAR_INSTALLED_APPS_DATA_TITLE},
348       {"notificationWarning", IDS_SETTINGS_NOTIFICATION_WARNING},
349   };
350 
351   html_source->AddString(
352       "clearBrowsingHistorySummarySignedIn",
353       l10n_util::GetStringFUTF16(
354           IDS_SETTINGS_CLEAR_BROWSING_HISTORY_SUMMARY_SIGNED_IN,
355           base::ASCIIToUTF16(chrome::kMyActivityUrlInClearBrowsingData)));
356   html_source->AddString(
357       "clearBrowsingHistorySummarySynced",
358       l10n_util::GetStringFUTF16(
359           IDS_SETTINGS_CLEAR_BROWSING_HISTORY_SUMMARY_SYNCED,
360           base::ASCIIToUTF16(chrome::kMyActivityUrlInClearBrowsingData)));
361   html_source->AddString(
362       "historyDeletionDialogBody",
363       l10n_util::GetStringFUTF16(
364           IDS_CLEAR_BROWSING_DATA_HISTORY_NOTICE,
365           l10n_util::GetStringUTF16(
366               IDS_SETTINGS_CLEAR_DATA_MYACTIVITY_URL_IN_DIALOG)));
367 
368   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
369 }
370 
371 #if !defined(OS_CHROMEOS)
AddDefaultBrowserStrings(content::WebUIDataSource * html_source)372 void AddDefaultBrowserStrings(content::WebUIDataSource* html_source) {
373   static constexpr webui::LocalizedString kLocalizedStrings[] = {
374       {"defaultBrowser", IDS_SETTINGS_DEFAULT_BROWSER},
375       {"defaultBrowserDefault", IDS_SETTINGS_DEFAULT_BROWSER_DEFAULT},
376       {"defaultBrowserMakeDefault", IDS_SETTINGS_DEFAULT_BROWSER_MAKE_DEFAULT},
377       {"defaultBrowserMakeDefaultButton",
378        IDS_SETTINGS_DEFAULT_BROWSER_MAKE_DEFAULT_BUTTON},
379       {"defaultBrowserError", IDS_SETTINGS_DEFAULT_BROWSER_ERROR},
380       {"defaultBrowserSecondary", IDS_SETTINGS_DEFAULT_BROWSER_SECONDARY},
381   };
382   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
383 }
384 #endif
385 
AddDownloadsStrings(content::WebUIDataSource * html_source)386 void AddDownloadsStrings(content::WebUIDataSource* html_source) {
387   static constexpr webui::LocalizedString kLocalizedStrings[] = {
388       {"downloadsPageTitle", IDS_SETTINGS_DOWNLOADS},
389       {"downloadLocation", IDS_SETTINGS_DOWNLOAD_LOCATION},
390       {"changeDownloadLocation", IDS_SETTINGS_CHANGE_DOWNLOAD_LOCATION},
391       {"promptForDownload", IDS_SETTINGS_PROMPT_FOR_DOWNLOAD},
392       {"openFileTypesAutomatically",
393        IDS_SETTINGS_OPEN_FILE_TYPES_AUTOMATICALLY},
394   };
395   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
396 }
397 
398 #if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
AddChromeCleanupStrings(content::WebUIDataSource * html_source)399 void AddChromeCleanupStrings(content::WebUIDataSource* html_source) {
400   const wchar_t kUnwantedSoftwareProtectionWhitePaperUrl[] =
401       L"https://www.google.ca/chrome/browser/privacy/"
402       "whitepaper.html#unwantedsoftware";
403 
404   static constexpr webui::LocalizedString kLocalizedStrings[] = {
405       {"chromeCleanupPageTitle",
406        IDS_SETTINGS_RESET_CLEAN_UP_COMPUTER_PAGE_TITLE},
407       {"chromeCleanupDetailsExtensions",
408        IDS_SETTINGS_RESET_CLEANUP_DETAILS_EXTENSIONS},
409       {"chromeCleanupDetailsFilesAndPrograms",
410        IDS_SETTINGS_RESET_CLEANUP_DETAILS_FILES_AND_PROGRAMS},
411       {"chromeCleanupDetailsRegistryEntries",
412        IDS_SETTINGS_RESET_CLEANUP_DETAILS_REGISTRY_ENTRIES},
413       {"chromeCleanupExplanationCleanupError",
414        IDS_SETTINGS_RESET_CLEANUP_EXPLANATION_CLEANUP_ERROR},
415       {"chromeCleanupExplanationFindAndRemove",
416        IDS_SETTINGS_RESET_CLEANUP_EXPLANATION_FIND_AND_REMOVE},
417       {"chromeCleanupExplanationNoInternet",
418        IDS_SETTINGS_RESET_CLEANUP_EXPLANATION_NO_INTERNET_CONNECTION},
419       {"chromeCleanupExplanationPermissionsNeeded",
420        IDS_SETTINGS_RESET_CLEANUP_EXPLANATION_PERMISSIONS_NEEDED},
421       {"chromeCleanupExplanationRemove",
422        // Note: removal explanation should be the same as used in the prompt
423        // dialog. Reusing the string to ensure they will not diverge.
424        IDS_CHROME_CLEANUP_PROMPT_EXPLANATION},
425       {"chromeCleanupExplanationRemoving",
426        IDS_SETTINGS_RESET_CLEANUP_EXPLANATION_CURRENTLY_REMOVING},
427       {"chromeCleanupExplanationScanError",
428        IDS_SETTINGS_RESET_CLEANUP_EXPLANATION_SCAN_ERROR},
429       {"chromeCleanupFindButtonLable",
430        IDS_SETTINGS_RESET_CLEANUP_FIND_BUTTON_LABEL},
431       {"chromeCleanupLinkShowItems",
432        IDS_SETTINGS_RESET_CLEANUP_LINK_SHOW_FILES},
433       {"chromeCleanupRemoveButtonLabel",
434        IDS_SETTINGS_RESET_CLEANUP_REMOVE_BUTTON_LABEL},
435       {"chromeCleanupRestartButtonLabel",
436        IDS_SETTINGS_RESET_CLEANUP_RESTART_BUTTON_LABEL},
437       {"chromeCleanupTitleErrorCantRemove",
438        IDS_SETTINGS_RESET_CLEANUP_TITLE_ERROR_CANT_REMOVE},
439       {"chromeCleanupTitleErrorPermissions",
440        IDS_SETTINGS_RESET_CLEANUP_TITLE_ERROR_PERMISSIONS_NEEDED},
441       {"chromeCleanupTitleFindAndRemove",
442        IDS_SETTINGS_RESET_CLEANUP_TITLE_FIND_HARMFUL_SOFTWARE},
443       {"chromeCleanupTitleNoInternet",
444        IDS_SETTINGS_RESET_CLEANUP_TITLE_NO_INTERNET_CONNECTION},
445       {"chromeCleanupTitleNothingFound",
446        IDS_SETTINGS_RESET_CLEANUP_TITLE_NOTHING_FOUND},
447       {"chromeCleanupTitleRemove", IDS_SETTINGS_RESET_CLEANUP_TITLE_REMOVE},
448       {"chromeCleanupTitleRemoved", IDS_SETTINGS_RESET_CLEANUP_TITLE_DONE},
449       {"chromeCleanupTitleRemoving", IDS_SETTINGS_RESET_CLEANUP_TITLE_REMOVING},
450       {"chromeCleanupTitleRestart", IDS_SETTINGS_RESET_CLEANUP_TITLE_RESTART},
451       {"chromeCleanupTitleScanning", IDS_SETTINGS_RESET_CLEANUP_TITLE_SCANNING},
452       {"chromeCleanupTitleScanningFailed",
453        IDS_SETTINGS_RESET_CLEANUP_TITLE_ERROR_SCANNING_FAILED},
454       {"chromeCleanupTitleTryAgainButtonLabel",
455        IDS_SETTINGS_RESET_CLEANUP_TRY_AGAIN_BUTTON_LABEL},
456       {"chromeCleanupExplanationLogsPermissionPref",
457        IDS_SETTINGS_RESET_CLEANUP_LOGS_PERMISSION_PREF},
458       {"chromeCleanupTitleCleanupUnavailable",
459        IDS_SETTINGS_RESET_CLEANUP_TITLE_CLEANUP_UNAVAILABLE},
460       {"chromeCleanupExplanationCleanupUnavailable",
461        IDS_SETTINGS_RESET_CLEANUP_EXPLANATION_CLEANUP_UNAVAILABLE},
462   };
463 
464   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
465   const std::string cleanup_learn_more_url =
466       google_util::AppendGoogleLocaleParam(
467           GURL(chrome::kChromeCleanerLearnMoreURL),
468           g_browser_process->GetApplicationLocale())
469           .spec();
470   html_source->AddString("chromeCleanupLearnMoreUrl", cleanup_learn_more_url);
471 
472   // The "powered by" footer contains an HTML fragment with the SVG logo of the
473   // partner. The logo is added directly to the DOM, rather than as an <img>
474   // src, to make sure that screen readers can find accessibility tags inside
475   // the SVG.
476   const std::string powered_by_element =
477       base::StrCat({"<span id='powered-by-logo'>",
478                     ui::ResourceBundle::GetSharedInstance().GetRawDataResource(
479                         IDR_CHROME_CLEANUP_PARTNER),
480                     "</span>"});
481   const base::string16 powered_by_html =
482       l10n_util::GetStringFUTF16(IDS_SETTINGS_RESET_CLEANUP_FOOTER_POWERED_BY,
483                                  base::UTF8ToUTF16(powered_by_element));
484   html_source->AddString("chromeCleanupPoweredByHtml", powered_by_html);
485 
486   const base::string16 cleanup_details_explanation =
487       l10n_util::GetStringFUTF16(IDS_SETTINGS_RESET_CLEANUP_DETAILS_EXPLANATION,
488                                  kUnwantedSoftwareProtectionWhitePaperUrl);
489   html_source->AddString("chromeCleanupDetailsExplanation",
490                          cleanup_details_explanation);
491 }
492 
AddIncompatibleApplicationsStrings(content::WebUIDataSource * html_source)493 void AddIncompatibleApplicationsStrings(content::WebUIDataSource* html_source) {
494   static constexpr webui::LocalizedString kLocalizedStrings[] = {
495       {"incompatibleApplicationsResetCardTitle",
496        IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_RESET_CARD_TITLE},
497       {"incompatibleApplicationsSubpageSubtitle",
498        IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_SUBPAGE_SUBTITLE},
499       {"incompatibleApplicationsSubpageSubtitleNoAdminRights",
500        IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_SUBPAGE_SUBTITLE_NO_ADMIN_RIGHTS},
501       {"incompatibleApplicationsListTitle",
502        IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_LIST_TITLE},
503       {"incompatibleApplicationsRemoveButton",
504        IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_REMOVE_BUTTON},
505       {"incompatibleApplicationsUpdateButton",
506        IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_UPDATE_BUTTON},
507       {"incompatibleApplicationsDone",
508        IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_DONE},
509   };
510   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
511 
512   // The help URL is provided via Field Trial param. If none is provided, the
513   // "Learn How" text is left empty so that no link is displayed.
514   base::string16 learn_how_text;
515   std::string help_url = GetFieldTrialParamValueByFeature(
516       features::kIncompatibleApplicationsWarning, "HelpURL");
517   if (!help_url.empty()) {
518     learn_how_text = l10n_util::GetStringFUTF16(
519         IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_SUBPAGE_LEARN_HOW,
520         base::UTF8ToUTF16(help_url));
521   }
522   html_source->AddString("incompatibleApplicationsSubpageLearnHow",
523                          learn_how_text);
524 }
525 #endif  // defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
526 
AddResetStrings(content::WebUIDataSource * html_source)527 void AddResetStrings(content::WebUIDataSource* html_source) {
528   static constexpr webui::LocalizedString kLocalizedStrings[] = {
529 #if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
530     {"resetPageTitle", IDS_SETTINGS_RESET_AND_CLEANUP},
531 #else
532     {"resetPageTitle", IDS_SETTINGS_RESET},
533 #endif
534     {"resetTrigger", IDS_SETTINGS_RESET_SETTINGS_TRIGGER},
535     {"resetPageExplanation", IDS_RESET_PROFILE_SETTINGS_EXPLANATION},
536     {"triggeredResetPageExplanation",
537      IDS_TRIGGERED_RESET_PROFILE_SETTINGS_EXPLANATION},
538     {"triggeredResetPageTitle", IDS_TRIGGERED_RESET_PROFILE_SETTINGS_TITLE},
539     {"resetDialogCommit", IDS_SETTINGS_RESET},
540     {"resetPageFeedback", IDS_SETTINGS_RESET_PROFILE_FEEDBACK},
541 
542     // Automatic reset banner (now a dialog).
543     {"resetAutomatedDialogTitle", IDS_SETTINGS_RESET_AUTOMATED_DIALOG_TITLE},
544     {"resetProfileBannerButton", IDS_SETTINGS_RESET_BANNER_RESET_BUTTON_TEXT},
545     {"resetProfileBannerDescription", IDS_SETTINGS_RESET_BANNER_TEXT},
546 #if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
547     {"resetCleanupComputerTrigger",
548      IDS_SETTINGS_RESET_CLEAN_UP_COMPUTER_TRIGGER},
549 #endif
550   };
551   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
552 
553   html_source->AddString("resetPageLearnMoreUrl",
554                          chrome::kResetProfileSettingsLearnMoreURL);
555   html_source->AddString("resetProfileBannerLearnMoreUrl",
556                          chrome::kAutomaticSettingsResetLearnMoreURL);
557 }
558 
559 #if !defined(OS_CHROMEOS)
AddImportDataStrings(content::WebUIDataSource * html_source)560 void AddImportDataStrings(content::WebUIDataSource* html_source) {
561   static constexpr webui::LocalizedString kLocalizedStrings[] = {
562       {"importTitle", IDS_SETTINGS_IMPORT_SETTINGS_TITLE},
563       {"importFromLabel", IDS_SETTINGS_IMPORT_FROM_LABEL},
564       {"importDescription", IDS_SETTINGS_IMPORT_ITEMS_LABEL},
565       {"importLoading", IDS_SETTINGS_IMPORT_LOADING_PROFILES},
566       {"importHistory", IDS_SETTINGS_IMPORT_HISTORY_CHECKBOX},
567       {"importFavorites", IDS_SETTINGS_IMPORT_FAVORITES_CHECKBOX},
568       {"importPasswords", IDS_SETTINGS_IMPORT_PASSWORDS_CHECKBOX},
569       {"importSearch", IDS_SETTINGS_IMPORT_SEARCH_ENGINES_CHECKBOX},
570       {"importAutofillFormData",
571        IDS_SETTINGS_IMPORT_AUTOFILL_FORM_DATA_CHECKBOX},
572       {"importChooseFile", IDS_SETTINGS_IMPORT_CHOOSE_FILE},
573       {"importCommit", IDS_SETTINGS_IMPORT_COMMIT},
574       {"noProfileFound", IDS_SETTINGS_IMPORT_NO_PROFILE_FOUND},
575       {"importSuccess", IDS_SETTINGS_IMPORT_SUCCESS},
576   };
577   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
578 }
579 #endif
580 
AddLanguagesStrings(content::WebUIDataSource * html_source,Profile * profile)581 void AddLanguagesStrings(content::WebUIDataSource* html_source,
582                          Profile* profile) {
583   static constexpr webui::LocalizedString kLocalizedStrings[] = {
584     {"languagesListTitle", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_TITLE},
585     {"searchLanguages", IDS_SETTINGS_LANGUAGE_SEARCH},
586     {"languagesExpandA11yLabel",
587      IDS_SETTINGS_LANGUAGES_EXPAND_ACCESSIBILITY_LABEL},
588     {"orderBrowserLanguagesInstructions",
589      IDS_SETTINGS_LANGUAGES_BROWSER_LANGUAGES_LIST_ORDERING_INSTRUCTIONS},
590     {"moveToTop", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_MOVE_TO_TOP},
591     {"moveUp", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_MOVE_UP},
592     {"moveDown", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_MOVE_DOWN},
593     {"removeLanguage", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_REMOVE},
594     {"addLanguages", IDS_SETTINGS_LANGUAGES_LANGUAGES_ADD},
595     {"addLanguagesDialogTitle", IDS_SETTINGS_LANGUAGES_MANAGE_LANGUAGES_TITLE},
596     {"allLanguages", IDS_SETTINGS_LANGUAGES_ALL_LANGUAGES},
597     {"enabledLanguages", IDS_SETTINGS_LANGUAGES_ENABLED_LANGUAGES},
598     {"isDisplayedInThisLanguage",
599      IDS_SETTINGS_LANGUAGES_IS_DISPLAYED_IN_THIS_LANGUAGE},
600     {"displayInThisLanguage", IDS_SETTINGS_LANGUAGES_DISPLAY_IN_THIS_LANGUAGE},
601     {"offerToTranslateInThisLanguage",
602      IDS_SETTINGS_LANGUAGES_OFFER_TO_TRANSLATE_IN_THIS_LANGUAGE},
603     {"offerToEnableTranslate",
604      IDS_SETTINGS_LANGUAGES_OFFER_TO_ENABLE_TRANSLATE},
605     {"translateTargetLabel", IDS_SETTINGS_LANGUAGES_TRANSLATE_TARGET},
606     {"spellCheckTitle", IDS_SETTINGS_LANGUAGES_SPELL_CHECK_TITLE},
607     {"spellCheckBasicLabel", IDS_SETTINGS_LANGUAGES_SPELL_CHECK_BASIC_LABEL},
608     {"spellCheckEnhancedLabel",
609      IDS_SETTINGS_LANGUAGES_SPELL_CHECK_ENHANCED_LABEL},
610     {"spellCheckEnhancedDescription",
611      IDS_SETTINGS_LANGUAGES_SPELL_CHECK_ENHANCED_DESCRIPTION},
612 #if !defined(OS_MACOSX)
613     {"spellCheckDisabledReason",
614      IDS_SETTING_LANGUAGES_SPELL_CHECK_DISABLED_REASON},
615     {"spellCheckLanguagesListTitle",
616      IDS_SETTINGS_LANGUAGES_SPELL_CHECK_LANGUAGES_LIST_TITLE},
617     {"manageSpellCheck", IDS_SETTINGS_LANGUAGES_SPELL_CHECK_MANAGE},
618     {"editDictionaryPageTitle", IDS_SETTINGS_LANGUAGES_EDIT_DICTIONARY_TITLE},
619     {"addDictionaryWordLabel", IDS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD},
620     {"addDictionaryWordButton",
621      IDS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_BUTTON},
622     {"addDictionaryWordDuplicateError",
623      IDS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_DUPLICATE_ERROR},
624     {"addDictionaryWordLengthError",
625      IDS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_LENGTH_ERROR},
626     {"deleteDictionaryWordButton",
627      IDS_SETTINGS_LANGUAGES_DELETE_DICTIONARY_WORD_BUTTON},
628     {"customDictionaryWords", IDS_SETTINGS_LANGUAGES_DICTIONARY_WORDS},
629     {"noCustomDictionaryWordsFound",
630      IDS_SETTINGS_LANGUAGES_DICTIONARY_WORDS_NONE},
631     {"languagesDictionaryDownloadError",
632      IDS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_FAILED},
633     {"languagesDictionaryDownloadErrorHelp",
634      IDS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_FAILED_HELP},
635 #endif
636   };
637   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
638 
639 #if defined(OS_CHROMEOS)
640   // Only the Chrome OS help article explains how language order affects website
641   // language.
642   html_source->AddString(
643       "languagesLearnMoreURL",
644       base::ASCIIToUTF16(chrome::kLanguageSettingsLearnMoreUrl));
645   html_source->AddString(
646       "languagesPageTitle",
647       l10n_util::GetStringUTF16(IDS_SETTINGS_LANGUAGES_PAGE_TITLE));
648 #else
649   html_source->AddString(
650       "languagesPageTitle",
651       l10n_util::GetStringUTF16(IDS_SETTINGS_LANGUAGES_PAGE_TITLE));
652 #endif
653 #if defined(OS_CHROMEOS)
654   user_manager::UserManager* user_manager = user_manager::UserManager::Get();
655   const user_manager::User* user =
656       chromeos::ProfileHelper::Get()->GetUserByProfile(profile);
657   const user_manager::User* primary_user = user_manager->GetPrimaryUser();
658   html_source->AddBoolean(
659       "isSecondaryUser",
660       user && user->GetAccountId() != primary_user->GetAccountId());
661 #endif  // defined(OS_CHROMEOS)
662 }
663 
664 #if defined(OS_CHROMEOS)
AddChromeOSUserStrings(content::WebUIDataSource * html_source,Profile * profile)665 void AddChromeOSUserStrings(content::WebUIDataSource* html_source,
666                             Profile* profile) {
667   user_manager::UserManager* user_manager = user_manager::UserManager::Get();
668 
669   const user_manager::User* primary_user = user_manager->GetPrimaryUser();
670   std::string primary_user_email = primary_user->GetAccountId().GetUserEmail();
671   html_source->AddString(
672       "osSettingsBannerText",
673       l10n_util::GetStringFUTF16(
674           IDS_SETTINGS_OS_SETTINGS_BANNER,
675           base::ASCIIToUTF16(chrome::kChromeUIOSSettingsURL)));
676 }
677 #endif
678 
AddOnStartupStrings(content::WebUIDataSource * html_source)679 void AddOnStartupStrings(content::WebUIDataSource* html_source) {
680   static constexpr webui::LocalizedString kLocalizedStrings[] = {
681       {"onStartup", IDS_SETTINGS_ON_STARTUP},
682       {"onStartupOpenNewTab", IDS_SETTINGS_ON_STARTUP_OPEN_NEW_TAB},
683       {"onStartupContinue", IDS_SETTINGS_ON_STARTUP_CONTINUE},
684       {"onStartupOpenSpecific", IDS_SETTINGS_ON_STARTUP_OPEN_SPECIFIC},
685       {"onStartupUseCurrent", IDS_SETTINGS_ON_STARTUP_USE_CURRENT},
686       {"onStartupAddNewPage", IDS_SETTINGS_ON_STARTUP_ADD_NEW_PAGE},
687       {"onStartupEditPage", IDS_SETTINGS_ON_STARTUP_EDIT_PAGE},
688       {"onStartupSiteUrl", IDS_SETTINGS_ON_STARTUP_SITE_URL},
689       {"onStartupRemove", IDS_SETTINGS_ON_STARTUP_REMOVE},
690       {"onStartupInvalidUrl", IDS_SETTINGS_INVALID_URL},
691       {"onStartupUrlTooLong", IDS_SETTINGS_URL_TOOL_LONG},
692   };
693   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
694 }
695 
IsFidoAuthenticationAvailable(autofill::PersonalDataManager * personal_data,content::WebContents * web_contents)696 bool IsFidoAuthenticationAvailable(autofill::PersonalDataManager* personal_data,
697                                    content::WebContents* web_contents) {
698   // Don't show toggle switch if user is unable to downstream cards.
699   if (personal_data->GetSyncSigninState() !=
700           autofill::AutofillSyncSigninState::
701               kSignedInAndWalletSyncTransportEnabled &&
702       personal_data->GetSyncSigninState() !=
703           autofill::AutofillSyncSigninState::kSignedInAndSyncFeatureEnabled) {
704     return false;
705   }
706 
707   // If |autofill_manager| is not available, then don't show toggle switch.
708   autofill::ContentAutofillDriverFactory* autofill_driver_factory =
709       autofill::ContentAutofillDriverFactory::FromWebContents(web_contents);
710   if (!autofill_driver_factory)
711     return false;
712   autofill::ContentAutofillDriver* autofill_driver =
713       autofill_driver_factory->DriverForFrame(web_contents->GetMainFrame());
714   if (!autofill_driver)
715     return false;
716   autofill::AutofillManager* autofill_manager =
717       autofill_driver->autofill_manager();
718   if (!autofill_manager)
719     return false;
720 
721   // Show the toggle switch only if the flag is enabled. Once returned, this
722   // decision may be overridden (from true to false) by the caller in the
723   // payments section if no platform authenticator is found.
724   return base::FeatureList::IsEnabled(
725       autofill::features::kAutofillCreditCardAuthentication);
726 }
727 
AddAutofillStrings(content::WebUIDataSource * html_source,Profile * profile,content::WebContents * web_contents)728 void AddAutofillStrings(content::WebUIDataSource* html_source,
729                         Profile* profile,
730                         content::WebContents* web_contents) {
731   static constexpr webui::LocalizedString kLocalizedStrings[] = {
732       {"autofillPageTitle", IDS_SETTINGS_AUTOFILL},
733       {"passwords", IDS_SETTINGS_PASSWORDS},
734       {"checkPasswords", IDS_SETTINGS_CHECK_PASSWORDS},
735       {"checkPasswordsCanceled", IDS_SETTINGS_CHECK_PASSWORDS_CANCELED},
736       {"checkedPasswords", IDS_SETTINGS_CHECKED_PASSWORDS},
737       {"checkPasswordsDescription", IDS_SETTINGS_CHECK_PASSWORDS_DESCRIPTION},
738       {"checkPasswordsAgain", IDS_SETTINGS_CHECK_PASSWORDS_AGAIN},
739       {"checkPasswordsAgainAfterError",
740        IDS_SETTINGS_CHECK_PASSWORDS_AGAIN_AFTER_ERROR},
741       {"checkPasswordsProgress", IDS_SETTINGS_CHECK_PASSWORDS_PROGRESS},
742       {"checkPasswordsStop", IDS_SETTINGS_CHECK_PASSWORDS_STOP},
743       {"compromisedPasswords", IDS_SETTINGS_COMPROMISED_PASSWORDS},
744       {"compromisedPasswordsDescription",
745        IDS_SETTINGS_COMPROMISED_PASSWORDS_ADVICE},
746       {"changePasswordButton", IDS_SETTINGS_CHANGE_PASSWORD_BUTTON},
747       {"changePasswordInApp", IDS_SETTINGS_CHANGE_PASSWORD_IN_APP_LABEL},
748       {"leakedPassword", IDS_SETTINGS_COMPROMISED_PASSWORD_REASON_LEAKED},
749       {"phishedPassword", IDS_SETTINGS_COMPROMISED_PASSWORD_REASON_PHISHED},
750       {"phishedAndLeakedPassword",
751        IDS_SETTINGS_COMPROMISED_PASSWORD_REASON_PHISHED_AND_LEAKED},
752       {"showCompromisedPassword", IDS_SETTINGS_COMPROMISED_PASSWORD_SHOW},
753       {"hideCompromisedPassword", IDS_SETTINGS_COMPROMISED_PASSWORD_HIDE},
754       {"editCompromisedPassword", IDS_SETTINGS_COMPROMISED_PASSWORD_EDIT},
755       {"removeCompromisedPassword", IDS_SETTINGS_COMPROMISED_PASSWORD_REMOVE},
756       {"removeCompromisedPasswordConfirmationTitle",
757        IDS_SETTINGS_REMOVE_COMPROMISED_PASSWORD_CONFIRMATION_TITLE},
758       {"removeCompromisedPasswordConfirmationDescription",
759        IDS_SETTINGS_REMOVE_COMPROMISED_PASSWORD_CONFIRMATION_DESCRIPTION},
760       {"editCompromisedPasswordTitle",
761        IDS_SETTINGS_COMPROMISED_EDIT_PASSWORD_TITLE},
762       {"editCompromisedPasswordFootnote",
763        IDS_SETTINGS_COMPROMISED_EDIT_PASSWORD_FOOTNOTE},
764       {"editCompromisedPasswordSite",
765        IDS_SETTINGS_COMPROMISED_EDIT_PASSWORD_SITE},
766       {"editCompromisedPasswordApp",
767        IDS_SETTINGS_COMPROMISED_EDIT_PASSWORD_APP},
768       {"creditCards", IDS_AUTOFILL_PAYMENT_METHODS},
769       {"noPaymentMethodsFound", IDS_SETTINGS_PAYMENT_METHODS_NONE},
770       {"googlePayments", IDS_SETTINGS_GOOGLE_PAYMENTS},
771       {"googlePaymentsCached", IDS_SETTINGS_GOOGLE_PAYMENTS_CACHED},
772       {"enableProfilesLabel", IDS_AUTOFILL_ENABLE_PROFILES_TOGGLE_LABEL},
773       {"enableProfilesSublabel", IDS_AUTOFILL_ENABLE_PROFILES_TOGGLE_SUBLABEL},
774       {"enableCreditCardsLabel", IDS_AUTOFILL_ENABLE_CREDIT_CARDS_TOGGLE_LABEL},
775       {"enableCreditCardsSublabel",
776        IDS_AUTOFILL_ENABLE_CREDIT_CARDS_TOGGLE_SUBLABEL},
777       {"enableCreditCardFIDOAuthLabel", IDS_ENABLE_CREDIT_CARD_FIDO_AUTH_LABEL},
778       {"enableCreditCardFIDOAuthSublabel",
779        IDS_ENABLE_CREDIT_CARD_FIDO_AUTH_SUBLABEL},
780       {"addresses", IDS_AUTOFILL_ADDRESSES},
781       {"addressesTitle", IDS_AUTOFILL_ADDRESSES_SETTINGS_TITLE},
782       {"addAddressTitle", IDS_SETTINGS_AUTOFILL_ADDRESSES_ADD_TITLE},
783       {"editAddressTitle", IDS_SETTINGS_AUTOFILL_ADDRESSES_EDIT_TITLE},
784       {"addressCountry", IDS_SETTINGS_AUTOFILL_ADDRESSES_COUNTRY},
785       {"addressPhone", IDS_SETTINGS_AUTOFILL_ADDRESSES_PHONE},
786       {"addressEmail", IDS_SETTINGS_AUTOFILL_ADDRESSES_EMAIL},
787       {"removeAddress", IDS_SETTINGS_ADDRESS_REMOVE},
788       {"removeCreditCard", IDS_SETTINGS_CREDIT_CARD_REMOVE},
789       {"clearCreditCard", IDS_SETTINGS_CREDIT_CARD_CLEAR},
790       {"creditCardType", IDS_SETTINGS_AUTOFILL_CREDIT_CARD_TYPE_COLUMN_LABEL},
791       {"creditCardExpiration", IDS_SETTINGS_CREDIT_CARD_EXPIRATION_DATE},
792       {"creditCardName", IDS_SETTINGS_NAME_ON_CREDIT_CARD},
793       {"creditCardNumber", IDS_SETTINGS_CREDIT_CARD_NUMBER},
794       {"creditCardExpirationMonth", IDS_SETTINGS_CREDIT_CARD_EXPIRATION_MONTH},
795       {"creditCardExpirationYear", IDS_SETTINGS_CREDIT_CARD_EXPIRATION_YEAR},
796       {"creditCardExpired", IDS_SETTINGS_CREDIT_CARD_EXPIRED},
797       {"editCreditCardTitle", IDS_SETTINGS_EDIT_CREDIT_CARD_TITLE},
798       {"addCreditCardTitle", IDS_SETTINGS_ADD_CREDIT_CARD_TITLE},
799       {"migrateCreditCardsLabel", IDS_SETTINGS_MIGRATABLE_CARDS_LABEL},
800       {"migratableCardsInfoSingle", IDS_SETTINGS_SINGLE_MIGRATABLE_CARD_INFO},
801       {"migratableCardsInfoMultiple",
802        IDS_SETTINGS_MULTIPLE_MIGRATABLE_CARDS_INFO},
803       {"upiIdLabel", IDS_SETTINGS_UPI_ID_LABEL},
804       {"upiIdExpirationNever", IDS_SETTINGS_UPI_ID_EXPIRATION_NEVER},
805       {"canMakePaymentToggleLabel", IDS_SETTINGS_CAN_MAKE_PAYMENT_TOGGLE_LABEL},
806       {"autofillDetail", IDS_SETTINGS_AUTOFILL_DETAIL},
807       {"passwordsSavePasswordsLabel",
808        IDS_SETTINGS_PASSWORDS_SAVE_PASSWORDS_TOGGLE_LABEL},
809       {"passwordsAutosigninLabel",
810        IDS_SETTINGS_PASSWORDS_AUTOSIGNIN_CHECKBOX_LABEL},
811       {"passwordsAutosigninDescription",
812        IDS_SETTINGS_PASSWORDS_AUTOSIGNIN_CHECKBOX_DESC},
813       {"passwordsLeakDetectionLabel",
814        IDS_SETTINGS_PASSWORDS_LEAK_DETECTION_LABEL},
815       {"passwordsLeakDetectionGeneralDescription",
816        IDS_PASSWORD_MANAGER_LEAK_HELP_MESSAGE},
817       {"passwordsLeakDetectionSignedOutEnabledDescription",
818        IDS_SETTINGS_PASSWORDS_LEAK_DETECTION_SIGNED_OUT_ENABLED_DESC},
819       {"savedPasswordsHeading", IDS_SETTINGS_PASSWORDS_SAVED_HEADING},
820       {"passwordExceptionsHeading", IDS_SETTINGS_PASSWORDS_EXCEPTIONS_HEADING},
821       {"deletePasswordException", IDS_SETTINGS_PASSWORDS_DELETE_EXCEPTION},
822       {"removePassword", IDS_SETTINGS_PASSWORD_REMOVE},
823       {"searchPasswords", IDS_SETTINGS_PASSWORD_SEARCH},
824       {"showPassword", IDS_SETTINGS_PASSWORD_SHOW},
825       {"hidePassword", IDS_SETTINGS_PASSWORD_HIDE},
826       {"passwordDetailsTitle", IDS_SETTINGS_PASSWORDS_VIEW_DETAILS_TITLE},
827       {"passwordViewDetails", IDS_SETTINGS_PASSWORD_DETAILS},
828       {"copyPassword", IDS_SETTINGS_PASSWORD_COPY},
829       {"editPasswordWebsiteLabel", IDS_SETTINGS_PASSWORDS_WEBSITE},
830       {"editPasswordUsernameLabel", IDS_SETTINGS_PASSWORDS_USERNAME},
831       {"editPasswordPasswordLabel", IDS_SETTINGS_PASSWORDS_PASSWORD},
832       {"noAddressesFound", IDS_SETTINGS_ADDRESS_NONE},
833       {"noPasswordsFound", IDS_SETTINGS_PASSWORDS_NONE},
834       {"noExceptionsFound", IDS_SETTINGS_PASSWORDS_EXCEPTIONS_NONE},
835       {"import", IDS_PASSWORD_MANAGER_IMPORT_BUTTON},
836       {"exportMenuItem", IDS_SETTINGS_PASSWORDS_EXPORT_MENU_ITEM},
837       {"optInAccountStorageLabel",
838        IDS_SETTINGS_PASSWORDS_OPT_IN_ACCOUNT_STORAGE_LABEL},
839       {"optOutAccountStorageLabel",
840        IDS_SETTINGS_PASSWORDS_OPT_OUT_ACCOUNT_STORAGE_LABEL},
841       {"undoRemovePassword", IDS_SETTINGS_PASSWORD_UNDO},
842       {"passwordDeleted", IDS_SETTINGS_PASSWORD_DELETED_PASSWORD},
843       {"passwordRowMoreActionsButton", IDS_SETTINGS_PASSWORD_ROW_MORE_ACTIONS},
844       {"passwordRowFederatedMoreActionsButton",
845        IDS_SETTINGS_PASSWORD_ROW_FEDERATED_MORE_ACTIONS},
846       {"exportPasswordsTitle", IDS_SETTINGS_PASSWORDS_EXPORT_TITLE},
847       {"exportPasswordsDescription", IDS_SETTINGS_PASSWORDS_EXPORT_DESCRIPTION},
848       {"exportPasswords", IDS_SETTINGS_PASSWORDS_EXPORT},
849       {"exportingPasswordsTitle", IDS_SETTINGS_PASSWORDS_EXPORTING_TITLE},
850       {"exportPasswordsTryAgain", IDS_SETTINGS_PASSWORDS_EXPORT_TRY_AGAIN},
851       {"exportPasswordsFailTitle",
852        IDS_SETTINGS_PASSWORDS_EXPORTING_FAILURE_TITLE},
853       {"exportPasswordsFailTips",
854        IDS_SETTINGS_PASSWORDS_EXPORTING_FAILURE_TIPS},
855       {"exportPasswordsFailTipsEnoughSpace",
856        IDS_SETTINGS_PASSWORDS_EXPORTING_FAILURE_TIP_ENOUGH_SPACE},
857       {"exportPasswordsFailTipsAnotherFolder",
858        IDS_SETTINGS_PASSWORDS_EXPORTING_FAILURE_TIP_ANOTHER_FOLDER},
859       {"savedToThisDeviceOnly",
860        IDS_SETTINGS_PAYMENTS_SAVED_TO_THIS_DEVICE_ONLY}};
861 
862   const base::string16 short_product_name =
863       l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME);
864   html_source->AddString(
865       "checkPasswordsErrorOffline",
866       l10n_util::GetStringFUTF16(IDS_SETTINGS_CHECK_PASSWORDS_ERROR_OFFLINE,
867                                  short_product_name));
868   html_source->AddString(
869       "checkPasswordsErrorSignedOut",
870       l10n_util::GetStringFUTF16(IDS_SETTINGS_CHECK_PASSWORDS_ERROR_SIGNED_OUT,
871                                  short_product_name));
872   html_source->AddString(
873       "checkPasswordsErrorNoPasswords",
874       l10n_util::GetStringFUTF16(
875           IDS_SETTINGS_CHECK_PASSWORDS_ERROR_NO_PASSWORDS, short_product_name));
876   html_source->AddString(
877       "checkPasswordsErrorQuota",
878       l10n_util::GetStringFUTF16(IDS_SETTINGS_CHECK_PASSWORDS_ERROR_QUOTA_LIMIT,
879                                  short_product_name));
880   html_source->AddString(
881       "checkPasswordsErrorGeneric",
882       l10n_util::GetStringFUTF16(IDS_SETTINGS_CHECK_PASSWORDS_ERROR_GENERIC,
883                                  short_product_name));
884   html_source->AddString(
885       "noCompromisedCredentials",
886       l10n_util::GetStringFUTF16(IDS_SETTINGS_NO_COMPROMISED_CREDENTIALS_LABEL,
887                                  short_product_name));
888 
889   GURL google_password_manager_url = GetGooglePasswordManagerURL(
890       password_manager::ManagePasswordsReferrer::kChromeSettings);
891 
892   html_source->AddString(
893       "managePasswordsLabel",
894       l10n_util::GetStringFUTF16(
895           IDS_SETTINGS_PASSWORDS_MANAGE_PASSWORDS,
896           base::UTF8ToUTF16(google_password_manager_url.spec())));
897   html_source->AddString(
898       "checkPasswordsErrorQuotaGoogleAccount",
899       l10n_util::GetStringFUTF16(
900           IDS_SETTINGS_CHECK_PASSWORDS_ERROR_QUOTA_LIMIT_GOOGLE_ACCOUNT,
901           short_product_name,
902           base::UTF8ToUTF16(
903               password_manager::GetPasswordCheckupURL(
904                   password_manager::PasswordCheckupReferrer::kPasswordCheck)
905                   .spec())));
906   html_source->AddString("googlePasswordManagerUrl",
907                          google_password_manager_url.spec());
908   html_source->AddString("passwordCheckLearnMoreURL",
909                          chrome::kPasswordCheckLearnMoreURL);
910   html_source->AddString("passwordManagerLearnMoreURL",
911                          chrome::kPasswordManagerLearnMoreURL);
912   html_source->AddString("manageAddressesUrl",
913                          autofill::payments::GetManageAddressesUrl().spec());
914   html_source->AddString("manageCreditCardsLabel",
915                          l10n_util::GetStringFUTF16(
916                              IDS_SETTINGS_PAYMENTS_MANAGE_CREDIT_CARDS,
917                              base::UTF8ToUTF16(chrome::kPaymentMethodsURL)));
918   html_source->AddString("manageCreditCardsUrl",
919                          autofill::payments::GetManageInstrumentsUrl().spec());
920   html_source->AddString("paymentMethodsLearnMoreURL",
921                          chrome::kPaymentMethodsLearnMoreURL);
922 
923   bool is_guest_mode = false;
924 #if defined(OS_CHROMEOS)
925   is_guest_mode = user_manager::UserManager::Get()->IsLoggedInAsGuest() ||
926                   user_manager::UserManager::Get()->IsLoggedInAsPublicAccount();
927 #else   // !defined(OS_CHROMEOS)
928   is_guest_mode = profile->IsOffTheRecord();
929 #endif  // defined(OS_CHROMEOS)
930   autofill::PersonalDataManager* personal_data =
931       autofill::PersonalDataManagerFactory::GetForProfile(profile);
932   html_source->AddBoolean(
933       "migrationEnabled",
934       !is_guest_mode && autofill::IsCreditCardMigrationEnabled(
935                             personal_data, profile->GetPrefs(),
936                             ProfileSyncServiceFactory::GetForProfile(profile),
937                             /*is_test_mode=*/false,
938                             /*log_manager=*/nullptr));
939   html_source->AddBoolean(
940       "fidoAuthenticationAvailableForAutofill",
941       IsFidoAuthenticationAvailable(personal_data, web_contents));
942 
943   ui::Accelerator undo_accelerator(ui::VKEY_Z, ui::EF_PLATFORM_ACCELERATOR);
944   html_source->AddString(
945       "undoDescription",
946       l10n_util::GetStringFUTF16(IDS_UNDO_DESCRIPTION,
947                                  undo_accelerator.GetShortcutText()));
948 
949   html_source->AddBoolean("showUpiIdSettings",
950                           base::FeatureList::IsEnabled(
951                               autofill::features::kAutofillSaveAndFillVPA));
952 
953   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
954 }
955 
AddSignOutDialogStrings(content::WebUIDataSource * html_source,Profile * profile)956 void AddSignOutDialogStrings(content::WebUIDataSource* html_source,
957                              Profile* profile) {
958 #if defined(OS_CHROMEOS)
959   bool is_dice_enabled = false;
960   bool is_split_sync_consent_enabled =
961       chromeos::features::IsSplitSyncConsentEnabled();
962 #else
963   bool is_dice_enabled =
964       AccountConsistencyModeManager::IsDiceEnabledForProfile(profile);
965   bool is_split_sync_consent_enabled = false;
966 #endif
967 
968   if (is_split_sync_consent_enabled || is_dice_enabled) {
969     static constexpr webui::LocalizedString kTurnOffStrings[] = {
970         {"syncDisconnect", IDS_SETTINGS_PEOPLE_SYNC_TURN_OFF},
971         {"syncDisconnectTitle",
972          IDS_SETTINGS_TURN_OFF_SYNC_AND_SIGN_OUT_DIALOG_TITLE},
973     };
974     AddLocalizedStringsBulk(html_source, kTurnOffStrings);
975   } else {
976     static constexpr webui::LocalizedString kSignOutStrings[] = {
977         {"syncDisconnect", IDS_SETTINGS_PEOPLE_SIGN_OUT},
978         {"syncDisconnectTitle", IDS_SETTINGS_SYNC_DISCONNECT_TITLE},
979     };
980     AddLocalizedStringsBulk(html_source, kSignOutStrings);
981   }
982 
983   std::string sync_dashboard_url =
984       google_util::AppendGoogleLocaleParam(
985           GURL(chrome::kSyncGoogleDashboardURL),
986           g_browser_process->GetApplicationLocale())
987           .spec();
988 
989   if (is_dice_enabled) {
990     static constexpr webui::LocalizedString kSyncDisconnectStrings[] = {
991         {"syncDisconnectDeleteProfile",
992          IDS_SETTINGS_TURN_OFF_SYNC_DIALOG_CHECKBOX},
993         {"syncDisconnectConfirm",
994          IDS_SETTINGS_TURN_OFF_SYNC_DIALOG_MANAGED_CONFIRM},
995         {"syncDisconnectExplanation",
996          IDS_SETTINGS_SYNC_DISCONNECT_AND_SIGN_OUT_EXPLANATION},
997     };
998     AddLocalizedStringsBulk(html_source, kSyncDisconnectStrings);
999   } else {
1000     static constexpr webui::LocalizedString kSyncDisconnectStrings[] = {
1001         {"syncDisconnectDeleteProfile",
1002          IDS_SETTINGS_SYNC_DISCONNECT_DELETE_PROFILE},
1003         {"syncDisconnectConfirm", IDS_SETTINGS_SYNC_DISCONNECT_CONFIRM},
1004     };
1005     AddLocalizedStringsBulk(html_source, kSyncDisconnectStrings);
1006 
1007     html_source->AddString(
1008         "syncDisconnectExplanation",
1009         l10n_util::GetStringFUTF8(IDS_SETTINGS_SYNC_DISCONNECT_EXPLANATION,
1010                                   base::ASCIIToUTF16(sync_dashboard_url)));
1011   }
1012 
1013 #if !defined(OS_CHROMEOS)
1014   html_source->AddString(
1015       "syncDisconnectManagedProfileExplanation",
1016       l10n_util::GetStringFUTF8(
1017           IDS_SETTINGS_SYNC_DISCONNECT_MANAGED_PROFILE_EXPLANATION,
1018           base::ASCIIToUTF16("$1"), base::ASCIIToUTF16(sync_dashboard_url)));
1019 #endif
1020 }
1021 
AddPeopleStrings(content::WebUIDataSource * html_source,Profile * profile)1022 void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
1023   static constexpr webui::LocalizedString kLocalizedStrings[] = {
1024     // Top level people strings:
1025     {"peopleSignInPromptSecondaryWithAccount",
1026      IDS_SETTINGS_PEOPLE_SIGN_IN_PROMPT_SECONDARY_WITH_ACCOUNT},
1027     {"peopleSignInPromptSecondaryWithNoAccount",
1028      IDS_SETTINGS_PEOPLE_SIGN_IN_PROMPT_SECONDARY_WITH_ACCOUNT},
1029     {"peoplePageTitle", IDS_SETTINGS_PEOPLE},
1030     {"syncSettingsSavedToast", IDS_SETTINGS_SYNC_SETTINGS_SAVED_TOAST_LABEL},
1031     {"peopleSignInPrompt", IDS_SETTINGS_PEOPLE_SIGN_IN_PROMPT},
1032     {"manageGoogleAccount", IDS_SETTINGS_MANAGE_GOOGLE_ACCOUNT},
1033     {"syncAndNonPersonalizedServices",
1034      IDS_SETTINGS_SYNC_SYNC_AND_NON_PERSONALIZED_SERVICES},
1035 #if defined(OS_CHROMEOS)
1036     {"accountManagerSubMenuLabel", IDS_SETTINGS_ACCOUNT_MANAGER_SUBMENU_LABEL},
1037 #else
1038     {"editPerson", IDS_SETTINGS_EDIT_PERSON},
1039     {"profileNameAndPicture", IDS_SETTINGS_PROFILE_NAME_AND_PICTURE},
1040 #endif
1041 
1042   // Manage profile strings:
1043 #if !defined(OS_CHROMEOS)
1044     {"showShortcutLabel", IDS_SETTINGS_PROFILE_SHORTCUT_TOGGLE_LABEL},
1045 #endif
1046     {"deleteProfileWarningExpandA11yLabel",
1047      IDS_SETTINGS_SYNC_DISCONNECT_EXPAND_ACCESSIBILITY_LABEL},
1048     {"deleteProfileWarningWithCountsSingular",
1049      IDS_SETTINGS_SYNC_DISCONNECT_DELETE_PROFILE_WARNING_WITH_COUNTS_SINGULAR},
1050     {"deleteProfileWarningWithCountsPlural",
1051      IDS_SETTINGS_SYNC_DISCONNECT_DELETE_PROFILE_WARNING_WITH_COUNTS_PLURAL},
1052     {"deleteProfileWarningWithoutCounts",
1053      IDS_SETTINGS_SYNC_DISCONNECT_DELETE_PROFILE_WARNING_WITHOUT_COUNTS},
1054   };
1055   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1056 
1057   // Add Google Account URL and include UTM parameter to signal the source of
1058   // the navigation.
1059   html_source->AddString(
1060       "googleAccountUrl",
1061       net::AppendQueryParameter(GURL(chrome::kGoogleAccountURL), "utm_source",
1062                                 "chrome-settings")
1063           .spec());
1064   html_source->AddBoolean("profileShortcutsEnabled",
1065                           ProfileShortcutManager::IsFeatureEnabled());
1066 #if defined(OS_CHROMEOS)
1067   // Toggles the Chrome OS Account Manager submenu in the People section.
1068   html_source->AddBoolean("isAccountManagerEnabled",
1069                           chromeos::IsAccountManagerAvailable(profile));
1070 #endif
1071 
1072   AddSignOutDialogStrings(html_source, profile);
1073   AddSyncControlsStrings(html_source);
1074   AddSyncAccountControlStrings(html_source);
1075 #if defined(OS_CHROMEOS)
1076   AddPasswordPromptDialogStrings(html_source);
1077 #endif
1078   AddSyncPageStrings(html_source);
1079 }
1080 
AddPrintingStrings(content::WebUIDataSource * html_source)1081 void AddPrintingStrings(content::WebUIDataSource* html_source) {
1082   static constexpr webui::LocalizedString kLocalizedStrings[] = {
1083     {"printingPageTitle", IDS_SETTINGS_PRINTING},
1084     {"printingCloudPrintLearnMoreLabel",
1085      IDS_SETTINGS_PRINTING_CLOUD_PRINT_LEARN_MORE_LABEL},
1086     {"printingNotificationsLabel", IDS_SETTINGS_PRINTING_NOTIFICATIONS_LABEL},
1087     {"printingManageCloudPrintDevices",
1088      IDS_SETTINGS_PRINTING_MANAGE_CLOUD_PRINT_DEVICES},
1089     {"cloudPrintersTitle", IDS_SETTINGS_PRINTING_CLOUD_PRINTERS},
1090 #if !defined(OS_CHROMEOS)
1091     {"localPrintersTitle", IDS_SETTINGS_PRINTING_LOCAL_PRINTERS_TITLE},
1092 #endif
1093   };
1094   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1095 
1096   html_source->AddString("devicesUrl", chrome::kChromeUIDevicesURL);
1097   html_source->AddString("printingCloudPrintLearnMoreUrl",
1098                          chrome::kCloudPrintLearnMoreURL);
1099 }
1100 
AddPrivacyStrings(content::WebUIDataSource * html_source,Profile * profile)1101 void AddPrivacyStrings(content::WebUIDataSource* html_source,
1102                        Profile* profile) {
1103   static constexpr webui::LocalizedString kLocalizedStrings[] = {
1104       {"privacyPageTitle", IDS_SETTINGS_PRIVACY},
1105       {"privacyPageMore", IDS_SETTINGS_PRIVACY_MORE},
1106       {"doNotTrack", IDS_SETTINGS_ENABLE_DO_NOT_TRACK},
1107       {"doNotTrackDialogTitle", IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_TITLE},
1108       // TODO(crbug.com/1062607): This string is no longer used. Remove.
1109       {"permissionsPageTitle", IDS_SETTINGS_PERMISSIONS},
1110       {"permissionsPageDescription", IDS_SETTINGS_PERMISSIONS_DESCRIPTION},
1111       {"securityPageTitle", IDS_SETTINGS_SECURITY},
1112       {"securityPageDescription", IDS_SETTINGS_SECURITY_DESCRIPTION},
1113       {"securityPageAdvancedSectionLabel",
1114        IDS_SETTINGS_SECURITY_ADVANCED_SECTION_LABEL},
1115       {"advancedProtectionProgramTitle",
1116        IDS_SETTINGS_ADVANCED_PROTECTION_PROGRAM},
1117       {"advancedProtectionProgramDesc",
1118        IDS_SETTINGS_ADVANCED_PROTECTION_PROGRAM_DESC},
1119       {"manageCertificates", IDS_SETTINGS_MANAGE_CERTIFICATES},
1120       {"manageCertificatesDescription",
1121        IDS_SETTINGS_MANAGE_CERTIFICATES_DESCRIPTION},
1122       {"secureDns", IDS_SETTINGS_SECURE_DNS},
1123       {"secureDnsDescription", IDS_SETTINGS_SECURE_DNS_DESCRIPTION},
1124       {"secureDnsDisabledForManagedEnvironment",
1125        IDS_SETTINGS_SECURE_DNS_DISABLED_FOR_MANAGED_ENVIRONMENT},
1126       {"secureDnsDisabledForParentalControl",
1127        IDS_SETTINGS_SECURE_DNS_DISABLED_FOR_PARENTAL_CONTROL},
1128       {"secureDnsAutomaticModeDescription",
1129        IDS_SETTINGS_AUTOMATIC_MODE_DESCRIPTION},
1130       {"secureDnsAutomaticModeDescriptionSecondary",
1131        IDS_SETTINGS_AUTOMATIC_MODE_DESCRIPTION_SECONDARY},
1132       {"secureDnsSecureModeA11yLabel",
1133        IDS_SETTINGS_SECURE_MODE_DESCRIPTION_ACCESSIBILITY_LABEL},
1134       {"secureDnsDropdownA11yLabel",
1135        IDS_SETTINGS_SECURE_DNS_DROPDOWN_ACCESSIBILITY_LABEL},
1136       {"secureDnsSecureDropdownModeDescription",
1137        IDS_SETTINGS_SECURE_DROPDOWN_MODE_DESCRIPTION},
1138       {"secureDnsSecureDropdownModePrivacyPolicy",
1139        IDS_SETTINGS_SECURE_DROPDOWN_MODE_PRIVACY_POLICY},
1140       {"secureDnsCustomPlaceholder",
1141        IDS_SETTINGS_SECURE_DNS_CUSTOM_PLACEHOLDER},
1142       {"secureDnsCustomFormatError",
1143        IDS_SETTINGS_SECURE_DNS_CUSTOM_FORMAT_ERROR},
1144       {"secureDnsCustomConnectionError",
1145        IDS_SETTINGS_SECURE_DNS_CUSTOM_CONNECTION_ERROR},
1146       {"contentSettings", IDS_SETTINGS_CONTENT_SETTINGS},
1147       {"siteSettings", IDS_SETTINGS_SITE_SETTINGS},
1148       {"siteSettingsDescription", IDS_SETTINGS_SITE_SETTINGS_DESCRIPTION},
1149       {"clearData", IDS_SETTINGS_CLEAR_DATA},
1150       {"clearBrowsingData", IDS_SETTINGS_CLEAR_BROWSING_DATA},
1151       {"clearBrowsingDataDescription", IDS_SETTINGS_CLEAR_DATA_DESCRIPTION},
1152       {"titleAndCount", IDS_SETTINGS_TITLE_AND_COUNT},
1153       {"safeBrowsingEnableExtendedReporting",
1154        IDS_SETTINGS_SAFEBROWSING_ENABLE_REPORTING},
1155       {"safeBrowsingEnableExtendedReportingDesc",
1156        IDS_SETTINGS_SAFEBROWSING_ENABLE_REPORTING_DESC},
1157       {"safeBrowsingEnhanced", IDS_SETTINGS_SAFEBROWSING_ENHANCED},
1158       {"safeBrowsingEnhancedDesc", IDS_SETTINGS_SAFEBROWSING_ENHANCED_DESC},
1159       {"safeBrowsingEnhancedBulOne",
1160        IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_ONE},
1161       {"safeBrowsingEnhancedBulTwo",
1162        IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_TWO},
1163       {"safeBrowsingEnhancedBulThree",
1164        IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_THREE},
1165       {"safeBrowsingEnhancedBulFour",
1166        IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_FOUR},
1167       {"safeBrowsingEnhancedBulFive",
1168        IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_FIVE},
1169       {"safeBrowsingStandard", IDS_SETTINGS_SAFEBROWSING_STANDARD},
1170       {"safeBrowsingStandardDesc", IDS_SETTINGS_SAFEBROWSING_STANDARD_DESC},
1171       {"safeBrowsingStandardBulOne",
1172        IDS_SETTINGS_SAFEBROWSING_STANDARD_BULLET_ONE},
1173       {"safeBrowsingStandardBulTwo",
1174        IDS_SETTINGS_SAFEBROWSING_STANDARD_BULLET_TWO},
1175       {"safeBrowsingStandardReportingLabel",
1176        IDS_SETTINGS_SAFEBROWSING_STANDARD_HELP_IMPROVE},
1177       {"safeBrowsingNone", IDS_SETTINGS_SAFEBROWSING_NONE},
1178       {"safeBrowsingNoneDesc", IDS_SETTINGS_SAFEBROWSING_NONE_DESC},
1179       {"safeBrowsingDisableDialog",
1180        IDS_SETTINGS_SAFEBROWSING_DISABLE_DIALOG_TITLE},
1181       {"safeBrowsingDisableDialogDesc",
1182        IDS_SETTINGS_SAFEBROWSING_DISABLE_DIALOG_DESC},
1183       {"safeBrowsingDisableDialogConfrim",
1184        IDS_SETTINGS_SAFEBROWSING_DISABLE_DIALOG_CONFIRM},
1185       {"safeBrowsingEnableProtection",
1186        IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION},
1187       {"safeBrowsingEnableProtectionDesc",
1188        IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION_DESC},
1189       {"safeBrowsingSectionLabel", IDS_SETTINGS_SAFEBROWSING_SECTION_LABEL},
1190       {"syncAndGoogleServicesPrivacyDescription",
1191        IDS_SETTINGS_SYNC_AND_GOOGLE_SERVICES_PRIVACY_DESC_UNIFIED_CONSENT},
1192       {"urlKeyedAnonymizedDataCollection",
1193        IDS_SETTINGS_ENABLE_URL_KEYED_ANONYMIZED_DATA_COLLECTION},
1194       {"urlKeyedAnonymizedDataCollectionDesc",
1195        IDS_SETTINGS_ENABLE_URL_KEYED_ANONYMIZED_DATA_COLLECTION_DESC},
1196       {"noRecentPermissions", IDS_SETTINGS_RECENT_PERMISSIONS_NO_CHANGES},
1197       {"recentPermissionChangeAutoblockedSentenceStart",
1198        IDS_SETTINGS_RECENT_PERMISSIONS_CHANGE_AUTOBLOCKED_SENTENCE_START},
1199       {"recentPermissionChangeBlockedSentenceStart",
1200        IDS_SETTINGS_RECENT_PERMISSIONS_CHANGE_BLOCKED_SENTENCE_START},
1201       {"recentPermissionChangeAllowedSentenceStart",
1202        IDS_SETTINGS_RECENT_PERMISSIONS_CHANGE_ALLOWED_SENTENCE_START},
1203       {"recentPermissionChangeAutoblocked",
1204        IDS_SETTINGS_RECENT_PERMISSIONS_CHANGE_AUTOBLOCKED},
1205       {"recentPermissionChangeBlocked",
1206        IDS_SETTINGS_RECENT_PERMISSIONS_CHANGE_BLOCKED},
1207       {"recentPermissionChangeAllowed",
1208        IDS_SETTINGS_RECENT_PERMISSIONS_CHANGE_ALLOWED},
1209       {"recentPermissionsTwoItems", IDS_SETTINGS_RECENT_PERMISSIONS_TWO_ITEMS},
1210       {"recentPermissionsThreeItems",
1211        IDS_SETTINGS_RECENT_PERMISSIONS_THREE_ITEMS},
1212       {"recentPermissionsOverThreeItems",
1213        IDS_SETTINGS_RECENT_PERMISSIONS_OVER_THREE_ITEMS},
1214       {"recentPermissionsOneItemIncognito",
1215        IDS_SETTINGS_RECENT_PERMISSIONS_ONE_ITEM_INCOGNITO},
1216       {"recentPermissionsTwoItemsIncognito",
1217        IDS_SETTINGS_RECENT_PERMISSIONS_TWO_ITEMS_INCOGNITO},
1218       {"recentPermissionsThreeItemsIncognito",
1219        IDS_SETTINGS_RECENT_PERMISSIONS_THREE_ITEMS_INCOGNITO},
1220       {"recentPermissionsOverThreeItemsIncognito",
1221        IDS_SETTINGS_RECENT_PERMISSIONS_OVER_THREE_ITEMS_INCOGNITO},
1222       {"networkPredictionEnabled",
1223        IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_LABEL},
1224       {"networkPredictionEnabledDesc",
1225        IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_DESC},
1226       {"networkPredictionEnabledDescCookiesPage",
1227        IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_DESC_COOKIES_PAGE},
1228       {"safetyCheckSectionTitle", IDS_SETTINGS_SAFETY_CHECK_SECTION_TITLE},
1229       {"safetyCheckParentPrimaryLabelBefore",
1230        IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_BEFORE},
1231       {"safetyCheckRunning", IDS_SETTINGS_SAFETY_CHECK_RUNNING},
1232       {"safetyCheckParentPrimaryLabelAfter",
1233        IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_AFTER},
1234       {"safetyCheckAriaLiveRunning",
1235        IDS_SETTINGS_SAFETY_CHECK_ARIA_LIVE_RUNNING},
1236       {"safetyCheckAriaLiveAfter", IDS_SETTINGS_SAFETY_CHECK_ARIA_LIVE_AFTER},
1237       {"safetyCheckParentButton", IDS_SETTINGS_SAFETY_CHECK_PARENT_BUTTON},
1238       {"safetyCheckParentButtonAriaLabel",
1239        IDS_SETTINGS_SAFETY_CHECK_PARENT_BUTTON_ARIA_LABEL},
1240       {"safetyCheckIconRunningAriaLabel",
1241        IDS_SETTINGS_SAFETY_CHECK_ICON_RUNNING_ARIA_LABEL},
1242       {"safetyCheckIconSafeAriaLabel",
1243        IDS_SETTINGS_SAFETY_CHECK_ICON_SAFE_ARIA_LABEL},
1244       {"safetyCheckIconInfoAriaLabel",
1245        IDS_SETTINGS_SAFETY_CHECK_ICON_INFO_ARIA_LABEL},
1246       {"safetyCheckIconWarningAriaLabel",
1247        IDS_SETTINGS_SAFETY_CHECK_ICON_WARNING_ARIA_LABEL},
1248       {"safetyCheckUpdatesPrimaryLabel",
1249        IDS_SETTINGS_SAFETY_CHECK_UPDATES_PRIMARY_LABEL},
1250       {"safetyCheckUpdatesButtonAriaLabel",
1251        IDS_UPDATE_RECOMMENDED_DIALOG_TITLE},
1252       {"safetyCheckPasswordsButton",
1253        IDS_SETTINGS_SAFETY_CHECK_PASSWORDS_BUTTON},
1254       {"safetyCheckSafeBrowsingButton",
1255        IDS_SETTINGS_SAFETY_CHECK_SAFE_BROWSING_BUTTON},
1256       {"safetyCheckSafeBrowsingButtonAriaLabel",
1257        IDS_SETTINGS_SAFETY_CHECK_SAFE_BROWSING_BUTTON_ARIA_LABEL},
1258       {"safetyCheckExtensionsPrimaryLabel",
1259        IDS_SETTINGS_SAFETY_CHECK_EXTENSIONS_PRIMARY_LABEL},
1260       {"safetyCheckExtensionsButton",
1261        IDS_SETTINGS_SAFETY_CHECK_EXTENSIONS_BUTTON},
1262       {"safetyCheckExtensionsButtonAriaLabel",
1263        IDS_SETTINGS_SAFETY_CHECK_EXTENSIONS_BUTTON_ARIA_LABEL},
1264   };
1265   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1266 
1267   html_source->AddString("cookiesSettingsHelpCenterURL",
1268                          chrome::kCookiesSettingsHelpCenterURL);
1269 
1270   html_source->AddString("safeBrowsingHelpCenterURL",
1271                          chrome::kSafeBrowsingHelpCenterURL);
1272 
1273   html_source->AddString("syncAndGoogleServicesLearnMoreURL",
1274                          chrome::kSyncAndGoogleServicesLearnMoreURL);
1275 
1276   html_source->AddString(
1277       "doNotTrackDialogMessage",
1278       l10n_util::GetStringFUTF16(
1279           IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_TEXT,
1280 #if defined(OS_CHROMEOS)
1281           GetHelpUrlWithBoard(chrome::kDoNotTrackLearnMoreURL)));
1282 #else
1283           base::ASCIIToUTF16(chrome::kDoNotTrackLearnMoreURL)));
1284 #endif
1285   html_source->AddString(
1286       "exceptionsLearnMoreURL",
1287       base::ASCIIToUTF16(chrome::kContentSettingsExceptionsLearnMoreURL));
1288   html_source->AddBoolean(
1289       "installedAppsInCbd",
1290       base::FeatureList::IsEnabled(features::kStoragePressureUI));
1291   html_source->AddBoolean(
1292       "driveSuggestAvailable",
1293       base::FeatureList::IsEnabled(omnibox::kDocumentProvider));
1294   html_source->AddBoolean("showSecureDnsSetting",
1295                           features::kDnsOverHttpsShowUiParam.Get());
1296 
1297   // The link to the Advanced Protection Program landing page, with a referrer
1298   // from Chrome settings.
1299   GURL advanced_protection_url(
1300       "https://landing.google.com/advancedprotection/");
1301   advanced_protection_url = net::AppendQueryParameter(advanced_protection_url,
1302                                                       "utm_source", "Chrome");
1303   advanced_protection_url = net::AppendQueryParameter(
1304       advanced_protection_url, "utm_medium", "ChromeSecuritySettings");
1305   advanced_protection_url = net::AppendQueryParameter(
1306       advanced_protection_url, "utm_campaign", "ChromeSettings");
1307   html_source->AddString("advancedProtectionURL",
1308                          advanced_protection_url.spec());
1309 
1310   AddPersonalizationOptionsStrings(html_source);
1311 }
1312 
AddSearchInSettingsStrings(content::WebUIDataSource * html_source)1313 void AddSearchInSettingsStrings(content::WebUIDataSource* html_source) {
1314   static constexpr webui::LocalizedString kLocalizedStrings[] = {
1315       {"searchPrompt", IDS_SETTINGS_SEARCH_PROMPT},
1316       {"searchNoResults", IDS_SEARCH_NO_RESULTS},
1317       {"searchResults", IDS_SEARCH_RESULTS},
1318       // TODO(dpapad): IDS_DOWNLOAD_CLEAR_SEARCH and IDS_HISTORY_CLEAR_SEARCH
1319       // are identical, merge them to one and re-use here.
1320       {"clearSearch", IDS_DOWNLOAD_CLEAR_SEARCH},
1321   };
1322   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1323 
1324   base::string16 help_text = l10n_util::GetStringFUTF16(
1325       IDS_SETTINGS_SEARCH_NO_RESULTS_HELP,
1326       base::ASCIIToUTF16(chrome::kSettingsSearchHelpURL));
1327   html_source->AddString("searchNoResultsHelp", help_text);
1328 }
1329 
AddSearchStrings(content::WebUIDataSource * html_source)1330 void AddSearchStrings(content::WebUIDataSource* html_source) {
1331   static constexpr webui::LocalizedString kLocalizedStrings[] = {
1332       {"searchEnginesManage", IDS_SETTINGS_SEARCH_MANAGE_SEARCH_ENGINES},
1333       {"searchPageTitle", IDS_SETTINGS_SEARCH},
1334 
1335   };
1336   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1337 
1338   html_source->AddString("searchExplanation",
1339                          l10n_util::GetStringFUTF16(
1340                              IDS_SETTINGS_SEARCH_EXPLANATION,
1341                              base::ASCIIToUTF16(chrome::kOmniboxLearnMoreURL)));
1342 }
1343 
AddSearchEnginesStrings(content::WebUIDataSource * html_source)1344 void AddSearchEnginesStrings(content::WebUIDataSource* html_source) {
1345   static constexpr webui::LocalizedString kLocalizedStrings[] = {
1346       {"searchEnginesPageTitle", IDS_SETTINGS_SEARCH_ENGINES},
1347       {"searchEnginesAddSearchEngine",
1348        IDS_SETTINGS_SEARCH_ENGINES_ADD_SEARCH_ENGINE},
1349       {"searchEnginesEditSearchEngine",
1350        IDS_SETTINGS_SEARCH_ENGINES_EDIT_SEARCH_ENGINE},
1351       {"searchEngines", IDS_SETTINGS_SEARCH_ENGINES},
1352       {"searchEnginesDefault", IDS_SETTINGS_SEARCH_ENGINES_DEFAULT_ENGINES},
1353       {"searchEnginesOther", IDS_SETTINGS_SEARCH_ENGINES_OTHER_ENGINES},
1354       {"searchEnginesNoOtherEngines",
1355        IDS_SETTINGS_SEARCH_ENGINES_NO_OTHER_ENGINES},
1356       {"searchEnginesExtension", IDS_SETTINGS_SEARCH_ENGINES_EXTENSION_ENGINES},
1357       {"searchEnginesSearch", IDS_SETTINGS_SEARCH_ENGINES_SEARCH},
1358       {"searchEnginesSearchEngine", IDS_SETTINGS_SEARCH_ENGINES_SEARCH_ENGINE},
1359       {"searchEnginesKeyword", IDS_SETTINGS_SEARCH_ENGINES_KEYWORD},
1360       {"searchEnginesQueryURL", IDS_SETTINGS_SEARCH_ENGINES_QUERY_URL},
1361       {"searchEnginesQueryURLExplanation",
1362        IDS_SETTINGS_SEARCH_ENGINES_QUERY_URL_EXPLANATION},
1363       {"searchEnginesMakeDefault", IDS_SETTINGS_SEARCH_ENGINES_MAKE_DEFAULT},
1364       {"searchEnginesRemoveFromList",
1365        IDS_SETTINGS_SEARCH_ENGINES_REMOVE_FROM_LIST},
1366       {"searchEnginesManageExtension",
1367        IDS_SETTINGS_SEARCH_ENGINES_MANAGE_EXTENSION},
1368   };
1369   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1370 }
1371 
AddSiteSettingsStrings(content::WebUIDataSource * html_source,Profile * profile)1372 void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
1373                             Profile* profile) {
1374   static constexpr webui::LocalizedString kLocalizedStrings[] = {
1375     {"addSite", IDS_SETTINGS_ADD_SITE},
1376     {"addSiteExceptionPlaceholder",
1377      IDS_SETTINGS_ADD_SITE_EXCEPTION_PLACEHOLDER},
1378     {"addSiteTitle", IDS_SETTINGS_ADD_SITE_TITLE},
1379 #if defined(OS_CHROMEOS)
1380     {"androidSmsNote", IDS_SETTINGS_ANDROID_SMS_NOTE},
1381 #endif
1382     {"appCacheOrigin", IDS_SETTINGS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL},
1383     {"cookieAppCache", IDS_SETTINGS_COOKIES_APPLICATION_CACHE},
1384     {"cookieCacheStorage", IDS_SETTINGS_COOKIES_CACHE_STORAGE},
1385     {"cookieDatabaseStorage", IDS_SETTINGS_COOKIES_DATABASE_STORAGE},
1386     {"cookieFileSystem", IDS_SETTINGS_COOKIES_FILE_SYSTEM},
1387     {"cookieFlashLso", IDS_SETTINGS_COOKIES_FLASH_LSO},
1388     {"cookieLocalStorage", IDS_SETTINGS_COOKIES_LOCAL_STORAGE},
1389     {"cookieMediaLicense", IDS_SETTINGS_COOKIES_MEDIA_LICENSE},
1390     {"cookieServiceWorker", IDS_SETTINGS_COOKIES_SERVICE_WORKER},
1391     {"cookieSharedWorker", IDS_SETTINGS_COOKIES_SHARED_WORKER},
1392     {"embeddedOnAnyHost", IDS_SETTINGS_EXCEPTIONS_EMBEDDED_ON_ANY_HOST},
1393     {"embeddedOnHost", IDS_SETTINGS_EXCEPTIONS_EMBEDDED_ON_HOST},
1394     {"editSiteTitle", IDS_SETTINGS_EDIT_SITE_TITLE},
1395     {"appCacheManifest", IDS_SETTINGS_COOKIES_APPLICATION_CACHE_MANIFEST_LABEL},
1396     {"cacheStorageLastModified",
1397      IDS_SETTINGS_COOKIES_LOCAL_STORAGE_LAST_MODIFIED_LABEL},
1398     {"cacheStorageOrigin", IDS_SETTINGS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL},
1399     {"cacheStorageSize", IDS_SETTINGS_COOKIES_LOCAL_STORAGE_SIZE_ON_DISK_LABEL},
1400     {"cookieAccessibleToScript",
1401      IDS_SETTINGS_COOKIES_COOKIE_ACCESSIBLE_TO_SCRIPT_LABEL},
1402     {"cookieContent", IDS_SETTINGS_COOKIES_COOKIE_CONTENT_LABEL},
1403     {"cookieCreated", IDS_SETTINGS_COOKIES_COOKIE_CREATED_LABEL},
1404     {"cookieDomain", IDS_SETTINGS_COOKIES_COOKIE_DOMAIN_LABEL},
1405     {"cookieExpires", IDS_SETTINGS_COOKIES_COOKIE_EXPIRES_LABEL},
1406     {"cookieName", IDS_SETTINGS_COOKIES_COOKIE_NAME_LABEL},
1407     {"cookiePath", IDS_SETTINGS_COOKIES_COOKIE_PATH_LABEL},
1408     {"cookieSendFor", IDS_SETTINGS_COOKIES_COOKIE_SENDFOR_LABEL},
1409     {"databaseOrigin", IDS_SETTINGS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL},
1410     {"fileSystemOrigin", IDS_SETTINGS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL},
1411     {"fileSystemPersistentUsage",
1412      IDS_SETTINGS_COOKIES_FILE_SYSTEM_PERSISTENT_USAGE_LABEL},
1413     {"fileSystemTemporaryUsage",
1414      IDS_SETTINGS_COOKIES_FILE_SYSTEM_TEMPORARY_USAGE_LABEL},
1415     {"indexedDbSize", IDS_SETTINGS_COOKIES_LOCAL_STORAGE_SIZE_ON_DISK_LABEL},
1416     {"indexedDbLastModified",
1417      IDS_SETTINGS_COOKIES_LOCAL_STORAGE_LAST_MODIFIED_LABEL},
1418     {"indexedDbOrigin", IDS_SETTINGS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL},
1419     {"localStorageLastModified",
1420      IDS_SETTINGS_COOKIES_LOCAL_STORAGE_LAST_MODIFIED_LABEL},
1421     {"localStorageOrigin", IDS_SETTINGS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL},
1422     {"localStorageSize", IDS_SETTINGS_COOKIES_LOCAL_STORAGE_SIZE_ON_DISK_LABEL},
1423     {"mediaLicenseOrigin", IDS_SETTINGS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL},
1424     {"mediaLicenseSize", IDS_SETTINGS_COOKIES_LOCAL_STORAGE_SIZE_ON_DISK_LABEL},
1425     {"mediaLicenseLastModified",
1426      IDS_SETTINGS_COOKIES_LOCAL_STORAGE_LAST_MODIFIED_LABEL},
1427     {"noBluetoothDevicesFound", IDS_SETTINGS_NO_BLUETOOTH_DEVICES_FOUND},
1428     {"noHidDevicesFound", IDS_SETTINGS_NO_HID_DEVICES_FOUND},
1429     {"noSerialPortsFound", IDS_SETTINGS_NO_SERIAL_PORTS_FOUND},
1430     {"noUsbDevicesFound", IDS_SETTINGS_NO_USB_DEVICES_FOUND},
1431     {"serviceWorkerOrigin", IDS_SETTINGS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL},
1432     {"serviceWorkerSize",
1433      IDS_SETTINGS_COOKIES_LOCAL_STORAGE_SIZE_ON_DISK_LABEL},
1434     {"sharedWorkerWorker", IDS_SETTINGS_COOKIES_SHARED_WORKER_WORKER_LABEL},
1435     {"sharedWorkerName", IDS_SETTINGS_COOKIES_COOKIE_NAME_LABEL},
1436     {"siteSettingsCategoryPageTitle", IDS_SETTINGS_SITE_SETTINGS_CATEGORY},
1437     {"siteSettingsRecentPermissionsSectionLabel",
1438      IDS_SETTINGS_SITE_SETTINGS_RECENT_ACTIVITY},
1439     {"siteSettingsCategoryCamera", IDS_SETTINGS_SITE_SETTINGS_CAMERA},
1440     {"siteSettingsCameraLabel", IDS_SETTINGS_SITE_SETTINGS_CAMERA_LABEL},
1441     {"cookiePageTitle", IDS_SETTINGS_COOKIES_PAGE},
1442     {"cookiePageGeneralControls", IDS_SETTINGS_COOKIES_CONTROLS},
1443     {"cookiePageAllowAll", IDS_SETTINGS_COOKIES_ALLOW_ALL},
1444     {"cookiePageAllowAllBulOne", IDS_SETTINGS_COOKIES_ALLOW_ALL_BULLET_ONE},
1445     {"cookiePageAllowAllBulTwo", IDS_SETTINGS_COOKIES_ALLOW_ALL_BULLET_TWO},
1446     {"cookiePageBlockThirdIncognito",
1447      IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_INCOGNITO},
1448     {"cookiePageBlockThirdIncognitoBulOne",
1449      IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_INCOGNITO_BULLET_ONE},
1450     {"cookiePageBlockThirdIncognitoBulTwo",
1451      IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_INCOGNITO_BULLET_TWO},
1452     {"cookiePageBlockThird", IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY},
1453     {"cookiePageBlockThirdBulOne",
1454      IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_BULLET_ONE},
1455     {"cookiePageBlockThirdBulTwo",
1456      IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_BULLET_TWO},
1457     {"cookiePageBlockAll", IDS_SETTINGS_COOKIES_BLOCK_ALL},
1458     {"cookiePageBlockAllBulOne", IDS_SETTINGS_COOKIES_BLOCK_ALL_BULLET_ONE},
1459     {"cookiePageBlockAllBulTwo", IDS_SETTINGS_COOKIES_BLOCK_ALL_BULLET_TWO},
1460     {"cookiePageBlockAllBulThree", IDS_SETTINGS_COOKIES_BLOCK_ALL_BULLET_THREE},
1461     {"cookiePageClearOnExit", IDS_SETTINGS_COOKIES_CLEAR_ON_EXIT},
1462     {"cookiePageAllowExceptions", IDS_SETTINGS_COOKIES_ALLOW_EXCEPTIONS},
1463     {"cookiePageBlockExceptions", IDS_SETTINGS_COOKIES_BLOCK_EXCEPTIONS},
1464     {"cookiePageSessionOnlyExceptions",
1465      IDS_SETTINGS_COOKIES_SESSION_ONLY_EXCEPTIONS},
1466     {"cookiesManageSiteSpecificExceptions",
1467      IDS_SETTINGS_COOKIES_SITE_SPECIFIC_EXCEPTIONS},
1468     {"siteSettingsCategoryCookies", IDS_SETTINGS_SITE_SETTINGS_COOKIES},
1469     {"siteSettingsCategoryHandlers", IDS_SETTINGS_SITE_SETTINGS_HANDLERS},
1470     {"siteSettingsCategoryImages", IDS_SETTINGS_SITE_SETTINGS_IMAGES},
1471     {"siteSettingsCategoryInsecureContent",
1472      IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT},
1473     {"siteSettingsCategoryLocation", IDS_SETTINGS_SITE_SETTINGS_LOCATION},
1474     {"siteSettingsCategoryJavascript", IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT},
1475     {"siteSettingsCategoryMicrophone", IDS_SETTINGS_SITE_SETTINGS_MIC},
1476     {"siteSettingsMicrophoneLabel", IDS_SETTINGS_SITE_SETTINGS_MIC_LABEL},
1477     {"siteSettingsCategoryNotifications",
1478      IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS},
1479     {"siteSettingsNotificationsAsk",
1480      IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_ASK},
1481     {"siteSettingsNotificationsBlock",
1482      IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCK},
1483     {"siteSettingsEnableQuietNotificationPrompts",
1484      IDS_SETTINGS_SITE_SETTINGS_ENABLE_QUIET_NOTIFICATION_PROMPTS},
1485     {"siteSettingsCategoryPopups", IDS_SETTINGS_SITE_SETTINGS_POPUPS},
1486     {"siteSettingsCategoryZoomLevels", IDS_SETTINGS_SITE_SETTINGS_ZOOM_LEVELS},
1487     {"siteSettingsAllSites", IDS_SETTINGS_SITE_SETTINGS_ALL_SITES},
1488     {"siteSettingsAllSitesDescription",
1489      IDS_SETTINGS_SITE_SETTINGS_ALL_SITES_DESCRIPTION},
1490     {"siteSettingsAllSitesSearch", IDS_SETTINGS_SITE_SETTINGS_ALL_SITES_SEARCH},
1491     {"siteSettingsAllSitesSort", IDS_SETTINGS_SITE_SETTINGS_ALL_SITES_SORT},
1492     {"siteSettingsAllSitesSortMethodMostVisited",
1493      IDS_SETTINGS_SITE_SETTINGS_ALL_SITES_SORT_METHOD_MOST_VISITED},
1494     {"siteSettingsAllSitesSortMethodStorage",
1495      IDS_SETTINGS_SITE_SETTINGS_ALL_SITES_SORT_METHOD_STORAGE},
1496     {"siteSettingsAllSitesSortMethodName",
1497      IDS_SETTINGS_SITE_SETTINGS_ALL_SITES_SORT_METHOD_NAME},
1498     {"siteSettingsSiteRepresentationSeparator",
1499      IDS_SETTINGS_SITE_SETTINGS_SITE_REPRESENTATION_SEPARATOR},
1500     {"siteSettingsAutomaticDownloads",
1501      IDS_SETTINGS_SITE_SETTINGS_AUTOMATIC_DOWNLOADS},
1502     {"siteSettingsBackgroundSync", IDS_SETTINGS_SITE_SETTINGS_BACKGROUND_SYNC},
1503     {"siteSettingsCamera", IDS_SETTINGS_SITE_SETTINGS_CAMERA},
1504     {"siteSettingsClipboard", IDS_SETTINGS_SITE_SETTINGS_CLIPBOARD},
1505     {"siteSettingsClipboardAsk", IDS_SETTINGS_SITE_SETTINGS_CLIPBOARD_ASK},
1506     {"siteSettingsClipboardAskRecommended",
1507      IDS_SETTINGS_SITE_SETTINGS_CLIPBOARD_ASK_RECOMMENDED},
1508     {"siteSettingsClipboardBlock", IDS_SETTINGS_SITE_SETTINGS_CLIPBOARD_BLOCK},
1509     {"siteSettingsCookies", IDS_SETTINGS_SITE_SETTINGS_COOKIES},
1510     {"siteSettingsHandlers", IDS_SETTINGS_SITE_SETTINGS_HANDLERS},
1511     {"siteSettingsLocation", IDS_SETTINGS_SITE_SETTINGS_LOCATION},
1512     {"siteSettingsMic", IDS_SETTINGS_SITE_SETTINGS_MIC},
1513     {"siteSettingsNotifications", IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS},
1514     {"siteSettingsImages", IDS_SETTINGS_SITE_SETTINGS_IMAGES},
1515     {"siteSettingsInsecureContent",
1516      IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT},
1517     {"siteSettingsInsecureContentBlock",
1518      IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT_BLOCK},
1519     {"siteSettingsJavascript", IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT},
1520     {"siteSettingsSound", IDS_SETTINGS_SITE_SETTINGS_SOUND},
1521     {"siteSettingsSoundAllow", IDS_SETTINGS_SITE_SETTINGS_SOUND_ALLOW},
1522     {"siteSettingsSoundAllowRecommended",
1523      IDS_SETTINGS_SITE_SETTINGS_SOUND_ALLOW_RECOMMENDED},
1524     {"siteSettingsSoundBlock", IDS_SETTINGS_SITE_SETTINGS_SOUND_BLOCK},
1525     {"siteSettingsFlash", IDS_SETTINGS_SITE_SETTINGS_FLASH},
1526     {"siteSettingsFlashAskFirst", IDS_SETTINGS_SITE_SETTINGS_ASK_FIRST},
1527     {"siteSettingsFlashBlock", IDS_SETTINGS_SITE_SETTINGS_FLASH_BLOCK},
1528     {"siteSettingsFlashBlockRecommended",
1529      IDS_SETTINGS_SITE_SETTINGS_FLASH_BLOCK_RECOMMENDED},
1530     {"siteSettingsFlashPermissionsEphemeral",
1531      IDS_SETTINGS_SITE_SETTINGS_FLASH_PERMISSIONS_ARE_EPHEMERAL},
1532     {"siteSettingsPdfDocuments", IDS_SETTINGS_SITE_SETTINGS_PDF_DOCUMENTS},
1533     {"siteSettingsPdfDownloadPdfs",
1534      IDS_SETTINGS_SITE_SETTINGS_PDF_DOWNLOAD_PDFS},
1535     {"siteSettingsProtectedContent",
1536      IDS_SETTINGS_SITE_SETTINGS_PROTECTED_CONTENT},
1537     {"siteSettingsProtectedContentIdentifiers",
1538      IDS_SETTINGS_SITE_SETTINGS_PROTECTED_CONTENT_IDENTIFIERS},
1539     {"siteSettingsProtectedContentEnable",
1540      IDS_SETTINGS_SITE_SETTINGS_PROTECTED_CONTENT_ENABLE},
1541 #if defined(OS_CHROMEOS) || defined(OS_WIN)
1542     {"siteSettingsProtectedContentIdentifiersExplanation",
1543      IDS_SETTINGS_SITE_SETTINGS_PROTECTED_CONTENT_IDENTIFIERS_EXPLANATION},
1544     {"siteSettingsProtectedContentEnableIdentifiers",
1545      IDS_SETTINGS_SITE_SETTINGS_PROTECTED_CONTENT_ENABLE_IDENTIFIERS},
1546 #endif
1547     {"siteSettingsPopups", IDS_SETTINGS_SITE_SETTINGS_POPUPS},
1548     {"siteSettingsUnsandboxedPlugins",
1549      IDS_SETTINGS_SITE_SETTINGS_UNSANDBOXED_PLUGINS},
1550     {"siteSettingsHidDevices", IDS_SETTINGS_SITE_SETTINGS_HID_DEVICES},
1551     {"siteSettingsHidDevicesAsk", IDS_SETTINGS_SITE_SETTINGS_HID_DEVICES_ASK},
1552     {"siteSettingsHidDevicesAskRecommended",
1553      IDS_SETTINGS_SITE_SETTINGS_HID_DEVICES_ASK_RECOMMENDED},
1554     {"siteSettingsHidDevicesBlock",
1555      IDS_SETTINGS_SITE_SETTINGS_HID_DEVICES_BLOCK},
1556     {"siteSettingsMidiDevices", IDS_SETTINGS_SITE_SETTINGS_MIDI_DEVICES},
1557     {"siteSettingsMidiDevicesAsk", IDS_SETTINGS_SITE_SETTINGS_MIDI_DEVICES_ASK},
1558     {"siteSettingsMidiDevicesAskRecommended",
1559      IDS_SETTINGS_SITE_SETTINGS_MIDI_DEVICES_ASK_RECOMMENDED},
1560     {"siteSettingsMidiDevicesBlock",
1561      IDS_SETTINGS_SITE_SETTINGS_MIDI_DEVICES_BLOCK},
1562     {"siteSettingsSerialPorts", IDS_SETTINGS_SITE_SETTINGS_SERIAL_PORTS},
1563     {"siteSettingsSerialPortsAsk", IDS_SETTINGS_SITE_SETTINGS_SERIAL_PORTS_ASK},
1564     {"siteSettingsSerialPortsAskRecommended",
1565      IDS_SETTINGS_SITE_SETTINGS_SERIAL_PORTS_ASK_RECOMMENDED},
1566     {"siteSettingsSerialPortsBlock",
1567      IDS_SETTINGS_SITE_SETTINGS_SERIAL_PORTS_BLOCK},
1568     {"siteSettingsUsbDevices", IDS_SETTINGS_SITE_SETTINGS_USB_DEVICES},
1569     {"siteSettingsUsbDevicesAsk", IDS_SETTINGS_SITE_SETTINGS_USB_DEVICES_ASK},
1570     {"siteSettingsUsbDevicesAskRecommended",
1571      IDS_SETTINGS_SITE_SETTINGS_USB_DEVICES_ASK_RECOMMENDED},
1572     {"siteSettingsUsbDevicesBlock",
1573      IDS_SETTINGS_SITE_SETTINGS_USB_DEVICES_BLOCK},
1574     {"siteSettingsBluetoothDevices",
1575      IDS_SETTINGS_SITE_SETTINGS_BLUETOOTH_DEVICES},
1576     {"siteSettingsBluetoothDevicesAsk",
1577      IDS_SETTINGS_SITE_SETTINGS_BLUETOOTH_DEVICES_ASK},
1578     {"siteSettingsBluetoothDevicesAskRecommended",
1579      IDS_SETTINGS_SITE_SETTINGS_BLUETOOTH_DEVICES_ASK_RECOMMENDED},
1580     {"siteSettingsBluetoothDevicesBlock",
1581      IDS_SETTINGS_SITE_SETTINGS_BLUETOOTH_DEVICES_BLOCK},
1582     {"siteSettingsNativeFileSystemWrite",
1583      IDS_SETTINGS_SITE_SETTINGS_NATIVE_FILE_SYSTEM_WRITE},
1584     {"siteSettingsNativeFileSystemWriteAsk",
1585      IDS_SETTINGS_SITE_SETTINGS_NATIVE_FILE_SYSTEM_WRITE_ASK},
1586     {"siteSettingsNativeFileSystemWriteAskRecommended",
1587      IDS_SETTINGS_SITE_SETTINGS_NATIVE_FILE_SYSTEM_WRITE_ASK_RECOMMENDED},
1588     {"siteSettingsNativeFileSystemWriteBlock",
1589      IDS_SETTINGS_SITE_SETTINGS_NATIVE_FILE_SYSTEM_WRITE_BLOCK},
1590     {"siteSettingsRemoveZoomLevel",
1591      IDS_SETTINGS_SITE_SETTINGS_REMOVE_ZOOM_LEVEL},
1592     {"siteSettingsZoomLevels", IDS_SETTINGS_SITE_SETTINGS_ZOOM_LEVELS},
1593     {"siteSettingsNoZoomedSites", IDS_SETTINGS_SITE_SETTINGS_NO_ZOOMED_SITES},
1594     {"siteSettingsMaySaveCookies", IDS_SETTINGS_SITE_SETTINGS_MAY_SAVE_COOKIES},
1595     {"siteSettingsAskFirst", IDS_SETTINGS_SITE_SETTINGS_ASK_FIRST},
1596     {"siteSettingsAskFirstRecommended",
1597      IDS_SETTINGS_SITE_SETTINGS_ASK_FIRST_RECOMMENDED},
1598     {"siteSettingsAskBeforeAccessing",
1599      IDS_SETTINGS_SITE_SETTINGS_ASK_BEFORE_ACCESSING},
1600     {"siteSettingsAskBeforeAccessingRecommended",
1601      IDS_SETTINGS_SITE_SETTINGS_ASK_BEFORE_ACCESSING_RECOMMENDED},
1602     {"siteSettingsAskBeforeSending",
1603      IDS_SETTINGS_SITE_SETTINGS_ASK_BEFORE_SENDING},
1604     {"siteSettingsAskBeforeSendingRecommended",
1605      IDS_SETTINGS_SITE_SETTINGS_ASK_BEFORE_SENDING_RECOMMENDED},
1606     {"siteSettingsAllowRecentlyClosedSites",
1607      IDS_SETTINGS_SITE_SETTINGS_ALLOW_RECENTLY_CLOSED_SITES},
1608     {"siteSettingsAllowRecentlyClosedSitesRecommended",
1609      IDS_SETTINGS_SITE_SETTINGS_ALLOW_RECENTLY_CLOSED_SITES_RECOMMENDED},
1610     {"siteSettingsBackgroundSyncBlocked",
1611      IDS_SETTINGS_SITE_SETTINGS_BACKGROUND_SYNC_BLOCKED},
1612     {"siteSettingsHandlersAsk", IDS_SETTINGS_SITE_SETTINGS_HANDLERS_ASK},
1613     {"siteSettingsHandlersAskRecommended",
1614      IDS_SETTINGS_SITE_SETTINGS_HANDLERS_ASK_RECOMMENDED},
1615     {"siteSettingsHandlersBlocked",
1616      IDS_SETTINGS_SITE_SETTINGS_HANDLERS_BLOCKED},
1617     {"siteSettingsAutoDownloadAsk",
1618      IDS_SETTINGS_SITE_SETTINGS_AUTOMATIC_DOWNLOAD_ASK},
1619     {"siteSettingsAutoDownloadAskRecommended",
1620      IDS_SETTINGS_SITE_SETTINGS_AUTOMATIC_DOWNLOAD_ASK_RECOMMENDED},
1621     {"siteSettingsAutoDownloadBlock",
1622      IDS_SETTINGS_SITE_SETTINGS_AUTOMATIC_DOWNLOAD_BLOCK},
1623     {"siteSettingsUnsandboxedPluginsAsk",
1624      IDS_SETTINGS_SITE_SETTINGS_UNSANDBOXED_PLUGINS_ASK},
1625     {"siteSettingsUnsandboxedPluginsAskRecommended",
1626      IDS_SETTINGS_SITE_SETTINGS_UNSANDBOXED_PLUGINS_ASK_RECOMMENDED},
1627     {"siteSettingsUnsandboxedPluginsBlock",
1628      IDS_SETTINGS_SITE_SETTINGS_UNSANDBOXED_PLUGINS_BLOCK},
1629     {"siteSettingsDontShowImages", IDS_SETTINGS_SITE_SETTINGS_DONT_SHOW_IMAGES},
1630     {"siteSettingsShowAll", IDS_SETTINGS_SITE_SETTINGS_SHOW_ALL},
1631     {"siteSettingsShowAllRecommended",
1632      IDS_SETTINGS_SITE_SETTINGS_SHOW_ALL_RECOMMENDED},
1633     {"siteSettingsCookiesAllowed",
1634      IDS_SETTINGS_SITE_SETTINGS_COOKIES_ALLOW_SITES},
1635     {"siteSettingsCookiesAllowedRecommended",
1636      IDS_SETTINGS_SITE_SETTINGS_COOKIES_ALLOW_SITES_RECOMMENDED},
1637     {"siteSettingsAllow", IDS_SETTINGS_SITE_SETTINGS_ALLOW},
1638     {"siteSettingsBlock", IDS_SETTINGS_SITE_SETTINGS_BLOCK},
1639     {"siteSettingsBlockSound", IDS_SETTINGS_SITE_SETTINGS_BLOCK_SOUND},
1640     {"siteSettingsSessionOnly", IDS_SETTINGS_SITE_SETTINGS_SESSION_ONLY},
1641     {"siteSettingsAllowed", IDS_SETTINGS_SITE_SETTINGS_ALLOWED},
1642     {"siteSettingsAllowedRecommended",
1643      IDS_SETTINGS_SITE_SETTINGS_ALLOWED_RECOMMENDED},
1644     {"siteSettingsBlocked", IDS_SETTINGS_SITE_SETTINGS_BLOCKED},
1645     {"siteSettingsBlockedRecommended",
1646      IDS_SETTINGS_SITE_SETTINGS_BLOCKED_RECOMMENDED},
1647     {"siteSettingsSiteUrl", IDS_SETTINGS_SITE_SETTINGS_SITE_URL},
1648     {"siteSettingsActionAskDefault",
1649      IDS_SETTINGS_SITE_SETTINGS_ASK_DEFAULT_MENU},
1650     {"siteSettingsActionAllowDefault",
1651      IDS_SETTINGS_SITE_SETTINGS_ALLOW_DEFAULT_MENU},
1652     {"siteSettingsActionAutomaticDefault",
1653      IDS_SETTINGS_SITE_SETTINGS_AUTOMATIC_DEFAULT_MENU},
1654     {"siteSettingsActionBlockDefault",
1655      IDS_SETTINGS_SITE_SETTINGS_BLOCK_DEFAULT_MENU},
1656     {"siteSettingsActionMuteDefault",
1657      IDS_SETTINGS_SITE_SETTINGS_MUTE_DEFAULT_MENU},
1658     {"siteSettingsActionAllow", IDS_SETTINGS_SITE_SETTINGS_ALLOW_MENU},
1659     {"siteSettingsActionBlock", IDS_SETTINGS_SITE_SETTINGS_BLOCK_MENU},
1660     {"siteSettingsActionAsk", IDS_SETTINGS_SITE_SETTINGS_ASK_MENU},
1661     {"siteSettingsActionMute", IDS_SETTINGS_SITE_SETTINGS_MUTE_MENU},
1662     {"siteSettingsActionReset", IDS_SETTINGS_SITE_SETTINGS_RESET_MENU},
1663     {"siteSettingsActionSessionOnly",
1664      IDS_SETTINGS_SITE_SETTINGS_SESSION_ONLY_MENU},
1665     {"siteSettingsUsage", IDS_SETTINGS_SITE_SETTINGS_USAGE},
1666     {"siteSettingsUsageNone", IDS_SETTINGS_SITE_SETTINGS_USAGE_NONE},
1667     {"siteSettingsPermissions", IDS_SETTINGS_SITE_SETTINGS_PERMISSIONS},
1668     {"siteSettingsPermissionsMore",
1669      IDS_SETTINGS_SITE_SETTINGS_PERMISSIONS_MORE},
1670     {"siteSettingsContent", IDS_SETTINGS_SITE_SETTINGS_CONTENT},
1671     {"siteSettingsContentMore", IDS_SETTINGS_SITE_SETTINGS_CONTENT_MORE},
1672     {"siteSettingsSourceExtensionAllow",
1673      IDS_PAGE_INFO_PERMISSION_ALLOWED_BY_EXTENSION},
1674     {"siteSettingsSourceExtensionBlock",
1675      IDS_PAGE_INFO_PERMISSION_BLOCKED_BY_EXTENSION},
1676     {"siteSettingsSourceExtensionAsk",
1677      IDS_PAGE_INFO_PERMISSION_ASK_BY_EXTENSION},
1678     {"siteSettingsSourcePolicyAllow",
1679      IDS_PAGE_INFO_PERMISSION_ALLOWED_BY_POLICY},
1680     {"siteSettingsSourcePolicyBlock",
1681      IDS_PAGE_INFO_PERMISSION_BLOCKED_BY_POLICY},
1682     {"siteSettingsSourcePolicyAsk", IDS_PAGE_INFO_PERMISSION_ASK_BY_POLICY},
1683     {"siteSettingsAdsBlockNotBlacklistedSingular",
1684      IDS_SETTINGS_SITE_SETTINGS_ADS_BLOCK_NOT_BLACKLISTED_SINGULAR},
1685     {"siteSettingsAdsBlockBlacklistedSingular",
1686      IDS_SETTINGS_SITE_SETTINGS_ADS_BLOCK_BLACKLISTED_SINGULAR},
1687     {"siteSettingsSourceDrmDisabled",
1688      IDS_SETTINGS_SITE_SETTINGS_SOURCE_DRM_DISABLED},
1689     {"siteSettingsSourceEmbargo",
1690      IDS_PAGE_INFO_PERMISSION_AUTOMATICALLY_BLOCKED},
1691     {"siteSettingsSourceInsecureOrigin",
1692      IDS_SETTINGS_SITE_SETTINGS_SOURCE_INSECURE_ORIGIN},
1693     {"siteSettingsSourceKillSwitch",
1694      IDS_SETTINGS_SITE_SETTINGS_SOURCE_KILL_SWITCH},
1695     {"siteSettingsReset", IDS_SETTINGS_SITE_SETTINGS_RESET_BUTTON},
1696     {"siteSettingsCookieHeader", IDS_SETTINGS_SITE_SETTINGS_COOKIE_HEADER},
1697     {"siteSettingsCookieLink", IDS_SETTINGS_SITE_SETTINGS_COOKIE_LINK},
1698     {"siteSettingsCookieRemove", IDS_SETTINGS_SITE_SETTINGS_COOKIE_REMOVE},
1699     {"siteSettingsCookieRemoveAll",
1700      IDS_SETTINGS_SITE_SETTINGS_COOKIE_REMOVE_ALL},
1701     {"siteSettingsCookieRemoveAllShown",
1702      IDS_SETTINGS_SITE_SETTINGS_COOKIE_REMOVE_ALL_SHOWN},
1703     {"siteSettingsCookieRemoveAllThirdParty",
1704      IDS_SETTINGS_SITE_SETTINGS_COOKIE_REMOVE_ALL_THIRD_PARTY},
1705     {"siteSettingsCookieRemoveThirdPartyDialogTitle",
1706      IDS_SETTINGS_SITE_SETTINGS_THIRD_PARTY_COOKIE_REMOVE_DIALOG_TITLE},
1707     {"siteSettingsCookieRemoveThirdPartyConfirmation",
1708      IDS_SETTINGS_SITE_SETTINGS_THIRD_PARTY_COOKIE_REMOVE_CONFIRMATION},
1709     {"siteSettingsCookiesClearThirdParty",
1710      IDS_SETTINGS_SITE_SETTINGS_CLEAR_THIRD_PARTY_COOKIES},
1711     {"siteSettingsCookiesThirdPartyExceptionLabel",
1712      IDS_SETTINGS_SITE_SETTINGS_THIRD_PARTY_COOKIES_EXCEPTION_LABEL},
1713     {"siteSettingsCookieRemoveDialogTitle",
1714      IDS_SETTINGS_SITE_SETTINGS_COOKIE_REMOVE_DIALOG_TITLE},
1715     {"siteSettingsCookieRemoveMultipleConfirmation",
1716      IDS_SETTINGS_SITE_SETTINGS_COOKIE_REMOVE_MULTIPLE},
1717     {"siteSettingsCookieRemoveSite",
1718      IDS_SETTINGS_SITE_SETTINGS_COOKIE_REMOVE_SITE},
1719     {"siteSettingsCookiesClearAll",
1720      IDS_SETTINGS_SITE_SETTINGS_COOKIES_CLEAR_ALL},
1721     {"siteSettingsCookieSearch", IDS_SETTINGS_SITE_SETTINGS_COOKIE_SEARCH},
1722     {"siteSettingsCookieSubpage", IDS_SETTINGS_SITE_SETTINGS_COOKIE_SUBPAGE},
1723     {"siteSettingsDelete", IDS_SETTINGS_SITE_SETTINGS_DELETE},
1724     {"siteSettingsClearAllStorageDialogTitle",
1725      IDS_SETTINGS_SITE_SETTINGS_CLEAR_ALL_STORAGE_DIALOG_TITLE},
1726     {"siteSettingsClearAllStorageDescription",
1727      IDS_SETTINGS_SITE_SETTINGS_CLEAR_ALL_STORAGE_DESCRIPTION},
1728     {"siteSettingsClearAllStorageLabel",
1729      IDS_SETTINGS_SITE_SETTINGS_CLEAR_ALL_STORAGE_LABEL},
1730     {"siteSettingsClearAllStorageConfirmation",
1731      IDS_SETTINGS_SITE_SETTINGS_CLEAR_ALL_STORAGE_CONFIRMATION},
1732     {"siteSettingsClearAllStorageConfirmationInstalled",
1733      IDS_SETTINGS_SITE_SETTINGS_CLEAR_ALL_STORAGE_CONFIRMATION_INSTALLED},
1734     {"siteSettingsClearAllStorageSignOut",
1735      IDS_SETTINGS_SITE_SETTINGS_CLEAR_ALL_STORAGE_SIGN_OUT},
1736     {"siteSettingsOriginDeleteConfirmation",
1737      IDS_SETTINGS_SITE_SETTINGS_ORIGIN_DELETE_CONFIRMATION},
1738     {"siteSettingsOriginDeleteConfirmationInstalled",
1739      IDS_SETTINGS_SITE_SETTINGS_ORIGIN_DELETE_CONFIRMATION_INSTALLED},
1740     {"siteSettingsSiteGroupDeleteConfirmationInstalledPlural",
1741      IDS_SETTINGS_SITE_SETTINGS_SITE_GROUP_DELETE_CONFIRMATION_INSTALLED_PLURAL},
1742     {"siteSettingsSiteClearStorage",
1743      IDS_SETTINGS_SITE_SETTINGS_SITE_CLEAR_STORAGE},
1744     {"siteSettingsSiteClearStorageConfirmation",
1745      IDS_SETTINGS_SITE_SETTINGS_SITE_CLEAR_STORAGE_CONFIRMATION},
1746     {"siteSettingsSiteClearStorageConfirmationNew",
1747      IDS_SETTINGS_SITE_SETTINGS_SITE_CLEAR_STORAGE_CONFIRMATION_NEW},
1748     {"siteSettingsSiteClearStorageDialogTitle",
1749      IDS_SETTINGS_SITE_SETTINGS_SITE_CLEAR_STORAGE_DIALOG_TITLE},
1750     {"siteSettingsSiteClearStorageSignOut",
1751      IDS_SETTINGS_SITE_SETTINGS_SITE_CLEAR_STORAGE_SIGN_OUT},
1752     {"siteSettingsSiteClearStorageOfflineData",
1753      IDS_SETTINGS_SITE_SETTINGS_SITE_CLEAR_STORAGE_OFFLINE_DATA},
1754     {"siteSettingsSiteClearStorageApps",
1755      IDS_SETTINGS_SITE_SETTINGS_SITE_CLEAR_STORAGE_APPS},
1756     {"siteSettingsSiteGroupDelete", IDS_SETTINGS_SITE_SETTINGS_GROUP_DELETE},
1757     {"siteSettingsSiteGroupDeleteDialogTitle",
1758      IDS_SETTINGS_SITE_SETTINGS_SITE_GROUP_DELETE_DIALOG_TITLE},
1759     {"siteSettingsSiteGroupDeleteConfirmation",
1760      IDS_SETTINGS_SITE_SETTINGS_SITE_GROUP_DELETE_CONFIRMATION},
1761     {"siteSettingsSiteGroupDeleteConfirmationNew",
1762      IDS_SETTINGS_SITE_SETTINGS_SITE_GROUP_DELETE_CONFIRMATION_NEW},
1763     {"siteSettingsSiteGroupDeleteConfirmationInstalled",
1764      IDS_SETTINGS_SITE_SETTINGS_SITE_GROUP_DELETE_CONFIRMATION_INSTALLED},
1765     {"siteSettingsSiteGroupDeleteSignOut",
1766      IDS_SETTINGS_SITE_SETTINGS_SITE_GROUP_DELETE_SIGN_OUT},
1767     {"siteSettingsSiteGroupDeleteOfflineData",
1768      IDS_SETTINGS_SITE_SETTINGS_SITE_GROUP_DELETE_OFFLINE_DATA},
1769     {"siteSettingsSiteGroupDeleteApps",
1770      IDS_SETTINGS_SITE_SETTINGS_SITE_GROUP_DELETE_APPS},
1771     {"siteSettingsSiteGroupReset", IDS_SETTINGS_SITE_SETTINGS_GROUP_RESET},
1772     {"siteSettingsSiteGroupResetDialogTitle",
1773      IDS_SETTINGS_SITE_SETTINGS_SITE_GROUP_RESET_DIALOG_TITLE},
1774     {"siteSettingsSiteGroupResetConfirmation",
1775      IDS_SETTINGS_SITE_SETTINGS_SITE_GROUP_RESET_CONFIRMATION},
1776     {"siteSettingsSiteResetAll", IDS_SETTINGS_SITE_SETTINGS_SITE_RESET_ALL},
1777     {"siteSettingsSiteResetConfirmation",
1778      IDS_SETTINGS_SITE_SETTINGS_SITE_RESET_CONFIRMATION},
1779     {"thirdPartyCookie", IDS_NEW_TAB_OTR_THIRD_PARTY_COOKIE},
1780     {"thirdPartyCookieSublabel", IDS_NEW_TAB_OTR_THIRD_PARTY_COOKIE_SUBLABEL},
1781     {"deleteDataPostSession",
1782      IDS_SETTINGS_SITE_SETTINGS_DELETE_DATA_POST_SESSION},
1783     {"handlerIsDefault", IDS_SETTINGS_SITE_SETTINGS_HANDLER_IS_DEFAULT},
1784     {"handlerSetDefault", IDS_SETTINGS_SITE_SETTINGS_HANDLER_SET_DEFAULT},
1785     {"handlerRemove", IDS_SETTINGS_SITE_SETTINGS_REMOVE},
1786     {"adobeFlashStorage", IDS_SETTINGS_SITE_SETTINGS_ADOBE_FLASH_SETTINGS},
1787     {"incognitoSiteOnly", IDS_SETTINGS_SITE_SETTINGS_INCOGNITO_ONLY},
1788     {"incognitoSiteExceptionDesc",
1789      IDS_SETTINGS_SITE_SETTINGS_INCOGNITO_SITE_EXCEPTION_DESC},
1790     {"noSitesAdded", IDS_SETTINGS_SITE_NO_SITES_ADDED},
1791     {"siteSettingsAds", IDS_SETTINGS_SITE_SETTINGS_ADS},
1792     {"siteSettingsAdsBlock", IDS_SETTINGS_SITE_SETTINGS_ADS_BLOCK},
1793     {"siteSettingsAdsBlockRecommended",
1794      IDS_SETTINGS_SITE_SETTINGS_ADS_BLOCK_RECOMMENDED},
1795     {"siteSettingsPaymentHandler", IDS_SETTINGS_SITE_SETTINGS_PAYMENT_HANDLER},
1796     {"siteSettingsPaymentHandlerAllow",
1797      IDS_SETTINGS_SITE_SETTINGS_PAYMENT_HANDLER_ALLOW},
1798     {"siteSettingsPaymentHandlerAllowRecommended",
1799      IDS_SETTINGS_SITE_SETTINGS_PAYMENT_HANDLER_ALLOW_RECOMMENDED},
1800     {"siteSettingsPaymentHandlerBlock",
1801      IDS_SETTINGS_SITE_SETTINGS_PAYMENT_HANDLER_BLOCK},
1802     {"siteSettingsBlockAutoplaySetting",
1803      IDS_SETTINGS_SITE_SETTINGS_BLOCK_AUTOPLAY},
1804     {"emptyAllSitesPage", IDS_SETTINGS_SITE_SETTINGS_EMPTY_ALL_SITES_PAGE},
1805     {"noSitesFound", IDS_SETTINGS_SITE_SETTINGS_NO_SITES_FOUND},
1806     {"siteSettingsBluetoothScanning",
1807      IDS_SETTINGS_SITE_SETTINGS_BLUETOOTH_SCANNING},
1808     {"siteSettingsBluetoothScanningAsk",
1809      IDS_SETTINGS_SITE_SETTINGS_BLUETOOTH_SCANNING_ASK},
1810     {"siteSettingsBluetoothScanningAskRecommended",
1811      IDS_SETTINGS_SITE_SETTINGS_BLUETOOTH_SCANNING_ASK_RECOMMENDED},
1812     {"siteSettingsBluetoothScanningBlock",
1813      IDS_SETTINGS_SITE_SETTINGS_BLUETOOTH_SCANNING_BLOCK},
1814     {"siteSettingsAr", IDS_SETTINGS_SITE_SETTINGS_AR},
1815     {"siteSettingsArAsk", IDS_SETTINGS_SITE_SETTINGS_AR_ASK},
1816     {"siteSettingsArAskRecommended",
1817      IDS_SETTINGS_SITE_SETTINGS_AR_ASK_RECOMMENDED},
1818     {"siteSettingsArBlock", IDS_SETTINGS_SITE_SETTINGS_AR_BLOCK},
1819     {"siteSettingsVr", IDS_SETTINGS_SITE_SETTINGS_VR},
1820     {"siteSettingsVrAsk", IDS_SETTINGS_SITE_SETTINGS_VR_ASK},
1821     {"siteSettingsVrAskRecommended",
1822      IDS_SETTINGS_SITE_SETTINGS_VR_ASK_RECOMMENDED},
1823     {"siteSettingsVrBlock", IDS_SETTINGS_SITE_SETTINGS_VR_BLOCK},
1824   };
1825   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1826 
1827   // These ones cannot be constexpr because we need to check base::FeatureList.
1828   static webui::LocalizedString kSensorsLocalizedStrings[] = {
1829       {"siteSettingsSensors",
1830        base::FeatureList::IsEnabled(features::kGenericSensorExtraClasses)
1831            ? IDS_SETTINGS_SITE_SETTINGS_SENSORS
1832            : IDS_SETTINGS_SITE_SETTINGS_MOTION_SENSORS},
1833       {"siteSettingsSensorsAllow",
1834        base::FeatureList::IsEnabled(features::kGenericSensorExtraClasses)
1835            ? IDS_SETTINGS_SITE_SETTINGS_SENSORS_ALLOW
1836            : IDS_SETTINGS_SITE_SETTINGS_MOTION_SENSORS_ALLOW},
1837       {"siteSettingsSensorsBlock",
1838        base::FeatureList::IsEnabled(features::kGenericSensorExtraClasses)
1839            ? IDS_SETTINGS_SITE_SETTINGS_SENSORS_BLOCK
1840            : IDS_SETTINGS_SITE_SETTINGS_MOTION_SENSORS_BLOCK},
1841   };
1842   AddLocalizedStringsBulk(html_source, kSensorsLocalizedStrings);
1843 
1844   html_source->AddBoolean(
1845       "enableSafeBrowsingSubresourceFilter",
1846       base::FeatureList::IsEnabled(
1847           subresource_filter::kSafeBrowsingSubresourceFilter));
1848 
1849   html_source->AddBoolean(
1850       "enableBlockAutoplayContentSetting",
1851       base::FeatureList::IsEnabled(media::kAutoplayDisableSettings));
1852 
1853   html_source->AddBoolean(
1854       "enableAutoplayWhitelistContentSetting",
1855       base::FeatureList::IsEnabled(media::kAutoplayWhitelistSettings));
1856 
1857   html_source->AddBoolean(
1858       "enablePaymentHandlerContentSetting",
1859       base::FeatureList::IsEnabled(features::kServiceWorkerPaymentApps));
1860 
1861   base::CommandLine& cmd = *base::CommandLine::ForCurrentProcess();
1862   html_source->AddBoolean(
1863       "enableExperimentalWebPlatformFeatures",
1864       cmd.HasSwitch(::switches::kEnableExperimentalWebPlatformFeatures));
1865 
1866   html_source->AddBoolean(
1867       "enableNativeFileSystemWriteContentSetting",
1868       base::FeatureList::IsEnabled(::blink::features::kNativeFileSystemAPI));
1869 
1870   html_source->AddBoolean(
1871       "enableRemovingAllThirdPartyCookies",
1872       base::FeatureList::IsEnabled(
1873           browsing_data::features::kEnableRemovingAllThirdPartyCookies));
1874 
1875   html_source->AddBoolean(
1876       "enableInsecureContentContentSetting",
1877       base::FeatureList::IsEnabled(features::kMixedContentSiteSetting));
1878 
1879   html_source->AddBoolean(
1880       "showImprovedCookieControlsForThirdParties",
1881       base::FeatureList::IsEnabled(
1882           content_settings ::
1883               kImprovedCookieControlsForThirdPartyCookieBlocking));
1884 
1885   html_source->AddBoolean(
1886       "enableStoragePressureUI",
1887       base::FeatureList::IsEnabled(features::kStoragePressureUI));
1888 
1889   html_source->AddBoolean(
1890       "enableQuietNotificationPromptsSetting",
1891       base::FeatureList::IsEnabled(features::kQuietNotificationPrompts));
1892 
1893   html_source->AddBoolean("enableWebBluetoothNewPermissionsBackend",
1894                           base::FeatureList::IsEnabled(
1895                               features::kWebBluetoothNewPermissionsBackend));
1896 
1897   html_source->AddBoolean(
1898       "enableWebXrContentSetting",
1899       base::FeatureList::IsEnabled(features::kWebXrPermissionsApi));
1900 }
1901 
1902 #if !defined(OS_CHROMEOS)
AddSystemStrings(content::WebUIDataSource * html_source)1903 void AddSystemStrings(content::WebUIDataSource* html_source) {
1904   static constexpr webui::LocalizedString kLocalizedStrings[] = {
1905     {"systemPageTitle", IDS_SETTINGS_SYSTEM},
1906 #if !defined(OS_MACOSX)
1907     {"backgroundAppsLabel", IDS_SETTINGS_SYSTEM_BACKGROUND_APPS_LABEL},
1908 #endif
1909     {"hardwareAccelerationLabel",
1910      IDS_SETTINGS_SYSTEM_HARDWARE_ACCELERATION_LABEL},
1911     {"proxySettingsLabel", IDS_SETTINGS_SYSTEM_PROXY_SETTINGS_LABEL},
1912   };
1913   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1914 
1915   html_source->AddString(
1916       "proxySettingsExtensionLabel",
1917       l10n_util::GetStringFUTF16(
1918           IDS_SETTINGS_SYSTEM_PROXY_SETTINGS_EXTENSION_LABEL,
1919           l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)));
1920   html_source->AddString(
1921       "proxySettingsPolicyLabel",
1922       l10n_util::GetStringFUTF16(
1923           IDS_SETTINGS_SYSTEM_PROXY_SETTINGS_POLICY_LABEL,
1924           l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)));
1925 
1926   // TODO(dbeam): we should probably rename anything involving "localized
1927   // strings" to "load time data" as all primitive types are used now.
1928   SystemHandler::AddLoadTimeData(html_source);
1929 }
1930 #endif
1931 
AddExtensionsStrings(content::WebUIDataSource * html_source)1932 void AddExtensionsStrings(content::WebUIDataSource* html_source) {
1933   html_source->AddLocalizedString("extensionsPageTitle",
1934                                   IDS_SETTINGS_EXTENSIONS_CHECKBOX_LABEL);
1935 }
1936 
AddSecurityKeysStrings(content::WebUIDataSource * html_source)1937 void AddSecurityKeysStrings(content::WebUIDataSource* html_source) {
1938   static constexpr webui::LocalizedString kSecurityKeysStrings[] = {
1939       {"securityKeysBioEnrollmentAddTitle",
1940        IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_ADD_TITLE},
1941       {"securityKeysBioEnrollmentDelete",
1942        IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_DELETE},
1943       {"securityKeysBioEnrollmentDialogTitle",
1944        IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_DIALOG_TITLE},
1945       {"securityKeysBioEnrollmentEnrollingCompleteLabel",
1946        IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_ENROLLING_COMPLETE_LABEL},
1947       {"securityKeysBioEnrollmentEnrollingLabel",
1948        IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_ENROLLING_LABEL},
1949       {"securityKeysBioEnrollmentEnrollingFailedLabel",
1950        IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_FAILED_LABEL},
1951       {"securityKeysBioEnrollmentTryAgainLabel",
1952        IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_TRY_AGAIN_LABEL},
1953       {"securityKeysBioEnrollmentEnrollmentsLabel",
1954        IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_ENROLLMENTS_LABEL},
1955       {"securityKeysBioEnrollmentNoEnrollmentsLabel",
1956        IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_NO_ENROLLMENTS_LABEL},
1957       {"securityKeysBioEnrollmentSubpageDescription",
1958        IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_SUBPAGE_DESCRIPTION},
1959       {"securityKeysBioEnrollmentSubpageLabel",
1960        IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_SUBPAGE_LABEL},
1961       {"securityKeysBioEnrollmentChooseName",
1962        IDS_SETTINGS_SECURITY_KEYS_BIO_CHOOSE_NAME},
1963       {"securityKeysBioEnrollmentNameLabel",
1964        IDS_SETTINGS_SECURITY_KEYS_BIO_NAME_LABEL},
1965       {"securityKeysConfirmPIN", IDS_SETTINGS_SECURITY_KEYS_CONFIRM_PIN},
1966       {"securityKeysCredentialWebsite",
1967        IDS_SETTINGS_SECURITY_KEYS_CREDENTIAL_WEBSITE},
1968       {"securityKeysNoCredentialManagement",
1969        IDS_SETTINGS_SECURITY_KEYS_NO_CREDENTIAL_MANAGEMENT},
1970       {"securityKeysCredentialManagementRemoved",
1971        IDS_SETTINGS_SECURITY_KEYS_CREDENTIAL_MANAGEMENT_REMOVED},
1972       {"securityKeysCredentialManagementDesc",
1973        IDS_SETTINGS_SECURITY_KEYS_CREDENTIAL_MANAGEMENT_DESC},
1974       {"securityKeysCredentialManagementDialogTitle",
1975        IDS_SETTINGS_SECURITY_KEYS_CREDENTIAL_MANAGEMENT_DIALOG_TITLE},
1976       {"securityKeysCredentialManagementLabel",
1977        IDS_SETTINGS_SECURITY_KEYS_CREDENTIAL_MANAGEMENT_LABEL},
1978       {"securityKeysCredentialManagementNoCredentials",
1979        IDS_SETTINGS_SECURITY_KEYS_CREDENTIAL_MANAGEMENT_NO_CREDENTIALS},
1980       {"securityKeysCredentialUsername",
1981        IDS_SETTINGS_SECURITY_KEYS_CREDENTIAL_USERNAME},
1982       {"securityKeysCurrentPIN", IDS_SETTINGS_SECURITY_KEYS_CURRENT_PIN},
1983       {"securityKeysCurrentPINIntro",
1984        IDS_SETTINGS_SECURITY_KEYS_CURRENT_PIN_INTRO},
1985       {"securityKeysDesc", IDS_SETTINGS_SECURITY_KEYS_DESC},
1986       {"securityKeysHidePINs", IDS_SETTINGS_SECURITY_KEYS_HIDE_PINS},
1987       {"securityKeysNewPIN", IDS_SETTINGS_SECURITY_KEYS_NEW_PIN},
1988       {"securityKeysNoPIN", IDS_SETTINGS_SECURITY_KEYS_NO_PIN},
1989       {"securityKeysNoReset", IDS_SETTINGS_SECURITY_KEYS_NO_RESET},
1990       {"securityKeysPIN", IDS_SETTINGS_SECURITY_KEYS_PIN},
1991       {"securityKeysPINError", IDS_SETTINGS_SECURITY_KEYS_PIN_ERROR},
1992       {"securityKeysPINHardLock", IDS_SETTINGS_SECURITY_KEYS_PIN_HARD_LOCK},
1993       {"securityKeysPINIncorrect", IDS_SETTINGS_SECURITY_KEYS_PIN_INCORRECT},
1994       {"securityKeysPINIncorrectRetriesPl",
1995        IDS_SETTINGS_SECURITY_KEYS_PIN_INCORRECT_RETRIES_PL},
1996       {"securityKeysPINIncorrectRetriesSin",
1997        IDS_SETTINGS_SECURITY_KEYS_PIN_INCORRECT_RETRIES_SIN},
1998       {"securityKeysPINMismatch",
1999        IDS_SETTINGS_SECURITY_KEYS_PIN_ERROR_MISMATCH},
2000       {"securityKeysPINPrompt", IDS_SETTINGS_SECURITY_KEYS_PIN_PROMPT},
2001       {"securityKeysPINSoftLock", IDS_SETTINGS_SECURITY_KEYS_PIN_SOFT_LOCK},
2002       {"securityKeysPINSuccess", IDS_SETTINGS_SECURITY_KEYS_PIN_SUCCESS},
2003       {"securityKeysPINTooLong", IDS_SETTINGS_SECURITY_KEYS_PIN_ERROR_TOO_LONG},
2004       {"securityKeysPINTooShort",
2005        IDS_SETTINGS_SECURITY_KEYS_PIN_ERROR_TOO_SHORT_SMALL},
2006       {"securityKeysReset", IDS_SETTINGS_SECURITY_KEYS_RESET},
2007       {"securityKeysResetConfirmTitle",
2008        IDS_SETTINGS_SECURITY_KEYS_RESET_CONFIRM_TITLE},
2009       {"securityKeysResetDesc", IDS_SETTINGS_SECURITY_KEYS_RESET_DESC},
2010       {"securityKeysResetError", IDS_SETTINGS_SECURITY_KEYS_RESET_ERROR},
2011       {"securityKeysResetNotAllowed",
2012        IDS_SETTINGS_SECURITY_KEYS_RESET_NOTALLOWED},
2013       {"securityKeysResetStep1", IDS_SETTINGS_SECURITY_KEYS_RESET_STEP1},
2014       {"securityKeysResetStep2", IDS_SETTINGS_SECURITY_KEYS_RESET_STEP2},
2015       {"securityKeysResetSuccess", IDS_SETTINGS_SECURITY_KEYS_RESET_SUCCESS},
2016       {"securityKeysResetTitle", IDS_SETTINGS_SECURITY_KEYS_RESET_TITLE},
2017       {"securityKeysSetPIN", IDS_SETTINGS_SECURITY_KEYS_SET_PIN},
2018       {"securityKeysSetPINChangeTitle",
2019        IDS_SETTINGS_SECURITY_KEYS_SET_PIN_CHANGE_TITLE},
2020       {"securityKeysSetPINConfirm", IDS_SETTINGS_SECURITY_KEYS_SET_PIN_CONFIRM},
2021       {"securityKeysSetPINCreateTitle",
2022        IDS_SETTINGS_SECURITY_KEYS_SET_PIN_CREATE_TITLE},
2023       {"securityKeysSetPINDesc", IDS_SETTINGS_SECURITY_KEYS_SET_PIN_DESC},
2024       {"securityKeysSetPINInitialTitle",
2025        IDS_SETTINGS_SECURITY_KEYS_SET_PIN_INITIAL_TITLE},
2026       {"securityKeysShowPINs", IDS_SETTINGS_SECURITY_KEYS_SHOW_PINS},
2027       {"securityKeysTitle", IDS_SETTINGS_SECURITY_KEYS_TITLE},
2028       {"securityKeysTouchToContinue",
2029        IDS_SETTINGS_SECURITY_KEYS_TOUCH_TO_CONTINUE},
2030   };
2031   AddLocalizedStringsBulk(html_source, kSecurityKeysStrings);
2032   bool win_native_api_available = false;
2033 #if defined(OS_WIN)
2034   win_native_api_available =
2035       base::FeatureList::IsEnabled(device::kWebAuthUseNativeWinApi) &&
2036       device::WinWebAuthnApi::GetDefault()->IsAvailable();
2037 #endif
2038   html_source->AddBoolean("enableSecurityKeysSubpage",
2039                           !win_native_api_available);
2040   html_source->AddBoolean(
2041       "enableSecurityKeysBioEnrollment",
2042       base::FeatureList::IsEnabled(device::kWebAuthBiometricEnrollment) &&
2043           !win_native_api_available);
2044 }
2045 
2046 }  // namespace
2047 
AddBrowserLocalizedStrings(content::WebUIDataSource * html_source,Profile * profile,content::WebContents * web_contents)2048 void AddBrowserLocalizedStrings(content::WebUIDataSource* html_source,
2049                                 Profile* profile,
2050                                 content::WebContents* web_contents) {
2051   AddA11yStrings(html_source);
2052   AddAboutStrings(html_source, profile);
2053   AddAutofillStrings(html_source, profile, web_contents);
2054   AddAppearanceStrings(html_source, profile);
2055 
2056 #if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
2057   AddChromeCleanupStrings(html_source);
2058   AddIncompatibleApplicationsStrings(html_source);
2059 #endif  // defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
2060 
2061   AddClearBrowsingDataStrings(html_source, profile);
2062   AddCommonStrings(html_source, profile);
2063   AddDownloadsStrings(html_source);
2064   AddLanguagesStrings(html_source, profile);
2065   AddOnStartupStrings(html_source);
2066   AddPeopleStrings(html_source, profile);
2067   AddPrintingStrings(html_source);
2068   AddPrivacyStrings(html_source, profile);
2069   AddResetStrings(html_source);
2070   AddSearchEnginesStrings(html_source);
2071   AddSearchInSettingsStrings(html_source);
2072   AddSearchStrings(html_source);
2073   AddSiteSettingsStrings(html_source, profile);
2074 
2075 #if defined(OS_CHROMEOS)
2076   AddChromeOSUserStrings(html_source, profile);
2077 #else
2078   AddDefaultBrowserStrings(html_source);
2079   AddImportDataStrings(html_source);
2080   AddSystemStrings(html_source);
2081 #endif
2082   AddExtensionsStrings(html_source);
2083 
2084 #if defined(USE_NSS_CERTS)
2085   certificate_manager::AddLocalizedStrings(html_source);
2086 #endif
2087 
2088   policy_indicator::AddLocalizedStrings(html_source);
2089   AddSecurityKeysStrings(html_source);
2090 
2091   html_source->UseStringsJs();
2092 }
2093 
2094 }  // namespace settings
2095