1 // Copyright 2020 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/chromeos/os_settings_localized_strings_provider.h"
6
7 #include "ash/public/cpp/ash_features.h"
8 #include "ash/public/mojom/assistant_state_controller.mojom.h"
9 #include "base/command_line.h"
10 #include "base/feature_list.h"
11 #include "base/i18n/number_formatting.h"
12 #include "base/no_destructor.h"
13 #include "base/strings/strcat.h"
14 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/stringprintf.h"
16 #include "base/strings/utf_string_conversions.h"
17 #include "base/system/sys_info.h"
18 #include "build/branding_buildflags.h"
19 #include "build/build_config.h"
20 #include "build/buildflag.h"
21 #include "chrome/browser/browser_process.h"
22 #include "chrome/browser/browser_process_platform_part.h"
23 #include "chrome/browser/chromeos/account_manager/account_manager_util.h"
24 #include "chrome/browser/chromeos/arc/arc_util.h"
25 #include "chrome/browser/chromeos/assistant/assistant_util.h"
26 #include "chrome/browser/chromeos/crostini/crostini_features.h"
27 #include "chrome/browser/chromeos/crostini/crostini_util.h"
28 #include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h"
29 #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h"
30 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
31 #include "chrome/browser/chromeos/profiles/profile_helper.h"
32 #include "chrome/browser/policy/profile_policy_connector.h"
33 #include "chrome/browser/profiles/profile.h"
34 #include "chrome/browser/supervised_user/supervised_user_service.h"
35 #include "chrome/browser/supervised_user/supervised_user_service_factory.h"
36 #include "chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.h"
37 #include "chrome/browser/ui/webui/chromeos/bluetooth_dialog_localized_strings_provider.h"
38 #include "chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.h"
39 #include "chrome/browser/ui/webui/chromeos/smb_shares/smb_shares_localized_strings_provider.h"
40 #include "chrome/browser/ui/webui/management_ui.h"
41 #include "chrome/browser/ui/webui/policy_indicator_localized_strings_provider.h"
42 #include "chrome/browser/ui/webui/settings/chromeos/internet_strings_provider.h"
43 #include "chrome/browser/ui/webui/settings/chromeos/search/search_concept.h"
44 #include "chrome/browser/ui/webui/settings/shared_settings_localized_strings_provider.h"
45 #include "chrome/browser/ui/webui/webui_util.h"
46 #include "chrome/common/chrome_features.h"
47 #include "chrome/common/pref_names.h"
48 #include "chrome/common/url_constants.h"
49 #include "chrome/common/webui_url_constants.h"
50 #include "chrome/grit/chromium_strings.h"
51 #include "chrome/grit/generated_resources.h"
52 #include "chrome/grit/locale_settings.h"
53 #include "chrome/services/local_search_service/public/mojom/types.mojom.h"
54 #include "chromeos/constants/chromeos_features.h"
55 #include "chromeos/constants/chromeos_switches.h"
56 #include "chromeos/services/assistant/public/features.h"
57 #include "chromeos/services/multidevice_setup/public/cpp/url_provider.h"
58 #include "chromeos/strings/grit/chromeos_strings.h"
59 #include "components/google/core/common/google_util.h"
60 #include "components/prefs/pref_service.h"
61 #include "components/strings/grit/components_strings.h"
62 #include "components/version_ui/version_ui_constants.h"
63 #include "content/public/browser/web_ui_data_source.h"
64 #include "content/public/common/content_features.h"
65 #include "content/public/common/content_switches.h"
66 #include "device/bluetooth/strings/grit/bluetooth_strings.h"
67 #include "media/base/media_switches.h"
68 #include "ui/accessibility/accessibility_switches.h"
69 #include "ui/base/l10n/l10n_util.h"
70 #include "ui/base/webui/web_ui_util.h"
71 #include "ui/chromeos/devicetype_utils.h"
72 #include "ui/chromeos/events/keyboard_layout_util.h"
73 #include "ui/display/display_features.h"
74 #include "ui/display/display_switches.h"
75 #include "ui/display/manager/touch_device_manager.h"
76
77 namespace chromeos {
78 namespace settings {
79 namespace {
80
ConceptVectorToDataPtrVector(const std::vector<SearchConcept> & tags_group)81 std::vector<local_search_service::mojom::DataPtr> ConceptVectorToDataPtrVector(
82 const std::vector<SearchConcept>& tags_group) {
83 std::vector<local_search_service::mojom::DataPtr> data_list;
84
85 for (const auto& concept : tags_group) {
86 std::vector<base::string16> search_tags;
87
88 // Add the canonical tag.
89 search_tags.push_back(
90 l10n_util::GetStringUTF16(concept.canonical_message_id));
91
92 // Add all alternate tags.
93 for (size_t i = 0; i < SearchConcept::kMaxAltTagsPerConcept; ++i) {
94 int curr_alt_tag = concept.alt_tag_ids[i];
95 if (curr_alt_tag == SearchConcept::kAltTagEnd)
96 break;
97 search_tags.push_back(l10n_util::GetStringUTF16(curr_alt_tag));
98 }
99
100 // Note: A stringified version of the canonical tag message ID is used as
101 // the identifier for this search data.
102 data_list.push_back(local_search_service::mojom::Data::New(
103 base::NumberToString(concept.canonical_message_id), search_tags));
104 }
105
106 return data_list;
107 }
108
109 // Generates a Google Help URL which includes a "board type" parameter. Some
110 // help pages need to be adjusted depending on the type of CrOS device that is
111 // accessing the page.
GetHelpUrlWithBoard(const std::string & original_url)112 base::string16 GetHelpUrlWithBoard(const std::string& original_url) {
113 return base::ASCIIToUTF16(original_url +
114 "&b=" + base::SysInfo::GetLsbReleaseBoard());
115 }
116
IsDeviceManaged()117 bool IsDeviceManaged() {
118 policy::BrowserPolicyConnectorChromeOS* connector =
119 g_browser_process->platform_part()->browser_policy_connector_chromeos();
120 return connector->IsEnterpriseManaged();
121 }
122
IsProfileManaged(Profile * profile)123 bool IsProfileManaged(Profile* profile) {
124 return profile->GetProfilePolicyConnector()->IsManaged();
125 }
126
AddCommonStrings(content::WebUIDataSource * html_source,Profile * profile)127 void AddCommonStrings(content::WebUIDataSource* html_source, Profile* profile) {
128 static constexpr webui::LocalizedString kLocalizedStrings[] = {
129 {"add", IDS_ADD},
130 {"advancedPageTitle", IDS_SETTINGS_ADVANCED},
131 {"back", IDS_ACCNAME_BACK},
132 {"basicPageTitle", IDS_SETTINGS_BASIC},
133 {"cancel", IDS_CANCEL},
134 {"clear", IDS_SETTINGS_CLEAR},
135 {"close", IDS_CLOSE},
136 {"confirm", IDS_CONFIRM},
137 {"continue", IDS_SETTINGS_CONTINUE},
138 {"controlledByExtension", IDS_SETTINGS_CONTROLLED_BY_EXTENSION},
139 {"custom", IDS_SETTINGS_CUSTOM},
140 {"delete", IDS_SETTINGS_DELETE},
141 {"deviceOff", IDS_SETTINGS_DEVICE_OFF},
142 {"deviceOn", IDS_SETTINGS_DEVICE_ON},
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 {"save", IDS_SAVE},
154 {"searchResultBubbleText", IDS_SEARCH_RESULT_BUBBLE_TEXT},
155 {"searchResultsBubbleText", IDS_SEARCH_RESULTS_BUBBLE_TEXT},
156 {"settings", IDS_SETTINGS_SETTINGS},
157 {"settingsAltPageTitle", IDS_SETTINGS_ALT_PAGE_TITLE},
158 {"subpageArrowRoleDescription", IDS_SETTINGS_SUBPAGE_BUTTON},
159 {"notValidWebAddress", IDS_SETTINGS_NOT_VALID_WEB_ADDRESS},
160 {"notValidWebAddressForContentType",
161 IDS_SETTINGS_NOT_VALID_WEB_ADDRESS_FOR_CONTENT_TYPE},
162
163 // Common font related strings shown in a11y and appearance sections.
164 {"quickBrownFox", IDS_SETTINGS_QUICK_BROWN_FOX},
165 {"verySmall", IDS_SETTINGS_VERY_SMALL_FONT},
166 {"small", IDS_SETTINGS_SMALL_FONT},
167 {"medium", IDS_SETTINGS_MEDIUM_FONT},
168 {"large", IDS_SETTINGS_LARGE_FONT},
169 {"veryLarge", IDS_SETTINGS_VERY_LARGE_FONT},
170 };
171 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
172
173 html_source->AddBoolean(
174 "isGuest",
175 user_manager::UserManager::Get()->IsLoggedInAsGuest() ||
176 user_manager::UserManager::Get()->IsLoggedInAsPublicAccount());
177
178 html_source->AddBoolean("isSupervised", profile->IsSupervised());
179 }
180
AddA11yStrings(content::WebUIDataSource * html_source)181 void AddA11yStrings(content::WebUIDataSource* html_source) {
182 static constexpr webui::LocalizedString kLocalizedStrings[] = {
183 {"a11yPageTitle", IDS_SETTINGS_ACCESSIBILITY},
184 {"a11yWebStore", IDS_SETTINGS_ACCESSIBILITY_WEB_STORE},
185 {"moreFeaturesLinkDescription",
186 IDS_SETTINGS_MORE_FEATURES_LINK_DESCRIPTION},
187 {"accessibleImageLabelsTitle",
188 IDS_SETTINGS_ACCESSIBLE_IMAGE_LABELS_TITLE},
189 {"accessibleImageLabelsSubtitle",
190 IDS_SETTINGS_ACCESSIBLE_IMAGE_LABELS_SUBTITLE},
191 {"settingsSliderRoleDescription",
192 IDS_SETTINGS_SLIDER_MIN_MAX_ARIA_ROLE_DESCRIPTION},
193 {"manageAccessibilityFeatures",
194 IDS_SETTINGS_ACCESSIBILITY_MANAGE_ACCESSIBILITY_FEATURES},
195 {"optionsInMenuLabel", IDS_SETTINGS_OPTIONS_IN_MENU_LABEL},
196 {"largeMouseCursorLabel", IDS_SETTINGS_LARGE_MOUSE_CURSOR_LABEL},
197 {"largeMouseCursorSizeLabel", IDS_SETTINGS_LARGE_MOUSE_CURSOR_SIZE_LABEL},
198 {"largeMouseCursorSizeDefaultLabel",
199 IDS_SETTINGS_LARGE_MOUSE_CURSOR_SIZE_DEFAULT_LABEL},
200 {"largeMouseCursorSizeLargeLabel",
201 IDS_SETTINGS_LARGE_MOUSE_CURSOR_SIZE_LARGE_LABEL},
202 {"highContrastLabel", IDS_SETTINGS_HIGH_CONTRAST_LABEL},
203 {"stickyKeysLabel", IDS_SETTINGS_STICKY_KEYS_LABEL},
204 {"chromeVoxLabel", IDS_SETTINGS_CHROMEVOX_LABEL},
205 {"chromeVoxOptionsLabel", IDS_SETTINGS_CHROMEVOX_OPTIONS_LABEL},
206 {"screenMagnifierLabel", IDS_SETTINGS_SCREEN_MAGNIFIER_LABEL},
207 {"screenMagnifierZoomLabel", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_LABEL},
208 {"dockedMagnifierLabel", IDS_SETTINGS_DOCKED_MAGNIFIER_LABEL},
209 {"dockedMagnifierZoomLabel", IDS_SETTINGS_DOCKED_MAGNIFIER_ZOOM_LABEL},
210 {"screenMagnifierZoom2x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_2_X},
211 {"screenMagnifierZoom4x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_4_X},
212 {"screenMagnifierZoom6x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_6_X},
213 {"screenMagnifierZoom8x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_8_X},
214 {"screenMagnifierZoom10x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_10_X},
215 {"screenMagnifierZoom12x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_12_X},
216 {"screenMagnifierZoom14x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_14_X},
217 {"screenMagnifierZoom16x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_16_X},
218 {"screenMagnifierZoom18x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_18_X},
219 {"screenMagnifierZoom20x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_20_X},
220 {"tapDraggingLabel", IDS_SETTINGS_TAP_DRAGGING_LABEL},
221 {"clickOnStopLabel", IDS_SETTINGS_CLICK_ON_STOP_LABEL},
222 {"delayBeforeClickLabel", IDS_SETTINGS_DELAY_BEFORE_CLICK_LABEL},
223 {"delayBeforeClickExtremelyShort",
224 IDS_SETTINGS_DELAY_BEFORE_CLICK_EXTREMELY_SHORT},
225 {"delayBeforeClickVeryShort", IDS_SETTINGS_DELAY_BEFORE_CLICK_VERY_SHORT},
226 {"delayBeforeClickShort", IDS_SETTINGS_DELAY_BEFORE_CLICK_SHORT},
227 {"delayBeforeClickLong", IDS_SETTINGS_DELAY_BEFORE_CLICK_LONG},
228 {"delayBeforeClickVeryLong", IDS_SETTINGS_DELAY_BEFORE_CLICK_VERY_LONG},
229 {"autoclickRevertToLeftClick",
230 IDS_SETTINGS_AUTOCLICK_REVERT_TO_LEFT_CLICK},
231 {"autoclickStabilizeCursorPosition",
232 IDS_SETTINGS_AUTOCLICK_STABILIZE_CURSOR_POSITION},
233 {"autoclickMovementThresholdLabel",
234 IDS_SETTINGS_AUTOCLICK_MOVEMENT_THRESHOLD_LABEL},
235 {"autoclickMovementThresholdExtraSmall",
236 IDS_SETTINGS_AUTOCLICK_MOVEMENT_THRESHOLD_EXTRA_SMALL},
237 {"autoclickMovementThresholdSmall",
238 IDS_SETTINGS_AUTOCLICK_MOVEMENT_THRESHOLD_SMALL},
239 {"autoclickMovementThresholdDefault",
240 IDS_SETTINGS_AUTOCLICK_MOVEMENT_THRESHOLD_DEFAULT},
241 {"autoclickMovementThresholdLarge",
242 IDS_SETTINGS_AUTOCLICK_MOVEMENT_THRESHOLD_LARGE},
243 {"autoclickMovementThresholdExtraLarge",
244 IDS_SETTINGS_AUTOCLICK_MOVEMENT_THRESHOLD_EXTRA_LARGE},
245 {"dictationDescription",
246 IDS_SETTINGS_ACCESSIBILITY_DICTATION_DESCRIPTION},
247 {"dictationLabel", IDS_SETTINGS_ACCESSIBILITY_DICTATION_LABEL},
248 {"onScreenKeyboardLabel", IDS_SETTINGS_ON_SCREEN_KEYBOARD_LABEL},
249 {"monoAudioLabel", IDS_SETTINGS_MONO_AUDIO_LABEL},
250 {"startupSoundLabel", IDS_SETTINGS_STARTUP_SOUND_LABEL},
251 {"a11yExplanation", IDS_SETTINGS_ACCESSIBILITY_EXPLANATION},
252 {"caretHighlightLabel",
253 IDS_SETTINGS_ACCESSIBILITY_CARET_HIGHLIGHT_DESCRIPTION},
254 {"cursorHighlightLabel",
255 IDS_SETTINGS_ACCESSIBILITY_CURSOR_HIGHLIGHT_DESCRIPTION},
256 {"focusHighlightLabel",
257 IDS_SETTINGS_ACCESSIBILITY_FOCUS_HIGHLIGHT_DESCRIPTION},
258 {"selectToSpeakTitle", IDS_SETTINGS_ACCESSIBILITY_SELECT_TO_SPEAK_TITLE},
259 {"selectToSpeakDisabledDescription",
260 IDS_SETTINGS_ACCESSIBILITY_SELECT_TO_SPEAK_DISABLED_DESCRIPTION},
261 {"selectToSpeakDescription",
262 IDS_SETTINGS_ACCESSIBILITY_SELECT_TO_SPEAK_DESCRIPTION},
263 {"selectToSpeakDescriptionWithoutKeyboard",
264 IDS_SETTINGS_ACCESSIBILITY_SELECT_TO_SPEAK_DESCRIPTION_WITHOUT_KEYBOARD},
265 {"selectToSpeakOptionsLabel",
266 IDS_SETTINGS_ACCESSIBILITY_SELECT_TO_SPEAK_OPTIONS_LABEL},
267 {"switchAccessLabel",
268 IDS_SETTINGS_ACCESSIBILITY_SWITCH_ACCESS_DESCRIPTION},
269 {"switchAccessOptionsLabel",
270 IDS_SETTINGS_ACCESSIBILITY_SWITCH_ACCESS_OPTIONS_LABEL},
271 {"manageSwitchAccessSettings",
272 IDS_SETTINGS_MANAGE_SWITCH_ACCESS_SETTINGS},
273 {"switchAssignmentHeading", IDS_SETTINGS_SWITCH_ASSIGNMENT_HEADING},
274 {"switchAssignOptionNone", IDS_SETTINGS_SWITCH_ASSIGN_OPTION_NONE},
275 {"switchAssignOptionSpace", IDS_SETTINGS_SWITCH_ASSIGN_OPTION_SPACE},
276 {"switchAssignOptionEnter", IDS_SETTINGS_SWITCH_ASSIGN_OPTION_ENTER},
277 {"assignSelectSwitchLabel", IDS_SETTINGS_ASSIGN_SELECT_SWITCH_LABEL},
278 {"assignNextSwitchLabel", IDS_SETTINGS_ASSIGN_NEXT_SWITCH_LABEL},
279 {"assignPreviousSwitchLabel", IDS_SETTINGS_ASSIGN_PREVIOUS_SWITCH_LABEL},
280 {"switchAccessAutoScanHeading",
281 IDS_SETTINGS_SWITCH_ACCESS_AUTO_SCAN_HEADING},
282 {"switchAccessAutoScanLabel", IDS_SETTINGS_SWITCH_ACCESS_AUTO_SCAN_LABEL},
283 {"switchAccessAutoScanSpeedLabel",
284 IDS_SETTINGS_SWITCH_ACCESS_AUTO_SCAN_SPEED_LABEL},
285 {"switchAccessAutoScanKeyboardSpeedLabel",
286 IDS_SETTINGS_SWITCH_ACCESS_AUTO_SCAN_KEYBOARD_SPEED_LABEL},
287 {"durationInSeconds", IDS_SETTINGS_DURATION_IN_SECONDS},
288 {"manageAccessibilityFeatures",
289 IDS_SETTINGS_ACCESSIBILITY_MANAGE_ACCESSIBILITY_FEATURES},
290 {"textToSpeechHeading",
291 IDS_SETTINGS_ACCESSIBILITY_TEXT_TO_SPEECH_HEADING},
292 {"displayHeading", IDS_SETTINGS_ACCESSIBILITY_DISPLAY_HEADING},
293 {"displaySettingsTitle",
294 IDS_SETTINGS_ACCESSIBILITY_DISPLAY_SETTINGS_TITLE},
295 {"displaySettingsDescription",
296 IDS_SETTINGS_ACCESSIBILITY_DISPLAY_SETTINGS_DESCRIPTION},
297 {"appearanceSettingsTitle",
298 IDS_SETTINGS_ACCESSIBILITY_APPEARANCE_SETTINGS_TITLE},
299 {"appearanceSettingsDescription",
300 IDS_SETTINGS_ACCESSIBILITY_APPEARANCE_SETTINGS_DESCRIPTION},
301 {"keyboardAndTextInputHeading",
302 IDS_SETTINGS_ACCESSIBILITY_KEYBOARD_AND_TEXT_INPUT_HEADING},
303 {"keyboardSettingsTitle",
304 IDS_SETTINGS_ACCESSIBILITY_KEYBOARD_SETTINGS_TITLE},
305 {"keyboardSettingsDescription",
306 IDS_SETTINGS_ACCESSIBILITY_KEYBOARD_SETTINGS_DESCRIPTION},
307 {"mouseAndTouchpadHeading",
308 IDS_SETTINGS_ACCESSIBILITY_MOUSE_AND_TOUCHPAD_HEADING},
309 {"mouseSettingsTitle", IDS_SETTINGS_ACCESSIBILITY_MOUSE_SETTINGS_TITLE},
310 {"mouseSettingsDescription",
311 IDS_SETTINGS_ACCESSIBILITY_MOUSE_SETTINGS_DESCRIPTION},
312 {"audioAndCaptionsHeading",
313 IDS_SETTINGS_ACCESSIBILITY_AUDIO_AND_CAPTIONS_HEADING},
314 {"additionalFeaturesTitle",
315 IDS_SETTINGS_ACCESSIBILITY_ADDITIONAL_FEATURES_TITLE},
316 {"manageTtsSettings", IDS_SETTINGS_MANAGE_TTS_SETTINGS},
317 {"ttsSettingsLinkDescription", IDS_SETTINGS_TTS_LINK_DESCRIPTION},
318 {"textToSpeechVoices", IDS_SETTINGS_TEXT_TO_SPEECH_VOICES},
319 {"textToSpeechNoVoicesMessage",
320 IDS_SETTINGS_TEXT_TO_SPEECH_NO_VOICES_MESSAGE},
321 {"textToSpeechMoreLanguages", IDS_SETTINGS_TEXT_TO_SPEECH_MORE_LANGUAGES},
322 {"textToSpeechProperties", IDS_SETTINGS_TEXT_TO_SPEECH_PROPERTIES},
323 {"textToSpeechRate", IDS_SETTINGS_TEXT_TO_SPEECH_RATE},
324 {"textToSpeechRateMinimumLabel",
325 IDS_SETTINGS_TEXT_TO_SPEECH_RATE_MINIMUM_LABEL},
326 {"textToSpeechRateMaximumLabel",
327 IDS_SETTINGS_TEXT_TO_SPEECH_RATE_MAXIMUM_LABEL},
328 {"textToSpeechPitch", IDS_SETTINGS_TEXT_TO_SPEECH_PITCH},
329 {"textToSpeechPitchMinimumLabel",
330 IDS_SETTINGS_TEXT_TO_SPEECH_PITCH_MINIMUM_LABEL},
331 {"textToSpeechPitchMaximumLabel",
332 IDS_SETTINGS_TEXT_TO_SPEECH_PITCH_MAXIMUM_LABEL},
333 {"textToSpeechVolume", IDS_SETTINGS_TEXT_TO_SPEECH_VOLUME},
334 {"textToSpeechVolumeMinimumLabel",
335 IDS_SETTINGS_TEXT_TO_SPEECH_VOLUME_MINIMUM_LABEL},
336 {"textToSpeechVolumeMaximumLabel",
337 IDS_SETTINGS_TEXT_TO_SPEECH_VOLUME_MAXIMUM_LABEL},
338 {"percentage", IDS_SETTINGS_PERCENTAGE},
339 {"defaultPercentage", IDS_SETTINGS_DEFAULT_PERCENTAGE},
340 {"textToSpeechPreviewHeading",
341 IDS_SETTINGS_TEXT_TO_SPEECH_PREVIEW_HEADING},
342 {"textToSpeechPreviewInputLabel",
343 IDS_SETTINGS_TEXT_TO_SPEECH_PREVIEW_INPUT_LABEL},
344 {"textToSpeechPreviewInput", IDS_SETTINGS_TEXT_TO_SPEECH_PREVIEW_INPUT},
345 {"textToSpeechPreviewVoice", IDS_SETTINGS_TEXT_TO_SPEECH_PREVIEW_VOICE},
346 {"textToSpeechPreviewPlay", IDS_SETTINGS_TEXT_TO_SPEECH_PREVIEW_PLAY},
347 {"textToSpeechEngines", IDS_SETTINGS_TEXT_TO_SPEECH_ENGINES},
348 {"tabletModeShelfNavigationButtonsSettingLabel",
349 IDS_SETTINGS_A11Y_TABLET_MODE_SHELF_BUTTONS_LABEL},
350 {"tabletModeShelfNavigationButtonsSettingDescription",
351 IDS_SETTINGS_A11Y_TABLET_MODE_SHELF_BUTTONS_DESCRIPTION},
352 };
353 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
354
355 html_source->AddString("accountManagerLearnMoreUrl",
356 chrome::kAccountManagerLearnMoreURL);
357 html_source->AddString("a11yLearnMoreUrl",
358 chrome::kChromeAccessibilityHelpURL);
359
360 base::CommandLine& cmd = *base::CommandLine::ForCurrentProcess();
361 html_source->AddBoolean(
362 "showExperimentalAccessibilitySwitchAccess",
363 cmd.HasSwitch(::switches::kEnableExperimentalAccessibilitySwitchAccess));
364
365 html_source->AddBoolean(
366 "showExperimentalAccessibilitySwitchAccessImprovedTextInput",
367 cmd.HasSwitch(
368 ::switches::kEnableExperimentalAccessibilitySwitchAccessText));
369
370 html_source->AddBoolean("showExperimentalA11yLabels",
371 base::FeatureList::IsEnabled(
372 ::features::kExperimentalAccessibilityLabels));
373
374 html_source->AddBoolean(
375 "showTabletModeShelfNavigationButtonsSettings",
376 ash::features::IsHideShelfControlsInTabletModeEnabled());
377
378 html_source->AddString("tabletModeShelfNavigationButtonsLearnMoreUrl",
379 chrome::kTabletModeGesturesLearnMoreURL);
380
381 html_source->AddBoolean("enableLiveCaption",
382 base::FeatureList::IsEnabled(media::kLiveCaption));
383
384 ::settings::AddCaptionSubpageStrings(html_source);
385 }
386
AddLanguagesStrings(content::WebUIDataSource * html_source)387 void AddLanguagesStrings(content::WebUIDataSource* html_source) {
388 static constexpr webui::LocalizedString kLocalizedStrings[] = {
389 {"orderLanguagesInstructions",
390 IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_ORDERING_INSTRUCTIONS},
391 {"osLanguagesPageTitle", IDS_OS_SETTINGS_LANGUAGES_AND_INPUT_PAGE_TITLE},
392 {"osLanguagesListTitle", IDS_OS_SETTINGS_LANGUAGES_LIST_TITLE},
393 {"inputMethodsListTitle",
394 IDS_SETTINGS_LANGUAGES_INPUT_METHODS_LIST_TITLE},
395 {"inputMethodEnabled", IDS_SETTINGS_LANGUAGES_INPUT_METHOD_ENABLED},
396 {"inputMethodsExpandA11yLabel",
397 IDS_SETTINGS_LANGUAGES_INPUT_METHODS_EXPAND_ACCESSIBILITY_LABEL},
398 {"inputMethodsManagedbyPolicy",
399 IDS_SETTINGS_LANGUAGES_INPUT_METHODS_MANAGED_BY_POLICY},
400 {"manageInputMethods", IDS_SETTINGS_LANGUAGES_INPUT_METHODS_MANAGE},
401 {"manageInputMethodsPageTitle",
402 IDS_SETTINGS_LANGUAGES_MANAGE_INPUT_METHODS_TITLE},
403 {"showImeMenu", IDS_SETTINGS_LANGUAGES_SHOW_IME_MENU},
404 {"displayLanguageRestart",
405 IDS_SETTINGS_LANGUAGES_RESTART_TO_DISPLAY_LANGUAGE},
406 {"moveDown", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_MOVE_DOWN},
407 {"displayInThisLanguage",
408 IDS_SETTINGS_LANGUAGES_DISPLAY_IN_THIS_LANGUAGE},
409 {"searchLanguages", IDS_SETTINGS_LANGUAGE_SEARCH},
410 {"addLanguagesDialogTitle",
411 IDS_SETTINGS_LANGUAGES_MANAGE_LANGUAGES_TITLE},
412 {"moveToTop", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_MOVE_TO_TOP},
413 {"isDisplayedInThisLanguage",
414 IDS_SETTINGS_LANGUAGES_IS_DISPLAYED_IN_THIS_LANGUAGE},
415 {"removeLanguage", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_REMOVE},
416 {"addLanguages", IDS_SETTINGS_LANGUAGES_LANGUAGES_ADD},
417 {"moveUp", IDS_SETTINGS_LANGUAGES_LANGUAGES_LIST_MOVE_UP},
418 };
419 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
420
421 html_source->AddString(
422 "languagesLearnMoreURL",
423 base::ASCIIToUTF16(chrome::kLanguageSettingsLearnMoreUrl));
424 }
425
AddPersonalizationStrings(content::WebUIDataSource * html_source)426 void AddPersonalizationStrings(content::WebUIDataSource* html_source) {
427 static constexpr webui::LocalizedString kLocalizedStrings[] = {
428 {"ambientModeTitle", IDS_OS_SETTINGS_AMBIENT_MODE_TITLE},
429 {"ambientModeEnabled", IDS_OS_SETTINGS_AMBIENT_MODE_ENABLED},
430 {"ambientModeDisabled", IDS_OS_SETTINGS_AMBIENT_MODE_DISABLED},
431 {"ambientModeOn", IDS_OS_SETTINGS_AMBIENT_MODE_ON},
432 {"ambientModeOff", IDS_OS_SETTINGS_AMBIENT_MODE_OFF},
433 {"ambientModeTopicSourceTitle",
434 IDS_OS_SETTINGS_AMBIENT_MODE_TOPIC_SOURCE_TITLE},
435 {"ambientModeTopicSourceGooglePhotos",
436 IDS_OS_SETTINGS_AMBIENT_MODE_TOPIC_SOURCE_GOOGLE_PHOTOS},
437 {"ambientModeTopicSourceArtGallery",
438 IDS_OS_SETTINGS_AMBIENT_MODE_TOPIC_SOURCE_ART_GALLERY},
439 {"changePictureTitle", IDS_OS_SETTINGS_CHANGE_PICTURE_TITLE},
440 {"openWallpaperApp", IDS_OS_SETTINGS_OPEN_WALLPAPER_APP},
441 {"personalizationPageTitle", IDS_OS_SETTINGS_PERSONALIZATION},
442 {"setWallpaper", IDS_OS_SETTINGS_SET_WALLPAPER},
443 {"takePhoto", IDS_SETTINGS_CHANGE_PICTURE_TAKE_PHOTO},
444 {"captureVideo", IDS_SETTINGS_CHANGE_PICTURE_CAPTURE_VIDEO},
445 {"discardPhoto", IDS_SETTINGS_CHANGE_PICTURE_DISCARD_PHOTO},
446 {"previewAltText", IDS_SETTINGS_CHANGE_PICTURE_PREVIEW_ALT},
447 {"switchModeToVideo", IDS_SETTINGS_CHANGE_PICTURE_SWITCH_MODE_TO_VIDEO},
448 {"profilePhoto", IDS_SETTINGS_CHANGE_PICTURE_PROFILE_PHOTO},
449 {"changePicturePageDescription", IDS_SETTINGS_CHANGE_PICTURE_DIALOG_TEXT},
450 {"switchModeToCamera", IDS_SETTINGS_CHANGE_PICTURE_SWITCH_MODE_TO_CAMERA},
451 {"chooseFile", IDS_SETTINGS_CHANGE_PICTURE_CHOOSE_FILE},
452 {"oldPhoto", IDS_SETTINGS_CHANGE_PICTURE_OLD_PHOTO},
453 {"oldVideo", IDS_SETTINGS_CHANGE_PICTURE_OLD_VIDEO},
454 {"authorCreditText", IDS_SETTINGS_CHANGE_PICTURE_AUTHOR_CREDIT_TEXT},
455 {"photoCaptureAccessibleText",
456 IDS_SETTINGS_PHOTO_CAPTURE_ACCESSIBLE_TEXT},
457 {"photoDiscardAccessibleText",
458 IDS_SETTINGS_PHOTO_DISCARD_ACCESSIBLE_TEXT},
459 {"photoModeAccessibleText", IDS_SETTINGS_PHOTO_MODE_ACCESSIBLE_TEXT},
460 {"videoModeAccessibleText", IDS_SETTINGS_VIDEO_MODE_ACCESSIBLE_TEXT},
461 };
462 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
463
464 html_source->AddBoolean(
465 "changePictureVideoModeEnabled",
466 base::FeatureList::IsEnabled(::features::kChangePictureVideoMode));
467 html_source->AddBoolean("isAmbientModeEnabled",
468 chromeos::features::IsAmbientModeEnabled());
469 }
470
AddFingerprintListStrings(content::WebUIDataSource * html_source)471 void AddFingerprintListStrings(content::WebUIDataSource* html_source) {
472 static constexpr webui::LocalizedString kLocalizedStrings[] = {
473 {"lockScreenAddFingerprint",
474 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_ADD_FINGERPRINT_BUTTON},
475 {"lockScreenRegisteredFingerprints",
476 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_REGISTERED_FINGERPRINTS_LABEL},
477 {"lockScreenFingerprintWarning",
478 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_FINGERPRINT_LESS_SECURE},
479 };
480 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
481 }
482
AddSetupPinDialogStrings(content::WebUIDataSource * html_source)483 void AddSetupPinDialogStrings(content::WebUIDataSource* html_source) {
484 static constexpr webui::LocalizedString kLocalizedStrings[] = {
485 {"configurePinChoosePinTitle",
486 IDS_SETTINGS_PEOPLE_CONFIGURE_PIN_CHOOSE_PIN_TITLE},
487 {"configurePinConfirmPinTitle",
488 IDS_SETTINGS_PEOPLE_CONFIGURE_PIN_CONFIRM_PIN_TITLE},
489 {"configurePinMismatched", IDS_SETTINGS_PEOPLE_CONFIGURE_PIN_MISMATCHED},
490 {"configurePinTooShort", IDS_SETTINGS_PEOPLE_CONFIGURE_PIN_TOO_SHORT},
491 {"configurePinTooLong", IDS_SETTINGS_PEOPLE_CONFIGURE_PIN_TOO_LONG},
492 {"configurePinWeakPin", IDS_SETTINGS_PEOPLE_CONFIGURE_PIN_WEAK_PIN},
493 {"pinKeyboardPlaceholderPin", IDS_PIN_KEYBOARD_HINT_TEXT_PIN},
494 {"pinKeyboardPlaceholderPinPassword",
495 IDS_PIN_KEYBOARD_HINT_TEXT_PIN_PASSWORD},
496 {"pinKeyboardDeleteAccessibleName",
497 IDS_PIN_KEYBOARD_DELETE_ACCESSIBLE_NAME},
498 };
499 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
500
501 // Format numbers to be used on the pin keyboard.
502 for (int j = 0; j <= 9; j++) {
503 html_source->AddString("pinKeyboard" + base::NumberToString(j),
504 base::FormatNumber(int64_t{j}));
505 }
506 }
507
AddSetupFingerprintDialogStrings(content::WebUIDataSource * html_source)508 void AddSetupFingerprintDialogStrings(content::WebUIDataSource* html_source) {
509 static constexpr webui::LocalizedString kLocalizedStrings[] = {
510 {"configureFingerprintTitle", IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_TITLE},
511 {"configureFingerprintAddAnotherButton",
512 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_ADD_ANOTHER_BUTTON},
513 {"configureFingerprintInstructionReadyStep",
514 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_INSTRUCTION_READY},
515 {"configureFingerprintLiftFinger",
516 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_LIFT_FINGER},
517 {"configureFingerprintTryAgain",
518 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_TRY_AGAIN},
519 {"configureFingerprintImmobile",
520 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_FINGER_IMMOBILE},
521 };
522 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
523 }
524
AddFingerprintStrings(content::WebUIDataSource * html_source)525 void AddFingerprintStrings(content::WebUIDataSource* html_source) {
526 int instruction_id, aria_label_id;
527 using FingerprintLocation = chromeos::quick_unlock::FingerprintLocation;
528 switch (chromeos::quick_unlock::GetFingerprintLocation()) {
529 case FingerprintLocation::TABLET_POWER_BUTTON:
530 instruction_id =
531 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_INSTRUCTION_LOCATE_SCANNER_POWER_BUTTON;
532 aria_label_id =
533 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_INSTRUCTION_LOCATE_SCANNER_POWER_BUTTON_ARIA_LABEL;
534 break;
535 case FingerprintLocation::KEYBOARD_BOTTOM_LEFT:
536 instruction_id =
537 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_INSTRUCTION_LOCATE_SCANNER_KEYBOARD;
538 aria_label_id =
539 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_INSTRUCTION_LOCATE_SCANNER_KEYBOARD_BOTTOM_LEFT_ARIA_LABEL;
540 break;
541 case FingerprintLocation::KEYBOARD_BOTTOM_RIGHT:
542 instruction_id =
543 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_INSTRUCTION_LOCATE_SCANNER_KEYBOARD;
544 aria_label_id =
545 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_INSTRUCTION_LOCATE_SCANNER_KEYBOARD_BOTTOM_RIGHT_ARIA_LABEL;
546 break;
547 case FingerprintLocation::KEYBOARD_TOP_RIGHT:
548 instruction_id =
549 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_INSTRUCTION_LOCATE_SCANNER_KEYBOARD;
550 aria_label_id =
551 IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_INSTRUCTION_LOCATE_SCANNER_KEYBOARD_TOP_RIGHT_ARIA_LABEL;
552 break;
553 }
554 html_source->AddLocalizedString(
555 "configureFingerprintInstructionLocateScannerStep", instruction_id);
556 html_source->AddLocalizedString("configureFingerprintScannerStepAriaLabel",
557 aria_label_id);
558 }
559
AddAccountManagerPageStrings(content::WebUIDataSource * html_source)560 void AddAccountManagerPageStrings(content::WebUIDataSource* html_source) {
561 static constexpr webui::LocalizedString kLocalizedStrings[] = {
562 {"accountManagerDescription", IDS_SETTINGS_ACCOUNT_MANAGER_DESCRIPTION},
563 {"accountManagerChildDescription",
564 IDS_SETTINGS_ACCOUNT_MANAGER_CHILD_DESCRIPTION},
565 {"accountListHeader", IDS_SETTINGS_ACCOUNT_MANAGER_LIST_HEADER},
566 {"accountManagerPrimaryAccountTooltip",
567 IDS_SETTINGS_ACCOUNT_MANAGER_PRIMARY_ACCOUNT_TOOLTIP},
568 {"accountManagerEducationAccountLabel",
569 IDS_SETTINGS_ACCOUNT_MANAGER_EDUCATION_ACCOUNT},
570 {"removeAccountLabel", IDS_SETTINGS_ACCOUNT_MANAGER_REMOVE_ACCOUNT_LABEL},
571 {"addAccountLabel", IDS_SETTINGS_ACCOUNT_MANAGER_ADD_ACCOUNT_LABEL},
572 {"addSchoolAccountLabel",
573 IDS_SETTINGS_ACCOUNT_MANAGER_ADD_SCHOOL_ACCOUNT_LABEL},
574 {"accountManagerSecondaryAccountsDisabledText",
575 IDS_SETTINGS_ACCOUNT_MANAGER_SECONDARY_ACCOUNTS_DISABLED_TEXT},
576 {"accountManagerSecondaryAccountsDisabledChildText",
577 IDS_SETTINGS_ACCOUNT_MANAGER_SECONDARY_ACCOUNTS_DISABLED_CHILD_TEXT},
578 {"accountManagerSignedOutAccountName",
579 IDS_SETTINGS_ACCOUNT_MANAGER_SIGNED_OUT_ACCOUNT_PLACEHOLDER},
580 {"accountManagerUnmigratedAccountName",
581 IDS_SETTINGS_ACCOUNT_MANAGER_UNMIGRATED_ACCOUNT_PLACEHOLDER},
582 {"accountManagerMigrationLabel",
583 IDS_SETTINGS_ACCOUNT_MANAGER_MIGRATION_LABEL},
584 {"accountManagerReauthenticationLabel",
585 IDS_SETTINGS_ACCOUNT_MANAGER_REAUTHENTICATION_LABEL},
586 {"accountManagerMigrationTooltip",
587 IDS_SETTINGS_ACCOUNT_MANAGER_MIGRATION_TOOLTIP},
588 {"accountManagerReauthenticationTooltip",
589 IDS_SETTINGS_ACCOUNT_MANAGER_REAUTHENTICATION_TOOLTIP},
590 {"accountManagerMoreActionsTooltip",
591 IDS_SETTINGS_ACCOUNT_MANAGER_MORE_ACTIONS_TOOLTIP},
592 {"accountManagerManagedLabel",
593 IDS_SETTINGS_ACCOUNT_MANAGER_MANAGEMENT_STATUS_MANAGED_ACCOUNT},
594 {"accountManagerUnmanagedLabel",
595 IDS_SETTINGS_ACCOUNT_MANAGER_MANAGEMENT_STATUS_UNMANAGED_ACCOUNT},
596 };
597 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
598 }
599
AddSyncControlsStrings(content::WebUIDataSource * html_source)600 void AddSyncControlsStrings(content::WebUIDataSource* html_source) {
601 static constexpr webui::LocalizedString kLocalizedStrings[] = {
602 {"syncEverythingCheckboxLabel",
603 IDS_SETTINGS_SYNC_EVERYTHING_CHECKBOX_LABEL},
604 {"wallpaperCheckboxLabel", IDS_OS_SETTINGS_WALLPAPER_CHECKBOX_LABEL},
605 {"osSyncTurnOff", IDS_OS_SETTINGS_SYNC_TURN_OFF},
606 {"osSyncSettingsCheckboxLabel",
607 IDS_OS_SETTINGS_SYNC_SETTINGS_CHECKBOX_LABEL},
608 {"wifiConfigurationsCheckboxLabel",
609 IDS_SETTINGS_WIFI_CONFIGURATIONS_CHECKBOX_LABEL},
610 {"osSyncAppsCheckboxLabel", IDS_OS_SETTINGS_SYNC_APPS_CHECKBOX_LABEL},
611 {"osSyncTurnOn", IDS_OS_SETTINGS_SYNC_TURN_ON},
612 {"osSyncFeatureLabel", IDS_OS_SETTINGS_SYNC_FEATURE_LABEL},
613 };
614 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
615
616 html_source->AddString(
617 "browserSettingsSyncSetupUrl",
618 base::StrCat({chrome::kChromeUISettingsURL, chrome::kSyncSetupSubPage}));
619 }
620
AddCrostiniStrings(content::WebUIDataSource * html_source,Profile * profile)621 void AddCrostiniStrings(content::WebUIDataSource* html_source,
622 Profile* profile) {
623 static constexpr webui::LocalizedString kLocalizedStrings[] = {
624 {"crostiniPageTitle", IDS_SETTINGS_CROSTINI_TITLE},
625 {"crostiniPageLabel", IDS_SETTINGS_CROSTINI_LABEL},
626 {"crostiniEnable", IDS_SETTINGS_TURN_ON},
627 {"crostiniSharedPaths", IDS_SETTINGS_CROSTINI_SHARED_PATHS},
628 {"crostiniSharedPathsListHeading",
629 IDS_SETTINGS_CROSTINI_SHARED_PATHS_LIST_HEADING},
630 {"crostiniSharedPathsInstructionsAdd",
631 IDS_SETTINGS_CROSTINI_SHARED_PATHS_INSTRUCTIONS_ADD},
632 {"crostiniSharedPathsInstructionsRemove",
633 IDS_SETTINGS_CROSTINI_SHARED_PATHS_INSTRUCTIONS_REMOVE},
634 {"crostiniSharedPathsRemoveSharing",
635 IDS_SETTINGS_CROSTINI_SHARED_PATHS_REMOVE_SHARING},
636 {"crostiniSharedPathsRemoveFailureDialogMessage",
637 IDS_SETTINGS_CROSTINI_SHARED_PATHS_REMOVE_FAILURE_DIALOG_MESSAGE},
638 {"crostiniSharedPathsRemoveFailureDialogTitle",
639 IDS_SETTINGS_CROSTINI_SHARED_PATHS_REMOVE_FAILURE_DIALOG_TITLE},
640 {"crostiniSharedPathsRemoveFailureTryAgain",
641 IDS_SETTINGS_CROSTINI_SHARED_PATHS_REMOVE_FAILURE_TRY_AGAIN},
642 {"crostiniSharedPathsListEmptyMessage",
643 IDS_SETTINGS_CROSTINI_SHARED_PATHS_LIST_EMPTY_MESSAGE},
644 {"crostiniExportImportTitle", IDS_SETTINGS_CROSTINI_EXPORT_IMPORT_TITLE},
645 {"crostiniExport", IDS_SETTINGS_CROSTINI_EXPORT},
646 {"crostiniExportLabel", IDS_SETTINGS_CROSTINI_EXPORT_LABEL},
647 {"crostiniImport", IDS_SETTINGS_CROSTINI_IMPORT},
648 {"crostiniImportLabel", IDS_SETTINGS_CROSTINI_IMPORT_LABEL},
649 {"crostiniImportConfirmationDialogTitle",
650 IDS_SETTINGS_CROSTINI_CONFIRM_IMPORT_DIALOG_WINDOW_TITLE},
651 {"crostiniImportConfirmationDialogMessage",
652 IDS_SETTINGS_CROSTINI_CONFIRM_IMPORT_DIALOG_WINDOW_MESSAGE},
653 {"crostiniImportConfirmationDialogConfirmationButton",
654 IDS_SETTINGS_CROSTINI_IMPORT},
655 {"crostiniRemoveButton", IDS_SETTINGS_CROSTINI_REMOVE_BUTTON},
656 {"crostiniSharedUsbDevicesLabel",
657 IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_LABEL},
658 {"crostiniSharedUsbDevicesDescription",
659 IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_DESCRIPTION},
660 {"crostiniSharedUsbDevicesExtraDescription",
661 IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_EXTRA_DESCRIPTION},
662 {"crostiniSharedUsbDevicesListEmptyMessage",
663 IDS_SETTINGS_CROSTINI_SHARED_USB_DEVICES_LIST_EMPTY_MESSAGE},
664 {"crostiniArcAdbTitle", IDS_SETTINGS_CROSTINI_ARC_ADB_TITLE},
665 {"crostiniArcAdbDescription", IDS_SETTINGS_CROSTINI_ARC_ADB_DESCRIPTION},
666 {"crostiniArcAdbLabel", IDS_SETTINGS_CROSTINI_ARC_ADB_LABEL},
667 {"crostiniArcAdbRestartButton",
668 IDS_SETTINGS_CROSTINI_ARC_ADB_RESTART_BUTTON},
669 {"crostiniArcAdbConfirmationTitleEnable",
670 IDS_SETTINGS_CROSTINI_ARC_ADB_CONFIRMATION_TITLE_ENABLE},
671 {"crostiniArcAdbConfirmationTitleDisable",
672 IDS_SETTINGS_CROSTINI_ARC_ADB_CONFIRMATION_TITLE_DISABLE},
673 {"crostiniContainerUpgrade",
674 IDS_SETTINGS_CROSTINI_CONTAINER_UPGRADE_MESSAGE},
675 {"crostiniContainerUpgradeSubtext",
676 IDS_SETTINGS_CROSTINI_CONTAINER_UPGRADE_SUBTEXT},
677 {"crostiniContainerUpgradeButton",
678 IDS_SETTINGS_CROSTINI_CONTAINER_UPGRADE_BUTTON},
679 {"crostiniPortForwarding", IDS_SETTINGS_CROSTINI_PORT_FORWARDING},
680 {"crostiniPortForwardingDescription",
681 IDS_SETTINGS_CROSTINI_PORT_FORWARDING_DESCRIPTION},
682 {"crostiniPortForwardingNoPorts",
683 IDS_SETTINGS_CROSTINI_PORT_FORWARDING_NO_PORTS},
684 {"crostiniPortForwardingTableTitle",
685 IDS_SETTINGS_CROSTINI_PORT_FORWARDING_TABLE_TITLE},
686 {"crostiniPortForwardingListPortNumber",
687 IDS_SETTINGS_CROSTINI_PORT_FORWARDING_LIST_PORT_NUMBER},
688 {"crostiniPortForwardingListLabel",
689 IDS_SETTINGS_CROSTINI_PORT_FORWARDING_LIST_LABEL},
690 {"crostiniPortForwardingAddPortButton",
691 IDS_SETTINGS_CROSTINI_PORT_FORWARDING_ADD_PORT_BUTTON},
692 {"crostiniPortForwardingAddPortButtonDescription",
693 IDS_SETTINGS_CROSTINI_PORT_FORWARDING_ADD_PORT_BUTTON_DESCRIPTION},
694 {"crostiniPortForwardingAddPortDialogTitle",
695 IDS_SETTINGS_CROSTINI_PORT_FORWARDING_ADD_PORT_DIALOG_TITLE},
696 {"crostiniPortForwardingAddPortDialogLabel",
697 IDS_SETTINGS_CROSTINI_PORT_FORWARDING_ADD_PORT_DIALOG_LABEL},
698 {"crostiniPortForwardingTCP", IDS_SETTINGS_CROSTINI_PORT_FORWARDING_TCP},
699 {"crostiniPortForwardingUDP", IDS_SETTINGS_CROSTINI_PORT_FORWARDING_UDP},
700 {"crostiniPortForwardingAddError",
701 IDS_SETTINGS_CROSTINI_PORT_FORWARDING_ADD_ERROR},
702 {"crostiniDiskResizeTitle", IDS_SETTINGS_CROSTINI_DISK_RESIZE_TITLE},
703 {"crostiniDiskResizeShowButton",
704 IDS_SETTINGS_CROSTINI_DISK_RESIZE_SHOW_BUTTON},
705 {"crostiniDiskResizeLabel", IDS_SETTINGS_CROSTINI_DISK_RESIZE_LABEL},
706 {"crostiniDiskResizeUnsupported",
707 IDS_SETTINGS_CROSTINI_DISK_RESIZE_UNSUPPORTED},
708 {"crostiniDiskResizeLoading", IDS_SETTINGS_CROSTINI_DISK_RESIZE_LOADING},
709 {"crostiniDiskResizeError", IDS_SETTINGS_CROSTINI_DISK_RESIZE_ERROR},
710 {"crostiniDiskResizeErrorRetry",
711 IDS_SETTINGS_CROSTINI_DISK_RESIZE_ERROR_RETRY},
712 {"crostiniDiskResizeCancel", IDS_SETTINGS_CROSTINI_DISK_RESIZE_CANCEL},
713 {"crostiniDiskResizeGoButton",
714 IDS_SETTINGS_CROSTINI_DISK_RESIZE_GO_BUTTON},
715 {"crostiniDiskResizeInProgress",
716 IDS_SETTINGS_CROSTINI_DISK_RESIZE_IN_PROGRESS},
717 {"crostiniDiskResizeResizingError",
718 IDS_SETTINGS_CROSTINI_DISK_RESIZE_RESIZING_ERROR},
719 {"crostiniDiskResizeDone", IDS_SETTINGS_CROSTINI_DISK_RESIZE_DONE},
720 {"crostiniMicTitle", IDS_SETTINGS_CROSTINI_MIC_TITLE},
721 {"crostiniMicDialogTitle", IDS_SETTINGS_CROSTINI_MIC_DIALOG_TITLE},
722 {"crostiniMicDialogLabel", IDS_SETTINGS_CROSTINI_MIC_DIALOG_LABEL},
723 };
724 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
725 html_source->AddString(
726 "crostiniSubtext",
727 l10n_util::GetStringFUTF16(
728 IDS_SETTINGS_CROSTINI_SUBTEXT, ui::GetChromeOSDeviceName(),
729 GetHelpUrlWithBoard(chrome::kLinuxAppsLearnMoreURL)));
730 html_source->AddString(
731 "crostiniArcAdbPowerwashRequiredSublabel",
732 l10n_util::GetStringFUTF16(
733 IDS_SETTINGS_CROSTINI_ARC_ADB_POWERWASH_REQUIRED_SUBLABEL,
734 base::ASCIIToUTF16(chrome::kArcAdbSideloadingLearnMoreURL)));
735 html_source->AddString("crostiniRemove", l10n_util::GetStringFUTF16(
736 IDS_SETTINGS_CROSTINI_REMOVE,
737 ui::GetChromeOSDeviceName()));
738 html_source->AddString(
739 "crostiniArcAdbConfirmationMessageEnable",
740 l10n_util::GetStringFUTF16(
741 IDS_SETTINGS_CROSTINI_ARC_ADB_CONFIRMATION_MESSAGE_ENABLE,
742 ui::GetChromeOSDeviceName()));
743 html_source->AddString(
744 "crostiniArcAdbConfirmationMessageDisable",
745 l10n_util::GetStringFUTF16(
746 IDS_SETTINGS_CROSTINI_ARC_ADB_CONFIRMATION_MESSAGE_DISABLE,
747 ui::GetChromeOSDeviceName()));
748 html_source->AddString(
749 "crostiniSharedPathsInstructionsLocate",
750 l10n_util::GetStringFUTF16(
751 IDS_SETTINGS_CROSTINI_SHARED_PATHS_INSTRUCTIONS_LOCATE,
752 base::ASCIIToUTF16(
753 crostini::ContainerChromeOSBaseDirectory().value())));
754 html_source->AddBoolean(
755 "showCrostiniExportImport",
756 crostini::CrostiniFeatures::Get()->IsExportImportUIAllowed(profile));
757 html_source->AddBoolean("arcAdbSideloadingSupported",
758 base::FeatureList::IsEnabled(
759 chromeos::features::kArcAdbSideloadingFeature));
760 html_source->AddBoolean("showCrostiniPortForwarding",
761 base::FeatureList::IsEnabled(
762 chromeos::features::kCrostiniPortForwarding));
763 html_source->AddBoolean("isOwnerProfile",
764 chromeos::ProfileHelper::IsOwnerProfile(profile));
765 html_source->AddBoolean("isEnterpriseManaged",
766 IsDeviceManaged() || IsProfileManaged(profile));
767 html_source->AddBoolean(
768 "canChangeAdbSideloading",
769 crostini::CrostiniFeatures::Get()->CanChangeAdbSideloading(profile));
770 html_source->AddBoolean("showCrostiniContainerUpgrade",
771 crostini::ShouldAllowContainerUpgrade(profile));
772 html_source->AddBoolean(
773 "showCrostiniDiskResize",
774 base::FeatureList::IsEnabled(chromeos::features::kCrostiniDiskResizing));
775 html_source->AddBoolean("showCrostiniMic",
776 base::FeatureList::IsEnabled(
777 chromeos::features::kCrostiniShowMicSetting));
778 }
779
AddPluginVmStrings(content::WebUIDataSource * html_source,Profile * profile)780 void AddPluginVmStrings(content::WebUIDataSource* html_source,
781 Profile* profile) {
782 static constexpr webui::LocalizedString kLocalizedStrings[] = {
783 {"pluginVmPageTitle", IDS_SETTINGS_PLUGIN_VM_PAGE_TITLE},
784 {"pluginVmPageLabel", IDS_SETTINGS_PLUGIN_VM_PAGE_LABEL},
785 {"pluginVmPageSubtext", IDS_SETTINGS_PLUGIN_VM_PAGE_SUBTEXT},
786 {"pluginVmPageEnable", IDS_SETTINGS_TURN_ON},
787 {"pluginVmPrinterAccess", IDS_SETTINGS_PLUGIN_VM_PRINTER_ACCESS},
788 {"pluginVmSharedPaths", IDS_SETTINGS_PLUGIN_VM_SHARED_PATHS},
789 {"pluginVmSharedPathsListHeading",
790 IDS_SETTINGS_PLUGIN_VM_SHARED_PATHS_LIST_HEADING},
791 {"pluginVmSharedPathsInstructionsAdd",
792 IDS_SETTINGS_PLUGIN_VM_SHARED_PATHS_INSTRUCTIONS_ADD},
793 {"pluginVmSharedPathsInstructionsRemove",
794 IDS_SETTINGS_PLUGIN_VM_SHARED_PATHS_INSTRUCTIONS_REMOVE},
795 {"pluginVmSharedPathsRemoveSharing",
796 IDS_SETTINGS_PLUGIN_VM_SHARED_PATHS_REMOVE_SHARING},
797 {"pluginVmRemove", IDS_SETTINGS_PLUGIN_VM_REMOVE_LABEL},
798 {"pluginVmRemoveButton", IDS_SETTINGS_PLUGIN_VM_REMOVE_BUTTON},
799 {"pluginVmRemoveConfirmationDialogMessage",
800 IDS_SETTINGS_PLUGIN_VM_CONFIRM_REMOVE_DIALOG_BODY},
801 };
802 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
803 }
804
AddAndroidAppStrings(content::WebUIDataSource * html_source)805 void AddAndroidAppStrings(content::WebUIDataSource* html_source) {
806 static constexpr webui::LocalizedString kLocalizedStrings[] = {
807 {"androidAppsPageLabel", IDS_SETTINGS_ANDROID_APPS_LABEL},
808 {"androidAppsEnable", IDS_SETTINGS_TURN_ON},
809 {"androidAppsManageApps", IDS_SETTINGS_ANDROID_APPS_MANAGE_APPS},
810 {"androidAppsRemove", IDS_SETTINGS_ANDROID_APPS_REMOVE},
811 {"androidAppsRemoveButton", IDS_SETTINGS_ANDROID_APPS_REMOVE_BUTTON},
812 {"androidAppsDisableDialogTitle",
813 IDS_SETTINGS_ANDROID_APPS_DISABLE_DIALOG_TITLE},
814 {"androidAppsDisableDialogMessage",
815 IDS_SETTINGS_ANDROID_APPS_DISABLE_DIALOG_MESSAGE},
816 {"androidAppsDisableDialogRemove",
817 IDS_SETTINGS_ANDROID_APPS_DISABLE_DIALOG_REMOVE},
818 {"androidAppsManageAppLinks", IDS_SETTINGS_ANDROID_APPS_MANAGE_APP_LINKS},
819 };
820 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
821 html_source->AddLocalizedString("androidAppsPageTitle",
822 arc::IsPlayStoreAvailable()
823 ? IDS_SETTINGS_ANDROID_APPS_TITLE
824 : IDS_SETTINGS_ANDROID_SETTINGS_TITLE);
825 html_source->AddString(
826 "androidAppsSubtext",
827 l10n_util::GetStringFUTF16(
828 IDS_SETTINGS_ANDROID_APPS_SUBTEXT, ui::GetChromeOSDeviceName(),
829 GetHelpUrlWithBoard(chrome::kAndroidAppsLearnMoreURL)));
830 }
831
AddAppsStrings(content::WebUIDataSource * html_source)832 void AddAppsStrings(content::WebUIDataSource* html_source) {
833 static constexpr webui::LocalizedString kLocalizedStrings[] = {
834 {"appsPageTitle", IDS_SETTINGS_APPS_TITLE},
835 {"appManagementTitle", IDS_SETTINGS_APPS_LINK_TEXT},
836 };
837 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
838 }
839
AddAppManagementStrings(content::WebUIDataSource * html_source)840 void AddAppManagementStrings(content::WebUIDataSource* html_source) {
841 static constexpr webui::LocalizedString kLocalizedStrings[] = {
842 {"appManagementAppInstalledByPolicyLabel",
843 IDS_APP_MANAGEMENT_POLICY_APP_POLICY_STRING},
844 {"appManagementCameraPermissionLabel", IDS_APP_MANAGEMENT_CAMERA},
845 {"appManagementContactsPermissionLabel", IDS_APP_MANAGEMENT_CONTACTS},
846 {"appManagementLocationPermissionLabel", IDS_APP_MANAGEMENT_LOCATION},
847 {"appManagementMicrophonePermissionLabel", IDS_APP_MANAGEMENT_MICROPHONE},
848 {"appManagementMoreSettingsLabel", IDS_APP_MANAGEMENT_MORE_SETTINGS},
849 {"appManagementNoAppsFound", IDS_APP_MANAGEMENT_NO_APPS_FOUND},
850 {"appManagementNoPermissions",
851 IDS_APPLICATION_INFO_APP_NO_PERMISSIONS_TEXT},
852 {"appManagementNotificationsLabel", IDS_APP_MANAGEMENT_NOTIFICATIONS},
853 {"appManagementPermissionsLabel", IDS_APP_MANAGEMENT_PERMISSIONS},
854 {"appManagementPinToShelfLabel", IDS_APP_MANAGEMENT_PIN_TO_SHELF},
855 {"appManagementSearchPrompt", IDS_APP_MANAGEMENT_SEARCH_PROMPT},
856 {"appManagementStoragePermissionLabel", IDS_APP_MANAGEMENT_STORAGE},
857 {"appManagementUninstallLabel", IDS_APP_MANAGEMENT_UNINSTALL_APP},
858 };
859 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
860 }
861
AddParentalControlStrings(content::WebUIDataSource * html_source,Profile * profile)862 void AddParentalControlStrings(content::WebUIDataSource* html_source,
863 Profile* profile) {
864 static constexpr webui::LocalizedString kLocalizedStrings[] = {
865 {"parentalControlsPageTitle", IDS_SETTINGS_PARENTAL_CONTROLS_PAGE_TITLE},
866 {"parentalControlsPageSetUpLabel",
867 IDS_SETTINGS_PARENTAL_CONTROLS_PAGE_SET_UP_LABEL},
868 {"parentalControlsPageViewSettingsLabel",
869 IDS_SETTINGS_PARENTAL_CONTROLS_PAGE_VIEW_SETTINGS_LABEL},
870 {"parentalControlsPageConnectToInternetLabel",
871 IDS_SETTINGS_PARENTAL_CONTROLS_PAGE_CONNECT_TO_INTERNET_LABEL},
872 {"parentalControlsSetUpButtonLabel",
873 IDS_SETTINGS_PARENTAL_CONTROLS_SET_UP_BUTTON_LABEL},
874 {"parentalControlsSetUpButtonRole",
875 IDS_SETTINGS_PARENTAL_CONTROLS_SET_UP_BUTTON_ROLE},
876 };
877 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
878
879 html_source->AddBoolean(
880 "isChild", user_manager::UserManager::Get()->IsLoggedInAsChildUser());
881
882 if (user_manager::UserManager::Get()->IsLoggedInAsChildUser()) {
883 SupervisedUserService* supervised_user_service =
884 SupervisedUserServiceFactory::GetForProfile(profile);
885 std::string custodian = supervised_user_service->GetCustodianName();
886 std::string second_custodian =
887 supervised_user_service->GetSecondCustodianName();
888
889 base::string16 child_managed_tooltip;
890 if (second_custodian.empty()) {
891 child_managed_tooltip = l10n_util::GetStringFUTF16(
892 IDS_SETTINGS_ACCOUNT_MANAGER_CHILD_MANAGED_BY_ONE_PARENT_TOOLTIP,
893 base::UTF8ToUTF16(custodian));
894 } else {
895 child_managed_tooltip = l10n_util::GetStringFUTF16(
896 IDS_SETTINGS_ACCOUNT_MANAGER_CHILD_MANAGED_BY_TWO_PARENTS_TOOLTIP,
897 base::UTF8ToUTF16(custodian), base::UTF8ToUTF16(second_custodian));
898 }
899 html_source->AddString("accountManagerPrimaryAccountChildManagedTooltip",
900 child_managed_tooltip);
901 }
902 }
903
AddBluetoothStrings(content::WebUIDataSource * html_source)904 void AddBluetoothStrings(content::WebUIDataSource* html_source) {
905 static constexpr webui::LocalizedString kLocalizedStrings[] = {
906 {"bluetoothConnected", IDS_SETTINGS_BLUETOOTH_CONNECTED},
907 {"bluetoothConnectedWithBattery",
908 IDS_SETTINGS_BLUETOOTH_CONNECTED_WITH_BATTERY},
909 {"bluetoothConnecting", IDS_SETTINGS_BLUETOOTH_CONNECTING},
910 {"bluetoothDeviceListPaired", IDS_SETTINGS_BLUETOOTH_DEVICE_LIST_PAIRED},
911 {"bluetoothDeviceListUnpaired",
912 IDS_SETTINGS_BLUETOOTH_DEVICE_LIST_UNPAIRED},
913 {"bluetoothConnect", IDS_SETTINGS_BLUETOOTH_CONNECT},
914 {"bluetoothDisconnect", IDS_SETTINGS_BLUETOOTH_DISCONNECT},
915 {"bluetoothToggleA11yLabel",
916 IDS_SETTINGS_BLUETOOTH_TOGGLE_ACCESSIBILITY_LABEL},
917 {"bluetoothExpandA11yLabel",
918 IDS_SETTINGS_BLUETOOTH_EXPAND_ACCESSIBILITY_LABEL},
919 {"bluetoothNoDevices", IDS_SETTINGS_BLUETOOTH_NO_DEVICES},
920 {"bluetoothNoDevicesFound", IDS_SETTINGS_BLUETOOTH_NO_DEVICES_FOUND},
921 {"bluetoothNotConnected", IDS_SETTINGS_BLUETOOTH_NOT_CONNECTED},
922 {"bluetoothPageTitle", IDS_SETTINGS_BLUETOOTH},
923 {"bluetoothPairDevicePageTitle",
924 IDS_SETTINGS_BLUETOOTH_PAIR_DEVICE_TITLE},
925 {"bluetoothRemove", IDS_SETTINGS_BLUETOOTH_REMOVE},
926 {"bluetoothPrimaryUserControlled",
927 IDS_SETTINGS_BLUETOOTH_PRIMARY_USER_CONTROLLED},
928 {"bluetoothDeviceType_computer",
929 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_COMPUTER},
930 {"bluetoothDeviceType_phone",
931 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_PHONE},
932 {"bluetoothDeviceType_modem",
933 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_MODEM},
934 {"bluetoothDeviceType_audio",
935 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_AUDIO},
936 {"bluetoothDeviceType_carAudio",
937 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_CAR_AUDIO},
938 {"bluetoothDeviceType_video",
939 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_VIDEO},
940 {"bluetoothDeviceType_peripheral",
941 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_PERIPHERAL},
942 {"bluetoothDeviceType_joystick",
943 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_JOYSTICK},
944 {"bluetoothDeviceType_gamepad",
945 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_GAMEPAD},
946 {"bluetoothDeviceType_keyboard",
947 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_KEYBOARD},
948 {"bluetoothDeviceType_mouse",
949 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_MOUSE},
950 {"bluetoothDeviceType_tablet",
951 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_TABLET},
952 {"bluetoothDeviceType_keyboardMouseCombo",
953 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_KEYBOARD_MOUSE_COMBO},
954 {"bluetoothDeviceType_unknown",
955 IDS_BLUETOOTH_ACCESSIBILITY_DEVICE_TYPE_UNKNOWN},
956 };
957 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
958 chromeos::bluetooth_dialog::AddLocalizedStrings(html_source);
959 }
960
AddChromeOSUserStrings(content::WebUIDataSource * html_source,Profile * profile)961 void AddChromeOSUserStrings(content::WebUIDataSource* html_source,
962 Profile* profile) {
963 user_manager::UserManager* user_manager = user_manager::UserManager::Get();
964
965 const user_manager::User* user =
966 chromeos::ProfileHelper::Get()->GetUserByProfile(profile);
967 const user_manager::User* primary_user = user_manager->GetPrimaryUser();
968 std::string primary_user_email = primary_user->GetAccountId().GetUserEmail();
969 html_source->AddString("primaryUserEmail", primary_user_email);
970 html_source->AddString("browserSettingsBannerText",
971 l10n_util::GetStringFUTF16(
972 IDS_SETTINGS_BROWSER_SETTINGS_BANNER,
973 base::ASCIIToUTF16(chrome::kChromeUISettingsURL)));
974 html_source->AddBoolean("isActiveDirectoryUser",
975 user && user->IsActiveDirectoryUser());
976 html_source->AddBoolean(
977 "isSecondaryUser",
978 user && user->GetAccountId() != primary_user->GetAccountId());
979 html_source->AddString(
980 "secondaryUserBannerText",
981 l10n_util::GetStringFUTF16(IDS_SETTINGS_SECONDARY_USER_BANNER,
982 base::ASCIIToUTF16(primary_user_email)));
983
984 if (!IsDeviceManaged() && !user_manager->IsCurrentUserOwner()) {
985 html_source->AddString("ownerEmail",
986 user_manager->GetOwnerAccountId().GetUserEmail());
987 }
988 }
989
AddDevicePointersStrings(content::WebUIDataSource * html_source)990 void AddDevicePointersStrings(content::WebUIDataSource* html_source) {
991 static constexpr webui::LocalizedString kPointersStrings[] = {
992 {"mouseTitle", IDS_SETTINGS_MOUSE_TITLE},
993 {"touchpadTitle", IDS_SETTINGS_TOUCHPAD_TITLE},
994 {"mouseAndTouchpadTitle", IDS_SETTINGS_MOUSE_AND_TOUCHPAD_TITLE},
995 {"touchpadTapToClickEnabledLabel",
996 IDS_SETTINGS_TOUCHPAD_TAP_TO_CLICK_ENABLED_LABEL},
997 {"touchpadSpeed", IDS_SETTINGS_TOUCHPAD_SPEED_LABEL},
998 {"pointerSlow", IDS_SETTINGS_POINTER_SPEED_SLOW_LABEL},
999 {"pointerFast", IDS_SETTINGS_POINTER_SPEED_FAST_LABEL},
1000 {"mouseScrollSpeed", IDS_SETTINGS_MOUSE_SCROLL_SPEED_LABEL},
1001 {"mouseSpeed", IDS_SETTINGS_MOUSE_SPEED_LABEL},
1002 {"mouseSwapButtons", IDS_SETTINGS_MOUSE_SWAP_BUTTONS_LABEL},
1003 {"mouseReverseScroll", IDS_SETTINGS_MOUSE_REVERSE_SCROLL_LABEL},
1004 {"mouseAccelerationLabel", IDS_SETTINGS_MOUSE_ACCELERATION_LABEL},
1005 {"mouseScrollAccelerationLabel",
1006 IDS_SETTINGS_MOUSE_SCROLL_ACCELERATION_LABEL},
1007 {"touchpadAccelerationLabel", IDS_SETTINGS_TOUCHPAD_ACCELERATION_LABEL},
1008 {"touchpadScrollAccelerationLabel",
1009 IDS_SETTINGS_TOUCHPAD_SCROLL_ACCELERATION_LABEL},
1010 {"touchpadScrollSpeed", IDS_SETTINGS_TOUCHPAD_SCROLL_SPEED_LABEL},
1011 };
1012 AddLocalizedStringsBulk(html_source, kPointersStrings);
1013
1014 html_source->AddString("naturalScrollLearnMoreLink",
1015 GetHelpUrlWithBoard(chrome::kNaturalScrollHelpURL));
1016
1017 html_source->AddBoolean(
1018 "allowDisableMouseAcceleration",
1019 base::FeatureList::IsEnabled(::features::kAllowDisableMouseAcceleration));
1020 html_source->AddBoolean(
1021 "allowScrollSettings",
1022 base::FeatureList::IsEnabled(features::kAllowScrollSettings));
1023 }
1024
AddDeviceKeyboardStrings(content::WebUIDataSource * html_source)1025 void AddDeviceKeyboardStrings(content::WebUIDataSource* html_source) {
1026 static constexpr webui::LocalizedString keyboard_strings[] = {
1027 {"keyboardTitle", IDS_SETTINGS_KEYBOARD_TITLE},
1028 {"keyboardKeyCtrl", IDS_SETTINGS_KEYBOARD_KEY_LEFT_CTRL},
1029 {"keyboardKeyAlt", IDS_SETTINGS_KEYBOARD_KEY_LEFT_ALT},
1030 {"keyboardKeyCapsLock", IDS_SETTINGS_KEYBOARD_KEY_CAPS_LOCK},
1031 {"keyboardKeyCommand", IDS_SETTINGS_KEYBOARD_KEY_COMMAND},
1032 {"keyboardKeyDiamond", IDS_SETTINGS_KEYBOARD_KEY_DIAMOND},
1033 {"keyboardKeyEscape", IDS_SETTINGS_KEYBOARD_KEY_ESCAPE},
1034 {"keyboardKeyBackspace", IDS_SETTINGS_KEYBOARD_KEY_BACKSPACE},
1035 {"keyboardKeyAssistant", IDS_SETTINGS_KEYBOARD_KEY_ASSISTANT},
1036 {"keyboardKeyDisabled", IDS_SETTINGS_KEYBOARD_KEY_DISABLED},
1037 {"keyboardKeyExternalCommand",
1038 IDS_SETTINGS_KEYBOARD_KEY_EXTERNAL_COMMAND},
1039 {"keyboardKeyExternalMeta", IDS_SETTINGS_KEYBOARD_KEY_EXTERNAL_META},
1040 {"keyboardKeyMeta", IDS_SETTINGS_KEYBOARD_KEY_META},
1041 {"keyboardSendFunctionKeys", IDS_SETTINGS_KEYBOARD_SEND_FUNCTION_KEYS},
1042 {"keyboardEnableAutoRepeat", IDS_SETTINGS_KEYBOARD_AUTO_REPEAT_ENABLE},
1043 {"keyRepeatDelay", IDS_SETTINGS_KEYBOARD_AUTO_REPEAT_DELAY},
1044 {"keyRepeatDelayLong", IDS_SETTINGS_KEYBOARD_AUTO_REPEAT_DELAY_LONG},
1045 {"keyRepeatDelayShort", IDS_SETTINGS_KEYBOARD_AUTO_REPEAT_DELAY_SHORT},
1046 {"keyRepeatRate", IDS_SETTINGS_KEYBOARD_AUTO_REPEAT_RATE},
1047 {"keyRepeatRateSlow", IDS_SETTINGS_KEYBOARD_AUTO_REPEAT_RATE_SLOW},
1048 {"keyRepeatRateFast", IDS_SETTINGS_KEYBOARD_AUTO_REPEAT_FAST},
1049 {"showKeyboardShortcutViewer",
1050 IDS_SETTINGS_KEYBOARD_SHOW_SHORTCUT_VIEWER},
1051 {"keyboardShowLanguageAndInput",
1052 IDS_SETTINGS_KEYBOARD_SHOW_LANGUAGE_AND_INPUT},
1053 };
1054 AddLocalizedStringsBulk(html_source, keyboard_strings);
1055
1056 html_source->AddLocalizedString("keyboardKeySearch",
1057 ui::DeviceUsesKeyboardLayout2()
1058 ? IDS_SETTINGS_KEYBOARD_KEY_LAUNCHER
1059 : IDS_SETTINGS_KEYBOARD_KEY_SEARCH);
1060 html_source->AddLocalizedString(
1061 "keyboardSendFunctionKeysDescription",
1062 ui::DeviceUsesKeyboardLayout2()
1063 ? IDS_SETTINGS_KEYBOARD_SEND_FUNCTION_KEYS_LAYOUT2_DESCRIPTION
1064 : IDS_SETTINGS_KEYBOARD_SEND_FUNCTION_KEYS_DESCRIPTION);
1065 }
1066
AddDeviceStylusStrings(content::WebUIDataSource * html_source)1067 void AddDeviceStylusStrings(content::WebUIDataSource* html_source) {
1068 static constexpr webui::LocalizedString kStylusStrings[] = {
1069 {"stylusTitle", IDS_SETTINGS_STYLUS_TITLE},
1070 {"stylusEnableStylusTools", IDS_SETTINGS_STYLUS_ENABLE_STYLUS_TOOLS},
1071 {"stylusAutoOpenStylusTools", IDS_SETTINGS_STYLUS_AUTO_OPEN_STYLUS_TOOLS},
1072 {"stylusFindMoreAppsPrimary", IDS_SETTINGS_STYLUS_FIND_MORE_APPS_PRIMARY},
1073 {"stylusFindMoreAppsSecondary",
1074 IDS_SETTINGS_STYLUS_FIND_MORE_APPS_SECONDARY},
1075 {"stylusNoteTakingApp", IDS_SETTINGS_STYLUS_NOTE_TAKING_APP_LABEL},
1076 {"stylusNoteTakingAppEnabledOnLockScreen",
1077 IDS_SETTINGS_STYLUS_NOTE_TAKING_APP_LOCK_SCREEN_CHECKBOX},
1078 {"stylusNoteTakingAppKeepsLastNoteOnLockScreen",
1079 IDS_SETTINGS_STYLUS_NOTE_TAKING_APP_KEEP_LATEST_NOTE},
1080 {"stylusNoteTakingAppLockScreenSettingsHeader",
1081 IDS_SETTINGS_STYLUS_LOCK_SCREEN_NOTES_TITLE},
1082 {"stylusNoteTakingAppNoneAvailable",
1083 IDS_SETTINGS_STYLUS_NOTE_TAKING_APP_NONE_AVAILABLE},
1084 {"stylusNoteTakingAppWaitingForAndroid",
1085 IDS_SETTINGS_STYLUS_NOTE_TAKING_APP_WAITING_FOR_ANDROID}};
1086 AddLocalizedStringsBulk(html_source, kStylusStrings);
1087 }
1088
AddDeviceDisplayStrings(content::WebUIDataSource * html_source)1089 void AddDeviceDisplayStrings(content::WebUIDataSource* html_source) {
1090 static constexpr webui::LocalizedString kDisplayStrings[] = {
1091 {"displayTitle", IDS_SETTINGS_DISPLAY_TITLE},
1092 {"displayArrangementText", IDS_SETTINGS_DISPLAY_ARRANGEMENT_TEXT},
1093 {"displayArrangementTitle", IDS_SETTINGS_DISPLAY_ARRANGEMENT_TITLE},
1094 {"displayMirror", IDS_SETTINGS_DISPLAY_MIRROR},
1095 {"displayMirrorDisplayName", IDS_SETTINGS_DISPLAY_MIRROR_DISPLAY_NAME},
1096 {"displayAmbientColorTitle", IDS_SETTINGS_DISPLAY_AMBIENT_COLOR_TITLE},
1097 {"displayAmbientColorSubtitle",
1098 IDS_SETTINGS_DISPLAY_AMBIENT_COLOR_SUBTITLE},
1099 {"displayNightLightLabel", IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_LABEL},
1100 {"displayNightLightOnAtSunset",
1101 IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_ON_AT_SUNSET},
1102 {"displayNightLightOffAtSunrise",
1103 IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_OFF_AT_SUNRISE},
1104 {"displayNightLightScheduleCustom",
1105 IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_SCHEDULE_CUSTOM},
1106 {"displayNightLightScheduleLabel",
1107 IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_SCHEDULE_LABEL},
1108 {"displayNightLightScheduleNever",
1109 IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_SCHEDULE_NEVER},
1110 {"displayNightLightScheduleSunsetToSunRise",
1111 IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_SCHEDULE_SUNSET_TO_SUNRISE},
1112 {"displayNightLightStartTime",
1113 IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_START_TIME},
1114 {"displayNightLightStopTime", IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_STOP_TIME},
1115 {"displayNightLightText", IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_TEXT},
1116 {"displayNightLightTemperatureLabel",
1117 IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_TEMPERATURE_LABEL},
1118 {"displayNightLightTempSliderMaxLabel",
1119 IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_TEMP_SLIDER_MAX_LABEL},
1120 {"displayNightLightTempSliderMinLabel",
1121 IDS_SETTINGS_DISPLAY_NIGHT_LIGHT_TEMP_SLIDER_MIN_LABEL},
1122 {"displayUnifiedDesktop", IDS_SETTINGS_DISPLAY_UNIFIED_DESKTOP},
1123 {"displayUnifiedDesktopOn", IDS_SETTINGS_DISPLAY_UNIFIED_DESKTOP_ON},
1124 {"displayUnifiedDesktopOff", IDS_SETTINGS_DISPLAY_UNIFIED_DESKTOP_OFF},
1125 {"displayResolutionTitle", IDS_SETTINGS_DISPLAY_RESOLUTION_TITLE},
1126 {"displayResolutionText", IDS_SETTINGS_DISPLAY_RESOLUTION_TEXT},
1127 {"displayResolutionTextBest", IDS_SETTINGS_DISPLAY_RESOLUTION_TEXT_BEST},
1128 {"displayResolutionTextNative",
1129 IDS_SETTINGS_DISPLAY_RESOLUTION_TEXT_NATIVE},
1130 {"displayResolutionSublabel", IDS_SETTINGS_DISPLAY_RESOLUTION_SUBLABEL},
1131 {"displayResolutionMenuItem", IDS_SETTINGS_DISPLAY_RESOLUTION_MENU_ITEM},
1132 {"displayResolutionInterlacedMenuItem",
1133 IDS_SETTINGS_DISPLAY_RESOLUTION_INTERLACED_MENU_ITEM},
1134 {"displayZoomTitle", IDS_SETTINGS_DISPLAY_ZOOM_TITLE},
1135 {"displayZoomSublabel", IDS_SETTINGS_DISPLAY_ZOOM_SUBLABEL},
1136 {"displayZoomValue", IDS_SETTINGS_DISPLAY_ZOOM_VALUE},
1137 {"displayZoomLogicalResolutionText",
1138 IDS_SETTINGS_DISPLAY_ZOOM_LOGICAL_RESOLUTION_TEXT},
1139 {"displayZoomNativeLogicalResolutionNativeText",
1140 IDS_SETTINGS_DISPLAY_ZOOM_LOGICAL_RESOLUTION_NATIVE_TEXT},
1141 {"displayZoomLogicalResolutionDefaultText",
1142 IDS_SETTINGS_DISPLAY_ZOOM_LOGICAL_RESOLUTION_DEFAULT_TEXT},
1143 {"displaySizeSliderMinLabel", IDS_SETTINGS_DISPLAY_ZOOM_SLIDER_MINIMUM},
1144 {"displaySizeSliderMaxLabel", IDS_SETTINGS_DISPLAY_ZOOM_SLIDER_MAXIMUM},
1145 {"displayScreenTitle", IDS_SETTINGS_DISPLAY_SCREEN},
1146 {"displayScreenExtended", IDS_SETTINGS_DISPLAY_SCREEN_EXTENDED},
1147 {"displayScreenPrimary", IDS_SETTINGS_DISPLAY_SCREEN_PRIMARY},
1148 {"displayOrientation", IDS_SETTINGS_DISPLAY_ORIENTATION},
1149 {"displayOrientationStandard", IDS_SETTINGS_DISPLAY_ORIENTATION_STANDARD},
1150 {"displayOrientationAutoRotate",
1151 IDS_SETTINGS_DISPLAY_ORIENTATION_AUTO_ROTATE},
1152 {"displayOverscanPageText", IDS_SETTINGS_DISPLAY_OVERSCAN_TEXT},
1153 {"displayOverscanPageTitle", IDS_SETTINGS_DISPLAY_OVERSCAN_TITLE},
1154 {"displayOverscanSubtitle", IDS_SETTINGS_DISPLAY_OVERSCAN_SUBTITLE},
1155 {"displayOverscanInstructions",
1156 IDS_SETTINGS_DISPLAY_OVERSCAN_INSTRUCTIONS},
1157 {"displayOverscanResize", IDS_SETTINGS_DISPLAY_OVERSCAN_RESIZE},
1158 {"displayOverscanPosition", IDS_SETTINGS_DISPLAY_OVERSCAN_POSITION},
1159 {"displayOverscanReset", IDS_SETTINGS_DISPLAY_OVERSCAN_RESET},
1160 {"displayTouchCalibrationTitle",
1161 IDS_SETTINGS_DISPLAY_TOUCH_CALIBRATION_TITLE},
1162 {"displayTouchCalibrationText",
1163 IDS_SETTINGS_DISPLAY_TOUCH_CALIBRATION_TEXT}};
1164 AddLocalizedStringsBulk(html_source, kDisplayStrings);
1165
1166 base::CommandLine& cmd = *base::CommandLine::ForCurrentProcess();
1167 html_source->AddBoolean("unifiedDesktopAvailable",
1168 cmd.HasSwitch(::switches::kEnableUnifiedDesktop));
1169
1170 html_source->AddBoolean("listAllDisplayModes",
1171 display::features::IsListAllDisplayModesEnabled());
1172
1173 html_source->AddBoolean("deviceSupportsAmbientColor",
1174 ash::features::IsAllowAmbientEQEnabled());
1175
1176 html_source->AddBoolean(
1177 "enableTouchCalibrationSetting",
1178 cmd.HasSwitch(chromeos::switches::kEnableTouchCalibrationSetting));
1179
1180 html_source->AddBoolean("hasExternalTouchDevice",
1181 display::HasExternalTouchscreenDevice());
1182 }
1183
AddDeviceStorageStrings(content::WebUIDataSource * html_source)1184 void AddDeviceStorageStrings(content::WebUIDataSource* html_source) {
1185 static constexpr webui::LocalizedString kStorageStrings[] = {
1186 {"storageTitle", IDS_SETTINGS_STORAGE_TITLE},
1187 {"storageItemInUse", IDS_SETTINGS_STORAGE_ITEM_IN_USE},
1188 {"storageItemAvailable", IDS_SETTINGS_STORAGE_ITEM_AVAILABLE},
1189 {"storageItemSystem", IDS_SETTINGS_STORAGE_ITEM_SYSTEM},
1190 {"storageItemMyFiles", IDS_SETTINGS_STORAGE_ITEM_MY_FILES},
1191 {"storageItemBrowsingData", IDS_SETTINGS_STORAGE_ITEM_BROWSING_DATA},
1192 {"storageItemApps", IDS_SETTINGS_STORAGE_ITEM_APPS},
1193 {"storageItemCrostini", IDS_SETTINGS_STORAGE_ITEM_CROSTINI},
1194 {"storageItemOtherUsers", IDS_SETTINGS_STORAGE_ITEM_OTHER_USERS},
1195 {"storageSizeComputing", IDS_SETTINGS_STORAGE_SIZE_CALCULATING},
1196 {"storageSizeUnknown", IDS_SETTINGS_STORAGE_SIZE_UNKNOWN},
1197 {"storageSpaceLowMessageTitle",
1198 IDS_SETTINGS_STORAGE_SPACE_LOW_MESSAGE_TITLE},
1199 {"storageSpaceLowMessageLine1",
1200 IDS_SETTINGS_STORAGE_SPACE_LOW_MESSAGE_LINE_1},
1201 {"storageSpaceLowMessageLine2",
1202 IDS_SETTINGS_STORAGE_SPACE_LOW_MESSAGE_LINE_2},
1203 {"storageSpaceCriticallyLowMessageTitle",
1204 IDS_SETTINGS_STORAGE_SPACE_CRITICALLY_LOW_MESSAGE_TITLE},
1205 {"storageSpaceCriticallyLowMessageLine1",
1206 IDS_SETTINGS_STORAGE_SPACE_CRITICALLY_LOW_MESSAGE_LINE_1},
1207 {"storageSpaceCriticallyLowMessageLine2",
1208 IDS_SETTINGS_STORAGE_SPACE_CRITICALLY_LOW_MESSAGE_LINE_2},
1209 {"storageExternal", IDS_SETTINGS_STORAGE_EXTERNAL},
1210 {"storageExternalStorageEmptyListHeader",
1211 IDS_SETTINGS_STORAGE_EXTERNAL_STORAGE_EMPTY_LIST_HEADER},
1212 {"storageExternalStorageListHeader",
1213 IDS_SETTINGS_STORAGE_EXTERNAL_STORAGE_LIST_HEADER},
1214 {"storageOverviewAriaLabel", IDS_SETTINGS_STORAGE_OVERVIEW_ARIA_LABEL}};
1215 AddLocalizedStringsBulk(html_source, kStorageStrings);
1216
1217 html_source->AddString(
1218 "storageAndroidAppsExternalDrivesNote",
1219 l10n_util::GetStringFUTF16(
1220 IDS_SETTINGS_STORAGE_ANDROID_APPS_ACCESS_EXTERNAL_DRIVES_NOTE,
1221 base::ASCIIToUTF16(chrome::kArcExternalStorageLearnMoreURL)));
1222 }
1223
AddDevicePowerStrings(content::WebUIDataSource * html_source)1224 void AddDevicePowerStrings(content::WebUIDataSource* html_source) {
1225 static constexpr webui::LocalizedString kPowerStrings[] = {
1226 {"powerTitle", IDS_SETTINGS_POWER_TITLE},
1227 {"powerSourceLabel", IDS_SETTINGS_POWER_SOURCE_LABEL},
1228 {"powerSourceBattery", IDS_SETTINGS_POWER_SOURCE_BATTERY},
1229 {"powerSourceAcAdapter", IDS_SETTINGS_POWER_SOURCE_AC_ADAPTER},
1230 {"powerSourceLowPowerCharger",
1231 IDS_SETTINGS_POWER_SOURCE_LOW_POWER_CHARGER},
1232 {"calculatingPower", IDS_SETTINGS_POWER_SOURCE_CALCULATING},
1233 {"powerIdleLabel", IDS_SETTINGS_POWER_IDLE_LABEL},
1234 {"powerIdleWhileChargingLabel",
1235 IDS_SETTINGS_POWER_IDLE_WHILE_CHARGING_LABEL},
1236 {"powerIdleWhileChargingAriaLabel",
1237 IDS_SETTINGS_POWER_IDLE_WHILE_CHARGING_ARIA_LABEL},
1238 {"powerIdleWhileOnBatteryLabel",
1239 IDS_SETTINGS_POWER_IDLE_WHILE_ON_BATTERY_LABEL},
1240 {"powerIdleWhileOnBatteryAriaLabel",
1241 IDS_SETTINGS_POWER_IDLE_WHILE_ON_BATTERY_ARIA_LABEL},
1242 {"powerIdleDisplayOffSleep", IDS_SETTINGS_POWER_IDLE_DISPLAY_OFF_SLEEP},
1243 {"powerIdleDisplayOff", IDS_SETTINGS_POWER_IDLE_DISPLAY_OFF},
1244 {"powerIdleDisplayOn", IDS_SETTINGS_POWER_IDLE_DISPLAY_ON},
1245 {"powerIdleOther", IDS_SETTINGS_POWER_IDLE_OTHER},
1246 {"powerLidSleepLabel", IDS_SETTINGS_POWER_LID_CLOSED_SLEEP_LABEL},
1247 {"powerLidSignOutLabel", IDS_SETTINGS_POWER_LID_CLOSED_SIGN_OUT_LABEL},
1248 {"powerLidShutDownLabel", IDS_SETTINGS_POWER_LID_CLOSED_SHUT_DOWN_LABEL},
1249 };
1250 AddLocalizedStringsBulk(html_source, kPowerStrings);
1251 }
1252
AddDeviceStrings(content::WebUIDataSource * html_source)1253 void AddDeviceStrings(content::WebUIDataSource* html_source) {
1254 static constexpr webui::LocalizedString kDeviceStrings[] = {
1255 {"devicePageTitle", IDS_SETTINGS_DEVICE_TITLE},
1256 {"scrollLabel", IDS_SETTINGS_SCROLL_LABEL},
1257 {"touchPadScrollLabel", IDS_OS_SETTINGS_TOUCHPAD_REVERSE_SCROLL_LABEL},
1258 };
1259 AddLocalizedStringsBulk(html_source, kDeviceStrings);
1260
1261 AddDevicePointersStrings(html_source);
1262 AddDeviceKeyboardStrings(html_source);
1263 AddDeviceStylusStrings(html_source);
1264 AddDeviceDisplayStrings(html_source);
1265 AddDeviceStorageStrings(html_source);
1266 AddDevicePowerStrings(html_source);
1267 }
1268
AddFilesStrings(content::WebUIDataSource * html_source)1269 void AddFilesStrings(content::WebUIDataSource* html_source) {
1270 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1271 {"disconnectGoogleDriveAccount", IDS_SETTINGS_DISCONNECT_GOOGLE_DRIVE},
1272 {"filesPageTitle", IDS_OS_SETTINGS_FILES},
1273 {"smbSharesTitle", IDS_SETTINGS_DOWNLOADS_SMB_SHARES},
1274 {"smbSharesLearnMoreLabel",
1275 IDS_SETTINGS_DOWNLOADS_SMB_SHARES_LEARN_MORE_LABEL},
1276 {"addSmbShare", IDS_SETTINGS_DOWNLOADS_SMB_SHARES_ADD_SHARE},
1277 {"smbShareAddedSuccessfulMessage",
1278 IDS_SETTINGS_DOWNLOADS_SHARE_ADDED_SUCCESS_MESSAGE},
1279 {"smbShareAddedErrorMessage",
1280 IDS_SETTINGS_DOWNLOADS_SHARE_ADDED_ERROR_MESSAGE},
1281 {"smbShareAddedAuthFailedMessage",
1282 IDS_SETTINGS_DOWNLOADS_SHARE_ADDED_AUTH_FAILED_MESSAGE},
1283 {"smbShareAddedNotFoundMessage",
1284 IDS_SETTINGS_DOWNLOADS_SHARE_ADDED_NOT_FOUND_MESSAGE},
1285 {"smbShareAddedUnsupportedDeviceMessage",
1286 IDS_SETTINGS_DOWNLOADS_SHARE_ADDED_UNSUPPORTED_DEVICE_MESSAGE},
1287 {"smbShareAddedMountExistsMessage",
1288 IDS_SETTINGS_DOWNLOADS_SHARE_ADDED_MOUNT_EXISTS_MESSAGE},
1289 {"smbShareAddedTooManyMountsMessage",
1290 IDS_SETTINGS_DOWNLOADS_SHARE_ADDED_TOO_MANY_MOUNTS_MESSAGE},
1291 {"smbShareAddedInvalidURLMessage",
1292 IDS_SETTINGS_DOWNLOADS_SHARE_ADDED_MOUNT_INVALID_URL_MESSAGE},
1293 {"smbShareAddedInvalidSSOURLMessage",
1294 IDS_SETTINGS_DOWNLOADS_SHARE_ADDED_MOUNT_INVALID_SSO_URL_MESSAGE},
1295 };
1296 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1297
1298 chromeos::smb_dialog::AddLocalizedStrings(html_source);
1299
1300 html_source->AddString("smbSharesLearnMoreURL",
1301 GetHelpUrlWithBoard(chrome::kSmbSharesLearnMoreURL));
1302 }
1303
AddEasyUnlockStrings(content::WebUIDataSource * html_source)1304 void AddEasyUnlockStrings(content::WebUIDataSource* html_source) {
1305 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1306 {"easyUnlockSectionTitle", IDS_SETTINGS_EASY_UNLOCK_SECTION_TITLE},
1307 {"easyUnlockUnlockDeviceOnly",
1308 IDS_SETTINGS_EASY_UNLOCK_UNLOCK_DEVICE_ONLY},
1309 {"easyUnlockUnlockDeviceAndAllowSignin",
1310 IDS_SETTINGS_EASY_UNLOCK_UNLOCK_DEVICE_AND_ALLOW_SIGNIN},
1311 };
1312 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1313 }
1314
AddMultideviceStrings(content::WebUIDataSource * html_source)1315 void AddMultideviceStrings(content::WebUIDataSource* html_source) {
1316 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1317 {"multidevicePageTitle", IDS_SETTINGS_MULTIDEVICE},
1318 {"multideviceSetupButton", IDS_SETTINGS_MULTIDEVICE_SETUP_BUTTON},
1319 {"multideviceVerifyButton", IDS_SETTINGS_MULTIDEVICE_VERIFY_BUTTON},
1320 {"multideviceSetupItemHeading",
1321 IDS_SETTINGS_MULTIDEVICE_SETUP_ITEM_HEADING},
1322 {"multideviceEnabled", IDS_SETTINGS_MULTIDEVICE_ENABLED},
1323 {"multideviceDisabled", IDS_SETTINGS_MULTIDEVICE_DISABLED},
1324 {"multideviceSmartLockItemTitle", IDS_SETTINGS_EASY_UNLOCK_SECTION_TITLE},
1325 {"multideviceInstantTetheringItemTitle",
1326 IDS_SETTINGS_MULTIDEVICE_INSTANT_TETHERING},
1327 {"multideviceInstantTetheringItemSummary",
1328 IDS_SETTINGS_MULTIDEVICE_INSTANT_TETHERING_SUMMARY},
1329 {"multideviceAndroidMessagesItemTitle",
1330 IDS_SETTINGS_MULTIDEVICE_ANDROID_MESSAGES},
1331 {"multideviceForgetDevice", IDS_SETTINGS_MULTIDEVICE_FORGET_THIS_DEVICE},
1332 {"multideviceSmartLockOptions",
1333 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_OPTIONS_LOCK},
1334 {"multideviceForgetDeviceDisconnect",
1335 IDS_SETTINGS_MULTIDEVICE_FORGET_THIS_DEVICE_DISCONNECT},
1336 };
1337 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1338
1339 html_source->AddString(
1340 "multideviceForgetDeviceSummary",
1341 ui::SubstituteChromeOSDeviceType(
1342 IDS_SETTINGS_MULTIDEVICE_FORGET_THIS_DEVICE_EXPLANATION));
1343 html_source->AddString(
1344 "multideviceForgetDeviceDialogMessage",
1345 ui::SubstituteChromeOSDeviceType(
1346 IDS_SETTINGS_MULTIDEVICE_FORGET_DEVICE_DIALOG_MESSAGE));
1347 html_source->AddString(
1348 "multideviceVerificationText",
1349 l10n_util::GetStringFUTF16(
1350 IDS_SETTINGS_MULTIDEVICE_VERIFICATION_TEXT,
1351 base::UTF8ToUTF16(
1352 chromeos::multidevice_setup::
1353 GetBoardSpecificBetterTogetherSuiteLearnMoreUrl()
1354 .spec())));
1355 html_source->AddString(
1356 "multideviceSetupSummary",
1357 l10n_util::GetStringFUTF16(
1358 IDS_SETTINGS_MULTIDEVICE_SETUP_SUMMARY, ui::GetChromeOSDeviceName(),
1359 base::UTF8ToUTF16(
1360 chromeos::multidevice_setup::
1361 GetBoardSpecificBetterTogetherSuiteLearnMoreUrl()
1362 .spec())));
1363 html_source->AddString(
1364 "multideviceNoHostText",
1365 l10n_util::GetStringFUTF16(
1366 IDS_SETTINGS_MULTIDEVICE_NO_ELIGIBLE_HOSTS,
1367 base::UTF8ToUTF16(
1368 chromeos::multidevice_setup::
1369 GetBoardSpecificBetterTogetherSuiteLearnMoreUrl()
1370 .spec())));
1371 html_source->AddString(
1372 "multideviceAndroidMessagesItemSummary",
1373 l10n_util::GetStringFUTF16(
1374 IDS_SETTINGS_MULTIDEVICE_ANDROID_MESSAGES_SUMMARY,
1375 ui::GetChromeOSDeviceName(),
1376 base::UTF8ToUTF16(chromeos::multidevice_setup::
1377 GetBoardSpecificMessagesLearnMoreUrl()
1378 .spec())));
1379 html_source->AddString(
1380 "multideviceSmartLockItemSummary",
1381 l10n_util::GetStringFUTF16(
1382 IDS_SETTINGS_MULTIDEVICE_SMART_LOCK_SUMMARY,
1383 ui::GetChromeOSDeviceName(),
1384 GetHelpUrlWithBoard(chrome::kEasyUnlockLearnMoreUrl)));
1385
1386 AddEasyUnlockStrings(html_source);
1387 }
1388
AddKerberosAccountsPageStrings(content::WebUIDataSource * html_source)1389 void AddKerberosAccountsPageStrings(content::WebUIDataSource* html_source) {
1390 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1391 {"kerberosAccountsAddAccountLabel",
1392 IDS_SETTINGS_KERBEROS_ACCOUNTS_ADD_ACCOUNT_LABEL},
1393 {"kerberosAccountsRefreshNowLabel",
1394 IDS_SETTINGS_KERBEROS_ACCOUNTS_REFRESH_NOW_LABEL},
1395 {"kerberosAccountsSetAsActiveAccountLabel",
1396 IDS_SETTINGS_KERBEROS_ACCOUNTS_SET_AS_ACTIVE_ACCOUNT_LABEL},
1397 {"kerberosAccountsSignedOut", IDS_SETTINGS_KERBEROS_ACCOUNTS_SIGNED_OUT},
1398 {"kerberosAccountsListHeader",
1399 IDS_SETTINGS_KERBEROS_ACCOUNTS_LIST_HEADER},
1400 {"kerberosAccountsRemoveAccountLabel",
1401 IDS_SETTINGS_KERBEROS_ACCOUNTS_REMOVE_ACCOUNT_LABEL},
1402 {"kerberosAccountsReauthenticationLabel",
1403 IDS_SETTINGS_KERBEROS_ACCOUNTS_REAUTHENTICATION_LABEL},
1404 {"kerberosAccountsTicketActive",
1405 IDS_SETTINGS_KERBEROS_ACCOUNTS_TICKET_ACTIVE},
1406 {"kerberosAccountsAccountRemovedTip",
1407 IDS_SETTINGS_KERBEROS_ACCOUNTS_ACCOUNT_REMOVED_TIP},
1408 {"kerberosAccountsAccountRefreshedTip",
1409 IDS_SETTINGS_KERBEROS_ACCOUNTS_ACCOUNT_REFRESHED_TIP},
1410 {"kerberosAccountsSignedIn", IDS_SETTINGS_KERBEROS_ACCOUNTS_SIGNED_IN},
1411 };
1412 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1413
1414 PrefService* local_state = g_browser_process->local_state();
1415
1416 // Whether new Kerberos accounts may be added.
1417 html_source->AddBoolean(
1418 "kerberosAddAccountsAllowed",
1419 local_state->GetBoolean(prefs::kKerberosAddAccountsAllowed));
1420
1421 // Kerberos accounts page with "Learn more" link.
1422 html_source->AddString(
1423 "kerberosAccountsDescription",
1424 l10n_util::GetStringFUTF16(
1425 IDS_SETTINGS_KERBEROS_ACCOUNTS_DESCRIPTION,
1426 GetHelpUrlWithBoard(chrome::kKerberosAccountsLearnMoreURL)));
1427 }
1428
AddKerberosAddAccountDialogStrings(content::WebUIDataSource * html_source)1429 void AddKerberosAddAccountDialogStrings(content::WebUIDataSource* html_source) {
1430 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1431 {"kerberosAccountsAdvancedConfigLabel",
1432 IDS_SETTINGS_KERBEROS_ACCOUNTS_ADVANCED_CONFIG_LABEL},
1433 {"kerberosAdvancedConfigTitle",
1434 IDS_SETTINGS_KERBEROS_ADVANCED_CONFIG_TITLE},
1435 {"kerberosAdvancedConfigDesc",
1436 IDS_SETTINGS_KERBEROS_ADVANCED_CONFIG_DESC},
1437 {"addKerberosAccountRememberPassword",
1438 IDS_SETTINGS_ADD_KERBEROS_ACCOUNT_REMEMBER_PASSWORD},
1439 {"kerberosPassword", IDS_SETTINGS_KERBEROS_PASSWORD},
1440 {"kerberosUsername", IDS_SETTINGS_KERBEROS_USERNAME},
1441 {"addKerberosAccountDescription",
1442 IDS_SETTINGS_ADD_KERBEROS_ACCOUNT_DESCRIPTION},
1443 {"kerberosErrorNetworkProblem",
1444 IDS_SETTINGS_KERBEROS_ERROR_NETWORK_PROBLEM},
1445 {"kerberosErrorUsernameInvalid",
1446 IDS_SETTINGS_KERBEROS_ERROR_USERNAME_INVALID},
1447 {"kerberosErrorUsernameUnknown",
1448 IDS_SETTINGS_KERBEROS_ERROR_USERNAME_UNKNOWN},
1449 {"kerberosErrorDuplicatePrincipalName",
1450 IDS_SETTINGS_KERBEROS_ERROR_DUPLICATE_PRINCIPAL_NAME},
1451 {"kerberosErrorContactingServer",
1452 IDS_SETTINGS_KERBEROS_ERROR_CONTACTING_SERVER},
1453 {"kerberosErrorPasswordInvalid",
1454 IDS_SETTINGS_KERBEROS_ERROR_PASSWORD_INVALID},
1455 {"kerberosErrorPasswordExpired",
1456 IDS_SETTINGS_KERBEROS_ERROR_PASSWORD_EXPIRED},
1457 {"kerberosErrorKdcEncType", IDS_SETTINGS_KERBEROS_ERROR_KDC_ENC_TYPE},
1458 {"kerberosErrorGeneral", IDS_SETTINGS_KERBEROS_ERROR_GENERAL},
1459 {"kerberosConfigErrorSectionNestedInGroup",
1460 IDS_SETTINGS_KERBEROS_CONFIG_ERROR_SECTION_NESTED_IN_GROUP},
1461 {"kerberosConfigErrorSectionSyntax",
1462 IDS_SETTINGS_KERBEROS_CONFIG_ERROR_SECTION_SYNTAX},
1463 {"kerberosConfigErrorExpectedOpeningCurlyBrace",
1464 IDS_SETTINGS_KERBEROS_CONFIG_ERROR_EXPECTED_OPENING_CURLY_BRACE},
1465 {"kerberosConfigErrorExtraCurlyBrace",
1466 IDS_SETTINGS_KERBEROS_CONFIG_ERROR_EXTRA_CURLY_BRACE},
1467 {"kerberosConfigErrorRelationSyntax",
1468 IDS_SETTINGS_KERBEROS_CONFIG_ERROR_RELATION_SYNTAX_ERROR},
1469 {"kerberosConfigErrorKeyNotSupported",
1470 IDS_SETTINGS_KERBEROS_CONFIG_ERROR_KEY_NOT_SUPPORTED},
1471 {"kerberosConfigErrorSectionNotSupported",
1472 IDS_SETTINGS_KERBEROS_CONFIG_ERROR_SECTION_NOT_SUPPORTED},
1473 {"kerberosConfigErrorKrb5FailedToParse",
1474 IDS_SETTINGS_KERBEROS_CONFIG_ERROR_KRB5_FAILED_TO_PARSE},
1475 {"addKerberosAccountRefreshButtonLabel",
1476 IDS_SETTINGS_ADD_KERBEROS_ACCOUNT_REFRESH_BUTTON_LABEL},
1477 {"addKerberosAccount", IDS_SETTINGS_ADD_KERBEROS_ACCOUNT},
1478 {"refreshKerberosAccount", IDS_SETTINGS_REFRESH_KERBEROS_ACCOUNT},
1479 };
1480 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1481
1482 PrefService* local_state = g_browser_process->local_state();
1483
1484 // Whether the 'Remember password' checkbox is enabled.
1485 html_source->AddBoolean(
1486 "kerberosRememberPasswordEnabled",
1487 local_state->GetBoolean(prefs::kKerberosRememberPasswordEnabled));
1488
1489 // Kerberos default configuration.
1490 html_source->AddString(
1491 "defaultKerberosConfig",
1492 chromeos::KerberosCredentialsManager::GetDefaultKerberosConfig());
1493 }
1494
AddLockScreenPageStrings(content::WebUIDataSource * html_source)1495 void AddLockScreenPageStrings(content::WebUIDataSource* html_source) {
1496 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1497 {"lockScreenNotificationTitle",
1498 IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_TITLE},
1499 {"lockScreenNotificationHideSensitive",
1500 IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_HIDE_SENSITIVE},
1501 {"enableScreenlock", IDS_SETTINGS_PEOPLE_ENABLE_SCREENLOCK},
1502 {"lockScreenNotificationShow",
1503 IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_SHOW},
1504 {"lockScreenPinOrPassword",
1505 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_PIN_OR_PASSWORD},
1506 {"lockScreenSetupFingerprintButton",
1507 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_FINGERPRINT_SETUP_BUTTON},
1508 {"lockScreenNotificationHide",
1509 IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_HIDE},
1510 {"lockScreenEditFingerprints",
1511 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_EDIT_FINGERPRINTS},
1512 {"lockScreenPasswordOnly", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_PASSWORD_ONLY},
1513 {"lockScreenChangePinButton",
1514 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_CHANGE_PIN_BUTTON},
1515 {"lockScreenEditFingerprintsDescription",
1516 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_EDIT_FINGERPRINTS_DESCRIPTION},
1517 {"lockScreenNumberFingerprints",
1518 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_NUM_FINGERPRINTS},
1519 {"lockScreenNone", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_NONE},
1520 {"lockScreenFingerprintNewName",
1521 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_NEW_FINGERPRINT_DEFAULT_NAME},
1522 {"lockScreenDeleteFingerprintLabel",
1523 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_DELETE_FINGERPRINT_ARIA_LABEL},
1524 {"lockScreenOptionsLock", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_OPTIONS_LOCK},
1525 {"lockScreenOptionsLoginLock",
1526 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_OPTIONS_LOGIN_LOCK},
1527 {"lockScreenSetupPinButton",
1528 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_SETUP_PIN_BUTTON},
1529 {"lockScreenTitleLock", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_TITLE_LOCK},
1530 {"lockScreenTitleLoginLock",
1531 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_TITLE_LOGIN_LOCK},
1532 {"passwordPromptEnterPasswordLock",
1533 IDS_SETTINGS_PEOPLE_PASSWORD_PROMPT_ENTER_PASSWORD_LOCK},
1534 {"passwordPromptEnterPasswordLoginLock",
1535 IDS_SETTINGS_PEOPLE_PASSWORD_PROMPT_ENTER_PASSWORD_LOGIN_LOCK},
1536 };
1537 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1538 }
1539
AddUsersStrings(content::WebUIDataSource * html_source)1540 void AddUsersStrings(content::WebUIDataSource* html_source) {
1541 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1542 {"usersModifiedByOwnerLabel", IDS_SETTINGS_USERS_MODIFIED_BY_OWNER_LABEL},
1543 {"guestBrowsingLabel", IDS_SETTINGS_USERS_GUEST_BROWSING_LABEL},
1544 {"settingsManagedLabel", IDS_SETTINGS_USERS_MANAGED_LABEL},
1545 {"showOnSigninLabel", IDS_SETTINGS_USERS_SHOW_ON_SIGNIN_LABEL},
1546 {"restrictSigninLabel", IDS_SETTINGS_USERS_RESTRICT_SIGNIN_LABEL},
1547 {"deviceOwnerLabel", IDS_SETTINGS_USERS_DEVICE_OWNER_LABEL},
1548 {"removeUserTooltip", IDS_SETTINGS_USERS_REMOVE_USER_TOOLTIP},
1549 {"addUsers", IDS_SETTINGS_USERS_ADD_USERS},
1550 {"addUsersEmail", IDS_SETTINGS_USERS_ADD_USERS_EMAIL},
1551 {"userExistsError", IDS_SETTINGS_USER_EXISTS_ERROR},
1552 };
1553 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1554 }
1555
AddGoogleAssistantStrings(content::WebUIDataSource * html_source,Profile * profile)1556 void AddGoogleAssistantStrings(content::WebUIDataSource* html_source,
1557 Profile* profile) {
1558 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1559 {"googleAssistantPageTitle", IDS_SETTINGS_GOOGLE_ASSISTANT},
1560 {"googleAssistantEnableContext", IDS_ASSISTANT_SCREEN_CONTEXT_TITLE},
1561 {"googleAssistantEnableContextDescription",
1562 IDS_ASSISTANT_SCREEN_CONTEXT_DESC},
1563 {"googleAssistantEnableHotword",
1564 IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_HOTWORD},
1565 {"googleAssistantEnableHotwordDescription",
1566 IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_HOTWORD_DESCRIPTION},
1567 {"googleAssistantVoiceSettings",
1568 IDS_SETTINGS_GOOGLE_ASSISTANT_VOICE_SETTINGS},
1569 {"googleAssistantVoiceSettingsDescription",
1570 IDS_ASSISTANT_VOICE_MATCH_RECORDING},
1571 {"googleAssistantVoiceSettingsRetrainButton",
1572 IDS_SETTINGS_GOOGLE_ASSISTANT_VOICE_SETTINGS_RETRAIN},
1573 {"googleAssistantEnableHotwordWithoutDspDescription",
1574 IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_HOTWORD_WITHOUT_DSP_DESCRIPTION},
1575 {"googleAssistantEnableHotwordWithoutDspRecommended",
1576 IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_HOTWORD_WITHOUT_DSP_RECOMMENDED},
1577 {"googleAssistantEnableHotwordWithoutDspAlwaysOn",
1578 IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_HOTWORD_WITHOUT_DSP_ALWAYS_ON},
1579 {"googleAssistantEnableHotwordWithoutDspOff",
1580 IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_HOTWORD_WITHOUT_DSP_OFF},
1581 {"googleAssistantEnableNotification",
1582 IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_NOTIFICATION},
1583 {"googleAssistantEnableNotificationDescription",
1584 IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_NOTIFICATION_DESCRIPTION},
1585 {"googleAssistantLaunchWithMicOpen",
1586 IDS_SETTINGS_GOOGLE_ASSISTANT_LAUNCH_WITH_MIC_OPEN},
1587 {"googleAssistantLaunchWithMicOpenDescription",
1588 IDS_SETTINGS_GOOGLE_ASSISTANT_LAUNCH_WITH_MIC_OPEN_DESCRIPTION},
1589 {"googleAssistantSettings", IDS_SETTINGS_GOOGLE_ASSISTANT_SETTINGS},
1590 };
1591 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1592
1593 html_source->AddBoolean("hotwordDspAvailable",
1594 chromeos::IsHotwordDspAvailable());
1595 html_source->AddBoolean(
1596 "voiceMatchDisabled",
1597 chromeos::assistant::features::IsVoiceMatchDisabled());
1598 }
1599
AddPrintingStrings(content::WebUIDataSource * html_source)1600 void AddPrintingStrings(content::WebUIDataSource* html_source) {
1601 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1602 {"printingPageTitle", IDS_SETTINGS_PRINTING},
1603 {"cupsPrintersTitle", IDS_SETTINGS_PRINTING_CUPS_PRINTERS},
1604 {"cupsPrintersLearnMoreLabel",
1605 IDS_SETTINGS_PRINTING_CUPS_PRINTERS_LEARN_MORE_LABEL},
1606 {"addCupsPrinter", IDS_SETTINGS_PRINTING_CUPS_PRINTERS_ADD_PRINTER},
1607 {"editPrinter", IDS_SETTINGS_PRINTING_CUPS_PRINTERS_EDIT},
1608 {"removePrinter", IDS_SETTINGS_PRINTING_CUPS_PRINTERS_REMOVE},
1609 {"setupPrinter", IDS_SETTINGS_PRINTING_CUPS_PRINTER_SETUP_BUTTON},
1610 {"setupPrinterAria",
1611 IDS_SETTINGS_PRINTING_CUPS_PRINTER_SETUP_BUTTON_ARIA},
1612 {"savePrinter", IDS_SETTINGS_PRINTING_CUPS_PRINTER_SAVE_BUTTON},
1613 {"savePrinterAria", IDS_SETTINGS_PRINTING_CUPS_PRINTER_SAVE_BUTTON_ARIA},
1614 {"searchLabel", IDS_SETTINGS_PRINTING_CUPS_SEARCH_LABEL},
1615 {"noSearchResults", IDS_SEARCH_NO_RESULTS},
1616 {"printerDetailsTitle", IDS_SETTINGS_PRINTING_CUPS_PRINTER_DETAILS_TITLE},
1617 {"printerName", IDS_SETTINGS_PRINTING_CUPS_PRINTER_DETAILS_NAME},
1618 {"printerModel", IDS_SETTINGS_PRINTING_CUPS_PRINTER_DETAILS_MODEL},
1619 {"printerQueue", IDS_SETTINGS_PRINTING_CUPS_PRINTER_DETAILS_QUEUE},
1620 {"savedPrintersTitle", IDS_SETTINGS_PRINTING_CUPS_SAVED_PRINTERS_TITLE},
1621 {"savedPrintersCountMany",
1622 IDS_SETTINGS_PRINTING_CUPS_PRINTERS_SAVED_PRINTERS_COUNT_MANY},
1623 {"savedPrintersCountOne",
1624 IDS_SETTINGS_PRINTING_CUPS_PRINTERS_SAVED_PRINTERS_COUNT_ONE},
1625 {"savedPrintersCountNone",
1626 IDS_SETTINGS_PRINTING_CUPS_PRINTERS_SAVED_PRINTERS_COUNT_NONE},
1627 {"showMorePrinters", IDS_SETTINGS_PRINTING_CUPS_SHOW_MORE},
1628 {"addPrintersNearbyTitle",
1629 IDS_SETTINGS_PRINTING_CUPS_ADD_PRINTERS_NEARBY_TITLE},
1630 {"addPrintersManuallyTitle",
1631 IDS_SETTINGS_PRINTING_CUPS_ADD_PRINTERS_MANUALLY_TITLE},
1632 {"manufacturerAndModelDialogTitle",
1633 IDS_SETTINGS_PRINTING_CUPS_SELECT_MANUFACTURER_AND_MODEL_TITLE},
1634 {"nearbyPrintersListTitle",
1635 IDS_SETTINGS_PRINTING_CUPS_PRINTERS_AVAILABLE_PRINTERS},
1636 {"nearbyPrintersCountMany",
1637 IDS_SETTINGS_PRINTING_CUPS_PRINTERS_AVAILABLE_PRINTERS_COUNT_MANY},
1638 {"nearbyPrintersCountOne",
1639 IDS_SETTINGS_PRINTING_CUPS_PRINTERS_AVAILABLE_PRINTER_COUNT_ONE},
1640 {"nearbyPrintersCountNone",
1641 IDS_SETTINGS_PRINTING_CUPS_PRINTERS_AVAILABLE_PRINTER_COUNT_NONE},
1642 {"nearbyPrintersListDescription",
1643 IDS_SETTINGS_PRINTING_CUPS_PRINTERS_ADD_DETECTED_OR_NEW_PRINTER},
1644 {"manufacturerAndModelAdditionalInformation",
1645 IDS_SETTINGS_PRINTING_CUPS_MANUFACTURER_MODEL_ADDITIONAL_INFORMATION},
1646 {"addPrinterButtonText",
1647 IDS_SETTINGS_PRINTING_CUPS_ADD_PRINTER_BUTTON_ADD},
1648 {"printerDetailsAdvanced", IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADVANCED},
1649 {"printerDetailsA11yLabel",
1650 IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADVANCED_ACCESSIBILITY_LABEL},
1651 {"printerAddress", IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADVANCED_ADDRESS},
1652 {"printerProtocol", IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADVANCED_PROTOCOL},
1653 {"printerURI", IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADVANCED_URI},
1654 {"manuallyAddPrinterButtonText",
1655 IDS_SETTINGS_PRINTING_CUPS_ADD_PRINTER_BUTTON_MANUAL_ADD},
1656 {"discoverPrintersButtonText",
1657 IDS_SETTINGS_PRINTING_CUPS_ADD_PRINTER_BUTTON_DISCOVER_PRINTERS},
1658 {"printerProtocolIpp", IDS_SETTINGS_PRINTING_CUPS_PRINTER_PROTOCOL_IPP},
1659 {"printerProtocolIpps", IDS_SETTINGS_PRINTING_CUPS_PRINTER_PROTOCOL_IPPS},
1660 {"printerProtocolHttp", IDS_SETTINGS_PRINTING_CUPS_PRINTER_PROTOCOL_HTTP},
1661 {"printerProtocolHttps",
1662 IDS_SETTINGS_PRINTING_CUPS_PRINTER_PROTOCOL_HTTPS},
1663 {"printerProtocolAppSocket",
1664 IDS_SETTINGS_PRINTING_CUPS_PRINTER_PROTOCOL_APP_SOCKET},
1665 {"printerProtocolLpd", IDS_SETTINGS_PRINTING_CUPS_PRINTER_PROTOCOL_LPD},
1666 {"printerProtocolUsb", IDS_SETTINGS_PRINTING_CUPS_PRINTER_PROTOCOL_USB},
1667 {"printerProtocolIppUsb",
1668 IDS_SETTINGS_PRINTING_CUPS_PRINTER_PROTOCOL_IPPUSB},
1669 {"printerConfiguringMessage",
1670 IDS_SETTINGS_PRINTING_CUPS_PRINTER_CONFIGURING_MESSAGE},
1671 {"printerManufacturer", IDS_SETTINGS_PRINTING_CUPS_PRINTER_MANUFACTURER},
1672 {"selectDriver", IDS_SETTINGS_PRINTING_CUPS_PRINTER_SELECT_DRIVER},
1673 {"selectDriverButtonText",
1674 IDS_SETTINGS_PRINTING_CUPS_PRINTER_BUTTON_SELECT_DRIVER},
1675 {"selectDriverButtonAriaLabel",
1676 IDS_SETTINGS_PRINTING_CUPS_PRINTER_BUTTON_SELECT_DRIVER_ARIA_LABEL},
1677 {"selectDriverErrorMessage",
1678 IDS_SETTINGS_PRINTING_CUPS_PRINTER_INVALID_DRIVER},
1679 {"printerAddedSuccessfulMessage",
1680 IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_PRINTER_DONE_MESSAGE},
1681 {"printerEditedSuccessfulMessage",
1682 IDS_SETTINGS_PRINTING_CUPS_PRINTER_EDITED_PRINTER_DONE_MESSAGE},
1683 {"printerUnavailableMessage",
1684 IDS_SETTINGS_PRINTING_CUPS_PRINTER_UNAVAILABLE_MESSAGE},
1685 {"noPrinterNearbyMessage",
1686 IDS_SETTINGS_PRINTING_CUPS_PRINTER_NO_PRINTER_NEARBY},
1687 {"searchingNearbyPrinters",
1688 IDS_SETTINGS_PRINTING_CUPS_PRINTER_SEARCHING_NEARBY_PRINTER},
1689 {"printerAddedFailedMessage",
1690 IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_PRINTER_ERROR_MESSAGE},
1691 {"printerAddedFatalErrorMessage",
1692 IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_PRINTER_FATAL_ERROR_MESSAGE},
1693 {"printerAddedUnreachableMessage",
1694 IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_PRINTER_PRINTER_UNREACHABLE_MESSAGE},
1695 {"printerAddedPpdTooLargeMessage",
1696 IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_PRINTER_PPD_TOO_LARGE_MESSAGE},
1697 {"printerAddedInvalidPpdMessage",
1698 IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_PRINTER_INVALID_PPD_MESSAGE},
1699 {"printerAddedPpdNotFoundMessage",
1700 IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_PRINTER_PPD_NOT_FOUND},
1701 {"printerAddedPpdUnretrievableMessage",
1702 IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_PRINTER_PPD_UNRETRIEVABLE},
1703 {"printerAddedNativePrintersNotAllowedMessage",
1704 IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_NATIVE_PRINTERS_NOT_ALLOWED_MESSAGE},
1705 {"editPrinterInvalidPrinterUpdate",
1706 IDS_SETTINGS_PRINTING_CUPS_EDIT_PRINTER_INVALID_PRINTER_UPDATE},
1707 {"requireNetworkMessage",
1708 IDS_SETTINGS_PRINTING_CUPS_PRINTER_REQUIRE_INTERNET_MESSAGE},
1709 {"checkNetworkMessage",
1710 IDS_SETTINGS_PRINTING_CUPS_PRINTER_CHECK_CONNECTION_MESSAGE},
1711 {"noInternetConnection",
1712 IDS_SETTINGS_PRINTING_CUPS_PRINTER_NO_INTERNET_CONNECTION},
1713 {"checkNetworkAndTryAgain",
1714 IDS_SETTINGS_PRINTING_CUPS_PRINTER_CONNECT_TO_NETWORK_SUBTEXT},
1715 {"editPrinterDialogTitle",
1716 IDS_SETTINGS_PRINTING_CUPS_EDIT_PRINTER_DIALOG_TITLE},
1717 {"editPrinterButtonText", IDS_SETTINGS_PRINTING_CUPS_EDIT_PRINTER_BUTTON},
1718 {"currentPpdMessage",
1719 IDS_SETTINGS_PRINTING_CUPS_EDIT_PRINTER_CURRENT_PPD_MESSAGE},
1720 {"printerEulaNotice", IDS_SETTINGS_PRINTING_CUPS_EULA_NOTICE},
1721 {"ippPrinterUnreachable", IDS_SETTINGS_PRINTING_CUPS_IPP_URI_UNREACHABLE},
1722 {"generalPrinterDialogError",
1723 IDS_SETTINGS_PRINTING_CUPS_DIALOG_GENERAL_ERROR},
1724 {"printServerButtonText", IDS_SETTINGS_PRINTING_CUPS_PRINT_SERVER},
1725 {"addPrintServerTitle",
1726 IDS_SETTINGS_PRINTING_CUPS_ADD_PRINT_SERVER_TITLE},
1727 {"printServerAddress", IDS_SETTINGS_PRINTING_CUPS_PRINT_SERVER_ADDRESS},
1728 {"printServerFoundZeroPrinters",
1729 IDS_SETTINGS_PRINTING_CUPS_PRINT_SERVER_FOUND_ZERO_PRINTERS},
1730 {"printServerFoundOnePrinter",
1731 IDS_SETTINGS_PRINTING_CUPS_PRINT_SERVER_FOUND_ONE_PRINTER},
1732 {"printServerFoundManyPrinters",
1733 IDS_SETTINGS_PRINTING_CUPS_PRINT_SERVER_FOUND_MANY_PRINTERS},
1734 {"printServerInvalidUrlAddress",
1735 IDS_SETTINGS_PRINTING_CUPS_PRINT_SERVER_INVALID_URL_ADDRESS},
1736 {"printServerConnectionError",
1737 IDS_SETTINGS_PRINTING_CUPS_PRINT_SERVER_CONNECTION_ERROR},
1738 {"printServerConfigurationErrorMessage",
1739 IDS_SETTINGS_PRINTING_CUPS_PRINT_SERVER_REACHABLE_BUT_CANNOT_ADD},
1740 };
1741 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1742
1743 html_source->AddString("printingCUPSPrintLearnMoreUrl",
1744 GetHelpUrlWithBoard(chrome::kCupsPrintLearnMoreURL));
1745 html_source->AddString(
1746 "printingCUPSPrintPpdLearnMoreUrl",
1747 GetHelpUrlWithBoard(chrome::kCupsPrintPPDLearnMoreURL));
1748 html_source->AddBoolean(
1749 "consumerPrintServerUiEnabled",
1750 base::FeatureList::IsEnabled(::features::kPrintServerUi));
1751 }
1752
AddSearchInSettingsStrings(content::WebUIDataSource * html_source)1753 void AddSearchInSettingsStrings(content::WebUIDataSource* html_source) {
1754 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1755 {"searchPrompt", IDS_SETTINGS_SEARCH_PROMPT},
1756 {"searchNoResults", IDS_SEARCH_NO_RESULTS},
1757 {"searchResults", IDS_SEARCH_RESULTS},
1758 // TODO(dpapad): IDS_DOWNLOAD_CLEAR_SEARCH and IDS_HISTORY_CLEAR_SEARCH
1759 // are identical, merge them to one and re-use here.
1760 {"clearSearch", IDS_DOWNLOAD_CLEAR_SEARCH},
1761 };
1762 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1763
1764 html_source->AddString(
1765 "searchNoOsResultsHelp",
1766 l10n_util::GetStringFUTF16(
1767 IDS_SETTINGS_SEARCH_NO_RESULTS_HELP,
1768 base::ASCIIToUTF16(chrome::kOsSettingsSearchHelpURL)));
1769
1770 html_source->AddBoolean(
1771 "newOsSettingsSearch",
1772 base::FeatureList::IsEnabled(chromeos::features::kNewOsSettingsSearch));
1773 }
1774
AddDateTimeStrings(content::WebUIDataSource * html_source)1775 void AddDateTimeStrings(content::WebUIDataSource* html_source) {
1776 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1777 {"dateTimePageTitle", IDS_SETTINGS_DATE_TIME},
1778 {"timeZone", IDS_SETTINGS_TIME_ZONE},
1779 {"selectTimeZoneResolveMethod",
1780 IDS_SETTINGS_SELECT_TIME_ZONE_RESOLVE_METHOD},
1781 {"timeZoneGeolocation", IDS_SETTINGS_TIME_ZONE_GEOLOCATION},
1782 {"timeZoneButton", IDS_SETTINGS_TIME_ZONE_BUTTON},
1783 {"timeZoneSubpageTitle", IDS_SETTINGS_TIME_ZONE_SUBPAGE_TITLE},
1784 {"setTimeZoneAutomaticallyDisabled",
1785 IDS_SETTINGS_TIME_ZONE_DETECTION_MODE_DISABLED},
1786 {"setTimeZoneAutomaticallyOn",
1787 IDS_SETTINGS_TIME_ZONE_DETECTION_SET_AUTOMATICALLY},
1788 {"setTimeZoneAutomaticallyOff",
1789 IDS_SETTINGS_TIME_ZONE_DETECTION_CHOOSE_FROM_LIST},
1790 {"setTimeZoneAutomaticallyIpOnlyDefault",
1791 IDS_SETTINGS_TIME_ZONE_DETECTION_MODE_IP_ONLY_DEFAULT},
1792 {"setTimeZoneAutomaticallyWithWiFiAccessPointsData",
1793 IDS_SETTINGS_TIME_ZONE_DETECTION_MODE_SEND_WIFI_AP},
1794 {"setTimeZoneAutomaticallyWithAllLocationInfo",
1795 IDS_SETTINGS_TIME_ZONE_DETECTION_MODE_SEND_ALL_INFO},
1796 {"use24HourClock", IDS_SETTINGS_USE_24_HOUR_CLOCK},
1797 {"setDateTime", IDS_SETTINGS_SET_DATE_TIME},
1798 };
1799 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1800
1801 html_source->AddString(
1802 "timeZoneSettingsLearnMoreURL",
1803 base::ASCIIToUTF16(base::StringPrintf(
1804 chrome::kTimeZoneSettingsLearnMoreURL,
1805 g_browser_process->GetApplicationLocale().c_str())));
1806 }
1807
AddAboutStrings(content::WebUIDataSource * html_source,Profile * profile)1808 void AddAboutStrings(content::WebUIDataSource* html_source, Profile* profile) {
1809 // Top level About page strings.
1810 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1811 {"aboutProductLogoAlt", IDS_SHORT_PRODUCT_LOGO_ALT_TEXT},
1812 #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
1813 {"aboutReportAnIssue", IDS_SETTINGS_ABOUT_PAGE_REPORT_AN_ISSUE},
1814 #endif
1815 {"aboutRelaunch", IDS_SETTINGS_ABOUT_PAGE_RELAUNCH},
1816 {"aboutUpgradeCheckStarted", IDS_SETTINGS_ABOUT_UPGRADE_CHECK_STARTED},
1817 {"aboutUpgradeRelaunch", IDS_SETTINGS_UPGRADE_SUCCESSFUL_RELAUNCH},
1818 {"aboutUpgradeUpdating", IDS_SETTINGS_UPGRADE_UPDATING},
1819 {"aboutUpgradeUpdatingPercent", IDS_SETTINGS_UPGRADE_UPDATING_PERCENT},
1820 {"aboutGetHelpUsingChrome", IDS_SETTINGS_GET_HELP_USING_CHROME},
1821 {"aboutPageTitle", IDS_SETTINGS_ABOUT_PROGRAM},
1822 {"aboutProductTitle", IDS_PRODUCT_NAME},
1823
1824 {"aboutEndOfLifeTitle", IDS_SETTINGS_ABOUT_PAGE_END_OF_LIFE_TITLE},
1825 {"aboutRelaunchAndPowerwash",
1826 IDS_SETTINGS_ABOUT_PAGE_RELAUNCH_AND_POWERWASH},
1827 {"aboutRollbackInProgress", IDS_SETTINGS_UPGRADE_ROLLBACK_IN_PROGRESS},
1828 {"aboutRollbackSuccess", IDS_SETTINGS_UPGRADE_ROLLBACK_SUCCESS},
1829 {"aboutUpgradeUpdatingChannelSwitch",
1830 IDS_SETTINGS_UPGRADE_UPDATING_CHANNEL_SWITCH},
1831 {"aboutUpgradeSuccessChannelSwitch",
1832 IDS_SETTINGS_UPGRADE_SUCCESSFUL_CHANNEL_SWITCH},
1833 {"aboutTPMFirmwareUpdateTitle",
1834 IDS_SETTINGS_ABOUT_TPM_FIRMWARE_UPDATE_TITLE},
1835 {"aboutTPMFirmwareUpdateDescription",
1836 IDS_SETTINGS_ABOUT_TPM_FIRMWARE_UPDATE_DESCRIPTION},
1837
1838 // About page, channel switcher dialog.
1839 {"aboutChangeChannel", IDS_SETTINGS_ABOUT_PAGE_CHANGE_CHANNEL},
1840 {"aboutChangeChannelAndPowerwash",
1841 IDS_SETTINGS_ABOUT_PAGE_CHANGE_CHANNEL_AND_POWERWASH},
1842 {"aboutDelayedWarningMessage",
1843 IDS_SETTINGS_ABOUT_PAGE_DELAYED_WARNING_MESSAGE},
1844 {"aboutDelayedWarningTitle", IDS_SETTINGS_ABOUT_PAGE_DELAYED_WARNING_TITLE},
1845 {"aboutPowerwashWarningMessage",
1846 IDS_SETTINGS_ABOUT_PAGE_POWERWASH_WARNING_MESSAGE},
1847 {"aboutPowerwashWarningTitle",
1848 IDS_SETTINGS_ABOUT_PAGE_POWERWASH_WARNING_TITLE},
1849 {"aboutUnstableWarningMessage",
1850 IDS_SETTINGS_ABOUT_PAGE_UNSTABLE_WARNING_MESSAGE},
1851 {"aboutUnstableWarningTitle",
1852 IDS_SETTINGS_ABOUT_PAGE_UNSTABLE_WARNING_TITLE},
1853 {"aboutChannelDialogBeta", IDS_SETTINGS_ABOUT_PAGE_DIALOG_CHANNEL_BETA},
1854 {"aboutChannelDialogDev", IDS_SETTINGS_ABOUT_PAGE_DIALOG_CHANNEL_DEV},
1855 {"aboutChannelDialogStable", IDS_SETTINGS_ABOUT_PAGE_DIALOG_CHANNEL_STABLE},
1856
1857 // About page, update warning dialog.
1858 {"aboutUpdateWarningMessage",
1859 IDS_SETTINGS_ABOUT_PAGE_UPDATE_WARNING_MESSAGE},
1860 {"aboutUpdateWarningTitle", IDS_SETTINGS_ABOUT_PAGE_UPDATE_WARNING_TITLE},
1861
1862 // Detailed build information
1863 {"aboutBuildDetailsTitle", IDS_OS_SETTINGS_ABOUT_PAGE_BUILD_DETAILS},
1864 {"aboutChannelBeta", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_BETA},
1865 {"aboutChannelCanary", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_CANARY},
1866 {"aboutChannelDev", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_DEV},
1867 {"aboutChannelLabel", IDS_SETTINGS_ABOUT_PAGE_CHANNEL},
1868 {"aboutChannelStable", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE},
1869 {"aboutCheckForUpdates", IDS_SETTINGS_ABOUT_PAGE_CHECK_FOR_UPDATES},
1870 {"aboutCurrentlyOnChannel", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL},
1871 {"aboutDetailedBuildInfo", IDS_SETTINGS_ABOUT_PAGE_DETAILED_BUILD_INFO},
1872 {version_ui::kApplicationLabel, IDS_PRODUCT_NAME},
1873 {version_ui::kPlatform, IDS_PLATFORM_LABEL},
1874 {version_ui::kFirmwareVersion, IDS_VERSION_UI_FIRMWARE_VERSION},
1875 {version_ui::kARC, IDS_ARC_LABEL},
1876 {"aboutBuildDetailsCopyTooltipLabel",
1877 IDS_OS_SETTINGS_ABOUT_PAGE_BUILD_DETAILS_COPY_TOOLTIP_LABEL},
1878 {"aboutIsArcStatusTitle", IDS_OS_SETTINGS_ABOUT_ARC_STATUS_TITLE},
1879 {"aboutIsDeveloperModeTitle", IDS_OS_SETTINGS_ABOUT_DEVELOPER_MODE},
1880 {"isEnterpriseManagedTitle",
1881 IDS_OS_SETTINGS_ABOUT_PAGE_ENTERPRISE_ENNROLLED_TITLE},
1882 {"aboutOsPageTitle", IDS_SETTINGS_ABOUT_OS},
1883 {"aboutGetHelpUsingChromeOs", IDS_SETTINGS_GET_HELP_USING_CHROME_OS},
1884 {"aboutOsProductTitle", IDS_PRODUCT_OS_NAME},
1885 {"aboutReleaseNotesOffline", IDS_SETTINGS_ABOUT_PAGE_RELEASE_NOTES},
1886 {"aboutShowReleaseNotes", IDS_SETTINGS_ABOUT_PAGE_SHOW_RELEASE_NOTES},
1887 };
1888 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1889
1890 html_source->AddString("aboutTPMFirmwareUpdateLearnMoreURL",
1891 chrome::kTPMFirmwareUpdateLearnMoreURL);
1892 html_source->AddString(
1893 "aboutUpgradeUpToDate",
1894 ui::SubstituteChromeOSDeviceType(IDS_SETTINGS_UPGRADE_UP_TO_DATE));
1895 html_source->AddString("managementPage",
1896 ManagementUI::GetManagementPageSubtitle(profile));
1897 }
1898
AddResetStrings(content::WebUIDataSource * html_source)1899 void AddResetStrings(content::WebUIDataSource* html_source) {
1900 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1901 {"resetPageTitle", IDS_SETTINGS_RESET},
1902 {"powerwashTitle", IDS_SETTINGS_FACTORY_RESET},
1903 {"powerwashDialogTitle", IDS_SETTINGS_FACTORY_RESET_HEADING},
1904 {"powerwashDialogButton", IDS_SETTINGS_RESTART},
1905 {"powerwashButton", IDS_SETTINGS_FACTORY_RESET_BUTTON_LABEL},
1906 {"powerwashDialogExplanation", IDS_SETTINGS_FACTORY_RESET_WARNING},
1907 {"powerwashLearnMoreUrl", IDS_FACTORY_RESET_HELP_URL},
1908 {"powerwashButtonRoleDescription",
1909 IDS_SETTINGS_FACTORY_RESET_BUTTON_ROLE},
1910 };
1911 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1912
1913 html_source->AddString(
1914 "powerwashDescription",
1915 l10n_util::GetStringFUTF16(IDS_SETTINGS_FACTORY_RESET_DESCRIPTION,
1916 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)));
1917 }
1918
AddSearchStrings(content::WebUIDataSource * html_source,Profile * profile)1919 void AddSearchStrings(content::WebUIDataSource* html_source, Profile* profile) {
1920 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1921 {"osSearchEngineLabel", IDS_OS_SETTINGS_SEARCH_ENGINE_LABEL},
1922 {"searchGoogleAssistant", IDS_SETTINGS_SEARCH_GOOGLE_ASSISTANT},
1923 {"searchGoogleAssistantEnabled",
1924 IDS_SETTINGS_SEARCH_GOOGLE_ASSISTANT_ENABLED},
1925 {"searchGoogleAssistantDisabled",
1926 IDS_SETTINGS_SEARCH_GOOGLE_ASSISTANT_DISABLED},
1927 {"searchGoogleAssistantOn", IDS_SETTINGS_SEARCH_GOOGLE_ASSISTANT_ON},
1928 {"searchGoogleAssistantOff", IDS_SETTINGS_SEARCH_GOOGLE_ASSISTANT_OFF},
1929 };
1930 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1931
1932 // NOTE: This will be false when the flag is disabled.
1933 const bool is_assistant_allowed =
1934 ::assistant::IsAssistantAllowedForProfile(profile) ==
1935 ash::mojom::AssistantAllowedState::ALLOWED;
1936 html_source->AddBoolean("isAssistantAllowed", is_assistant_allowed);
1937 html_source->AddLocalizedString("osSearchPageTitle",
1938 is_assistant_allowed
1939 ? IDS_SETTINGS_SEARCH_AND_ASSISTANT
1940 : IDS_SETTINGS_SEARCH);
1941 html_source->AddString("searchExplanation",
1942 l10n_util::GetStringFUTF16(
1943 IDS_SETTINGS_SEARCH_EXPLANATION,
1944 base::ASCIIToUTF16(chrome::kOmniboxLearnMoreURL)));
1945 html_source->AddString(
1946 "osSearchEngineTooltip",
1947 ui::SubstituteChromeOSDeviceType(IDS_OS_SETTINGS_SEARCH_ENGINE_TOOLTIP));
1948 }
1949
AddPrivacyStrings(content::WebUIDataSource * html_source)1950 void AddPrivacyStrings(content::WebUIDataSource* html_source) {
1951 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1952 {"privacyPageTitle", IDS_SETTINGS_PRIVACY},
1953 {"enableLogging", IDS_SETTINGS_ENABLE_LOGGING_PREF},
1954 {"enableLoggingDesc", IDS_SETTINGS_ENABLE_LOGGING_PREF_DESC},
1955 {"wakeOnWifi", IDS_SETTINGS_WAKE_ON_WIFI_DESCRIPTION},
1956 {"enableContentProtectionAttestation",
1957 IDS_SETTINGS_ENABLE_CONTENT_PROTECTION_ATTESTATION},
1958 };
1959 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1960
1961 html_source->AddString("syncAndGoogleServicesLearnMoreURL",
1962 chrome::kSyncAndGoogleServicesLearnMoreURL);
1963 ::settings::AddPersonalizationOptionsStrings(html_source);
1964 }
1965
AddPeoplePageStrings(content::WebUIDataSource * html_source,Profile * profile)1966 void AddPeoplePageStrings(content::WebUIDataSource* html_source,
1967 Profile* profile) {
1968 static constexpr webui::LocalizedString kLocalizedStrings[] = {
1969 {"osPeoplePageTitle", IDS_OS_SETTINGS_PEOPLE},
1970 {"accountManagerSubMenuLabel",
1971 IDS_SETTINGS_ACCOUNT_MANAGER_SUBMENU_LABEL},
1972 {"accountManagerPageTitle", IDS_SETTINGS_ACCOUNT_MANAGER_PAGE_TITLE},
1973 {"kerberosAccountsSubMenuLabel",
1974 IDS_SETTINGS_KERBEROS_ACCOUNTS_SUBMENU_LABEL},
1975 {"accountManagerPageTitle", IDS_SETTINGS_ACCOUNT_MANAGER_PAGE_TITLE},
1976 {"kerberosAccountsPageTitle", IDS_SETTINGS_KERBEROS_ACCOUNTS_PAGE_TITLE},
1977 {"lockScreenFingerprintTitle",
1978 IDS_SETTINGS_PEOPLE_LOCK_SCREEN_FINGERPRINT_SUBPAGE_TITLE},
1979 {"manageOtherPeople", IDS_SETTINGS_PEOPLE_MANAGE_OTHER_PEOPLE},
1980 {"osSyncPageTitle", IDS_OS_SETTINGS_SYNC_PAGE_TITLE},
1981 {"syncAndNonPersonalizedServices",
1982 IDS_SETTINGS_SYNC_SYNC_AND_NON_PERSONALIZED_SERVICES},
1983 {"syncDisconnectConfirm", IDS_SETTINGS_SYNC_DISCONNECT_CONFIRM},
1984 };
1985 AddLocalizedStringsBulk(html_source, kLocalizedStrings);
1986
1987 // Toggles the Chrome OS Account Manager submenu in the People section.
1988 html_source->AddBoolean("isAccountManagerEnabled",
1989 chromeos::IsAccountManagerAvailable(profile));
1990
1991 if (chromeos::features::IsSplitSyncConsentEnabled()) {
1992 static constexpr webui::LocalizedString kTurnOffStrings[] = {
1993 {"syncDisconnect", IDS_SETTINGS_PEOPLE_SYNC_TURN_OFF},
1994 {"syncDisconnectTitle",
1995 IDS_SETTINGS_TURN_OFF_SYNC_AND_SIGN_OUT_DIALOG_TITLE},
1996 };
1997 AddLocalizedStringsBulk(html_source, kTurnOffStrings);
1998 } else {
1999 static constexpr webui::LocalizedString kSignOutStrings[] = {
2000 {"syncDisconnect", IDS_SETTINGS_PEOPLE_SIGN_OUT},
2001 {"syncDisconnectTitle", IDS_SETTINGS_SYNC_DISCONNECT_TITLE},
2002 };
2003 AddLocalizedStringsBulk(html_source, kSignOutStrings);
2004 }
2005
2006 std::string sync_dashboard_url =
2007 google_util::AppendGoogleLocaleParam(
2008 GURL(chrome::kSyncGoogleDashboardURL),
2009 g_browser_process->GetApplicationLocale())
2010 .spec();
2011
2012 html_source->AddString(
2013 "syncDisconnectExplanation",
2014 l10n_util::GetStringFUTF8(IDS_SETTINGS_SYNC_DISCONNECT_EXPLANATION,
2015 base::ASCIIToUTF16(sync_dashboard_url)));
2016
2017 AddAccountManagerPageStrings(html_source);
2018 AddKerberosAccountsPageStrings(html_source);
2019 AddKerberosAddAccountDialogStrings(html_source);
2020 AddLockScreenPageStrings(html_source);
2021 AddFingerprintListStrings(html_source);
2022 AddFingerprintStrings(html_source);
2023 AddSetupFingerprintDialogStrings(html_source);
2024 AddSetupPinDialogStrings(html_source);
2025 AddSyncControlsStrings(html_source);
2026
2027 ::settings::AddSyncControlsStrings(html_source);
2028 ::settings::AddSyncAccountControlStrings(html_source);
2029 ::settings::AddPasswordPromptDialogStrings(html_source);
2030 ::settings::AddSyncPageStrings(html_source);
2031 }
2032
AddPageVisibilityStrings(content::WebUIDataSource * html_source)2033 void AddPageVisibilityStrings(content::WebUIDataSource* html_source) {
2034 PrefService* local_state = g_browser_process->local_state();
2035 // Toggles the Chrome OS Kerberos Accounts submenu in the People section.
2036 // Note that the handler is also dependent on this pref.
2037 html_source->AddBoolean("isKerberosEnabled",
2038 local_state->GetBoolean(prefs::kKerberosEnabled));
2039 }
2040
2041 } // namespace
2042
OsSettingsLocalizedStringsProvider(Profile * profile,local_search_service::mojom::LocalSearchService * local_search_service)2043 OsSettingsLocalizedStringsProvider::OsSettingsLocalizedStringsProvider(
2044 Profile* profile,
2045 local_search_service::mojom::LocalSearchService* local_search_service) {
2046 local_search_service->GetIndex(
2047 local_search_service::mojom::LocalSearchService::IndexId::CROS_SETTINGS,
2048 index_remote_.BindNewPipeAndPassReceiver());
2049
2050 // Add per-page string providers.
2051 // TODO(khorimoto): Add providers for the remaining pages.
2052 per_page_providers_.push_back(
2053 std::make_unique<InternetStringsProvider>(profile, /*delegate=*/this));
2054 }
2055
2056 OsSettingsLocalizedStringsProvider::~OsSettingsLocalizedStringsProvider() =
2057 default;
2058
AddOsLocalizedStrings(content::WebUIDataSource * html_source,Profile * profile)2059 void OsSettingsLocalizedStringsProvider::AddOsLocalizedStrings(
2060 content::WebUIDataSource* html_source,
2061 Profile* profile) {
2062 for (const auto& per_page_provider : per_page_providers_)
2063 per_page_provider->AddUiStrings(html_source);
2064
2065 // TODO(khorimoto): Migrate these to OsSettingsPerPageStringsProvider
2066 // instances.
2067 AddAboutStrings(html_source, profile);
2068 AddA11yStrings(html_source);
2069 AddAndroidAppStrings(html_source);
2070 AddAppManagementStrings(html_source);
2071 AddAppsStrings(html_source);
2072 AddBluetoothStrings(html_source);
2073 AddChromeOSUserStrings(html_source, profile);
2074 AddCommonStrings(html_source, profile);
2075 AddCrostiniStrings(html_source, profile);
2076 AddDateTimeStrings(html_source);
2077 AddDeviceStrings(html_source);
2078 AddFilesStrings(html_source);
2079 AddGoogleAssistantStrings(html_source, profile);
2080 AddLanguagesStrings(html_source);
2081 AddMultideviceStrings(html_source);
2082 AddParentalControlStrings(html_source, profile);
2083 AddPageVisibilityStrings(html_source);
2084 AddPeoplePageStrings(html_source, profile);
2085 AddPersonalizationStrings(html_source);
2086 AddPluginVmStrings(html_source, profile);
2087 AddPrintingStrings(html_source);
2088 AddPrivacyStrings(html_source);
2089 AddResetStrings(html_source);
2090 AddSearchInSettingsStrings(html_source);
2091 AddSearchStrings(html_source, profile);
2092 AddUsersStrings(html_source);
2093
2094 policy_indicator::AddLocalizedStrings(html_source);
2095
2096 html_source->UseStringsJs();
2097 }
2098
2099 const SearchConcept*
GetCanonicalTagMetadata(int canonical_message_id) const2100 OsSettingsLocalizedStringsProvider::GetCanonicalTagMetadata(
2101 int canonical_message_id) const {
2102 const auto it = canonical_id_to_metadata_map_.find(canonical_message_id);
2103 if (it == canonical_id_to_metadata_map_.end())
2104 return nullptr;
2105 return it->second;
2106 }
2107
Shutdown()2108 void OsSettingsLocalizedStringsProvider::Shutdown() {
2109 index_remote_.reset();
2110 }
2111
AddSearchTags(const std::vector<SearchConcept> & tags_group)2112 void OsSettingsLocalizedStringsProvider::AddSearchTags(
2113 const std::vector<SearchConcept>& tags_group) {
2114 index_remote_->AddOrUpdate(ConceptVectorToDataPtrVector(tags_group),
2115 /*callback=*/base::DoNothing());
2116
2117 // Add each concept to the map. Note that it is safe to take the address of
2118 // each concept because all concepts are allocated via static
2119 // base::NoDestructor objects in the Get*SearchConcepts() helper functions.
2120 for (const auto& concept : tags_group)
2121 canonical_id_to_metadata_map_[concept.canonical_message_id] = &concept;
2122 }
2123
RemoveSearchTags(const std::vector<SearchConcept> & tags_group)2124 void OsSettingsLocalizedStringsProvider::RemoveSearchTags(
2125 const std::vector<SearchConcept>& tags_group) {
2126 std::vector<std::string> ids;
2127 for (const auto& concept : tags_group) {
2128 canonical_id_to_metadata_map_.erase(concept.canonical_message_id);
2129 ids.push_back(base::NumberToString(concept.canonical_message_id));
2130 }
2131
2132 index_remote_->Delete(ids, /*callback=*/base::DoNothing());
2133 }
2134
2135 } // namespace settings
2136 } // namespace chromeos
2137