shimless_rma.cc 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. // Copyright 2021 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. #include "ash/webui/shimless_rma/shimless_rma.h"
  5. #include <memory>
  6. #include <string>
  7. #include <utility>
  8. #include "ash/constants/ash_features.h"
  9. #include "ash/constants/ash_switches.h"
  10. #include "ash/public/cpp/network_config_service.h"
  11. #include "ash/webui/grit/ash_shimless_rma_resources.h"
  12. #include "ash/webui/grit/ash_shimless_rma_resources_map.h"
  13. #include "ash/webui/shimless_rma/backend/shimless_rma_delegate.h"
  14. #include "ash/webui/shimless_rma/url_constants.h"
  15. #include "base/command_line.h"
  16. #include "base/containers/span.h"
  17. #include "chromeos/strings/grit/chromeos_strings.h"
  18. #include "content/public/browser/web_contents.h"
  19. #include "content/public/browser/web_ui.h"
  20. #include "content/public/browser/web_ui_data_source.h"
  21. #include "services/network/public/mojom/content_security_policy.mojom.h"
  22. #include "ui/chromeos/devicetype_utils.h"
  23. #include "ui/chromeos/strings/network_element_localized_strings_provider.h"
  24. #include "ui/resources/grit/webui_generated_resources.h"
  25. namespace ash {
  26. namespace {
  27. // TODO(crbug/1051793): Replace with webui::SetUpWebUIDataSource() once it no
  28. // longer requires a dependency on //chrome/browser.
  29. void SetUpWebUIDataSource(content::WebUIDataSource* source,
  30. base::span<const webui::ResourcePath> resources,
  31. int default_resource) {
  32. source->AddResourcePaths(resources);
  33. source->SetDefaultResource(default_resource);
  34. source->AddResourcePath("test_loader.html", IDR_WEBUI_HTML_TEST_LOADER_HTML);
  35. source->AddResourcePath("test_loader.js", IDR_WEBUI_JS_TEST_LOADER_JS);
  36. source->AddResourcePath("test_loader_util.js",
  37. IDR_WEBUI_JS_TEST_LOADER_UTIL_JS);
  38. }
  39. void AddShimlessRmaStrings(content::WebUIDataSource* html_source) {
  40. static constexpr webui::LocalizedString kLocalizedStrings[] = {
  41. // Component names. Used by select components and calibration pages.
  42. {"componentAudio", IDS_SHIMLESS_RMA_COMPONENT_AUDIO},
  43. {"componentBattery", IDS_SHIMLESS_RMA_COMPONENT_BATTERY},
  44. {"componentStorage", IDS_SHIMLESS_RMA_COMPONENT_STORAGE},
  45. {"componentVpdCached", IDS_SHIMLESS_RMA_COMPONENT_VPD_CACHE},
  46. {"componentNetwork", IDS_SHIMLESS_RMA_COMPONENT_NETWORK},
  47. {"componentCamera", IDS_SHIMLESS_RMA_COMPONENT_CAMERA},
  48. {"componentStylus", IDS_SHIMLESS_RMA_COMPONENT_STYLUS},
  49. {"componentTouchpad", IDS_SHIMLESS_RMA_COMPONENT_TOUCHPAD},
  50. {"componentTouchscreen", IDS_SHIMLESS_RMA_COMPONENT_TOUCHSCREEN},
  51. {"componentDram", IDS_SHIMLESS_RMA_COMPONENT_MEMORY},
  52. {"componentDisplayPanel", IDS_SHIMLESS_RMA_COMPONENT_DISPLAY_PANEL},
  53. {"componentCellular", IDS_SHIMLESS_RMA_COMPONENT_CELLULAR},
  54. {"componentEthernet", IDS_SHIMLESS_RMA_COMPONENT_ETHERNET},
  55. {"componentWireless", IDS_SHIMLESS_RMA_COMPONENT_WIRELESS},
  56. {"componentBaseAccelerometer",
  57. IDS_SHIMLESS_RMA_COMPONENT_BASE_ACCELEROMETER},
  58. {"componentLidAccelerometer",
  59. IDS_SHIMLESS_RMA_COMPONENT_LID_ACCELEROMETER},
  60. {"componentBaseGyroscope", IDS_SHIMLESS_RMA_COMPONENT_BASE_GYROSCOPE},
  61. {"componentLidGyroscope", IDS_SHIMLESS_RMA_COMPONENT_LID_GYROSCOPE},
  62. {"componentScreen", IDS_SHIMLESS_RMA_COMPONENT_SCREEN},
  63. {"componentKeyboard", IDS_SHIMLESS_RMA_COMPONENT_KEYBOARD},
  64. {"componentPowerButton", IDS_SHIMLESS_RMA_COMPONENT_POWER_BUTTON},
  65. // Splash screen
  66. {"shimlessSplashRemembering", IDS_SHIMLESS_RMA_SPLASH_REMEMBERING},
  67. // Common buttons
  68. {"exitButtonLabel", IDS_SHIMLESS_RMA_EXIT_BUTTON},
  69. {"backButtonLabel", IDS_SHIMLESS_RMA_BACK_BUTTON},
  70. {"nextButtonLabel", IDS_SHIMLESS_RMA_NEXT_BUTTON},
  71. {"skipButtonLabel", IDS_SHIMLESS_RMA_SKIP_BUTTON},
  72. {"okButtonLabel", IDS_SHIMLESS_RMA_OK_BUTTON},
  73. {"cancelButtonLabel", IDS_SHIMLESS_RMA_CANCEL_BUTTON},
  74. {"retryButtonLabel", IDS_SHIMLESS_RMA_RETRY_BUTTON},
  75. {"tryAgainButtonLabel", IDS_SHIMLESS_RMA_TRY_AGAIN_BUTTON},
  76. {"doneButtonLabel", IDS_SHIMLESS_RMA_DONE_BUTTON},
  77. // Exit dialog
  78. {"exitDialogTitleText", IDS_SHIMLESS_RMA_EXIT_DIALOG_TITLE},
  79. {"exitDialogCancelButtonLabel",
  80. IDS_SHIMLESS_RMA_EXIT_DIALOG_CANCEL_BUTTON_LABEL},
  81. // Landing page
  82. {"beginRmaWarningText", IDS_SHIMLESS_RMA_AUTHORIZED_TECH_ONLY_WARNING},
  83. {"validatingComponentsText", IDS_SHIMLESS_RMA_VALIDATING_COMPONENTS},
  84. {"validatedComponentsSuccessText",
  85. IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_SUCCESS},
  86. {"validatedComponentsFailText",
  87. IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_FAIL},
  88. {"getStartedButtonLabel", IDS_SHIMLESS_RMA_GET_STARTED_BUTTON_LABEL},
  89. {"unqualifiedComponentsTitle",
  90. IDS_SHIMLESS_RMA_UNQUALIFIED_COMPONENTS_TITLE},
  91. // Network connect page
  92. {"connectNetworkTitleText", IDS_SHIMLESS_RMA_CONNECT_PAGE_TITLE},
  93. {"connectNetworkDescriptionText",
  94. IDS_SHIMLESS_RMA_CONNECT_PAGE_DESCRIPTION},
  95. {"connectNetworkDialogConnectButtonText",
  96. IDS_SHIMLESS_RMA_CONNECT_DIALOG_CONNECT},
  97. {"connectNetworkDialogDisconnectButtonText",
  98. IDS_SHIMLESS_RMA_CONNECT_DIALOG_DISCONNECT},
  99. {"connectNetworkDialogCancelButtonText",
  100. IDS_SHIMLESS_RMA_CONNECT_DIALOG_CANCEL},
  101. {"internetConfigName", IDS_SHIMLESS_RMA_CONNECT_DIALOG_CONFIG_NAME},
  102. {"internetJoinType", IDS_SHIMLESS_RMA_CONNECT_DIALOG_JOIN_TYPE},
  103. // Select components page
  104. {"selectComponentsTitleText",
  105. IDS_SHIMLESS_RMA_SELECT_COMPONENTS_PAGE_TITLE},
  106. {"undetectedComponentText", IDS_SHIMLESS_RMA_UNDETECTED_COMPONENT_LABEL},
  107. {"reworkFlowLinkText", IDS_SHIMLESS_RMA_REWORK_FLOW_LINK},
  108. // Choose destination page
  109. {"chooseDestinationTitleText", IDS_SHIMLESS_RMA_CHOOSE_DESTINATION},
  110. {"sameOwnerText", IDS_SHIMLESS_RMA_SAME_OWNER},
  111. {"newOwnerText", IDS_SHIMLESS_RMA_NEW_OWNER},
  112. {"newOwnerDescriptionText", IDS_SHIMLESS_RMA_NEW_OWNER_DESCRIPTION},
  113. {"notSureOwnerText", IDS_SHIMLESS_RMA_NOT_SURE_OWNER},
  114. // OS update page
  115. {"osUpdateTitleText", IDS_SHIMLESS_RMA_UPDATE_OS_PAGE_TITLE},
  116. {"osUpdateUnqualifiedComponentsTopText",
  117. IDS_SHIMLESS_RMA_UPDATE_OS_UNQUALIFIED_COMPONENTS_TOP},
  118. {"osUpdateUnqualifiedComponentsBottomText",
  119. IDS_SHIMLESS_RMA_UPDATE_OS_UNQUALIFIED_COMPONENTS_BOTTOM},
  120. {"osUpdateOutOfDateDescriptionText",
  121. IDS_SHIMLESS_RMA_UPDATE_OS_OUT_OF_DATE},
  122. {"currentVersionOutOfDateText",
  123. IDS_SHIMLESS_RMA_CURRENT_VERSION_OUT_OF_DATE},
  124. {"updateVersionRestartLabel",
  125. IDS_SHIMLESS_RMA_UPDATE_VERSION_AND_RESTART},
  126. {"updatingOsVersionText", IDS_SHIMLESS_RMA_UPDATING_OS_VERSION},
  127. {"updatingOsErrorMessage", IDS_SHIMLESS_RMA_UPDATE_OS_ERROR_MESSAGE},
  128. // Choose WP disable method page
  129. {"chooseWpDisableMethodPageTitleText",
  130. IDS_SHIMLESS_RMA_CHOOSE_WP_DISABLE_METHOD_PAGE_TITLE},
  131. {"manualWpDisableMethodDescriptionText",
  132. IDS_SHIMLESS_RMA_MANUAL_WP_DISABLE_METHOD_DESCRIPTION},
  133. {"manualWpDisableMethodOptionText",
  134. IDS_SHIMLESS_RMA_MANUAL_WP_DISABLE_METHOD_OPTION},
  135. {"rsuWpDisableMethodOptionText",
  136. IDS_SHIMLESS_RMA_RSU_WP_DISABLE_METHOD_OPTION},
  137. {"rsuWpDisableMethodDescriptionText",
  138. IDS_SHIMLESS_RMA_RSU_WP_DISABLE_METHOD_DESCRIPTION},
  139. // RSU code page
  140. {"rsuCodePageTitleText", IDS_SHIMLESS_RMA_RSU_CODE_PAGE_TITLE},
  141. {"rsuCodeInstructionsText", IDS_SHIMLESS_RMA_RSU_CODE_INSTRUCTIONS},
  142. {"rsuChallengeDialogTitleText",
  143. IDS_SHIMLESS_RMA_RSU_CHALLENGE_DIALOG_TITLE},
  144. {"rsuCodeLabelText", IDS_SHIMLESS_RMA_RSU_CODE_LABEL},
  145. {"rsuCodeErrorLabelText", IDS_SHIMLESS_RMA_RSU_CODE_ERROR_LABEL},
  146. {"rsuChallengeDialogDoneButtonLabel",
  147. IDS_SHIMLESS_RMA_RSU_CHALLENGE_DIALOG_DONE_BUTTON},
  148. // Manual WP disable complete
  149. {"wpDisableCompletePageTitleText",
  150. IDS_SHIMLESS_RMA_WP_DISABLE_COMPLETE_PAGE_TITLE},
  151. {"wpDisableReassembleNowText",
  152. IDS_SHIMLESS_RMA_WP_DISABLE_REASSEMBLE_NOW_MESSAGE},
  153. {"wpDisableLeaveDisassembledText",
  154. IDS_SHIMLESS_RMA_WP_DISABLE_LEAVE_DISASSEMBLED_MESSAGE},
  155. // Check calibration page
  156. {"calibrationFailedTitleText",
  157. IDS_SHIMLESS_RMA_CALIBRATION_FAILED_PAGE_TITLE},
  158. {"calibrationFailedInstructionsText",
  159. IDS_SHIMLESS_RMA_CALIBRATION_FAILED_INSTRUCTIONS},
  160. {"calibrationFailedDialogTitle",
  161. IDS_SHIMLESS_RMA_CALIBRATION_FAILED_DIALOG_TITLE},
  162. {"calibrationFailedDialogText",
  163. IDS_SHIMLESS_RMA_CALIBRATION_FAILED_DIALOG_TEXT},
  164. {"calibrationFailedSkipCalibrationButtonLabel",
  165. IDS_SHIMLESS_RMA_CALIBRATION_FAILED_SKIP_CALIBRATION_LABEL},
  166. // Setup calibration page
  167. {"setupCalibrationTitleText",
  168. IDS_SHIMLESS_RMA_SETUP_CALIBRATION_PAGE_TITLE},
  169. {"calibrateBaseInstructionsText",
  170. IDS_SHIMLESS_RMA_BASE_CALIBRATION_INSTRUCTIONS},
  171. {"calibrateLidInstructionsText",
  172. IDS_SHIMLESS_RMA_LID_CALIBRATION_INSTRUCTIONS},
  173. // Finalize device page
  174. {"finalizePageTitleText", IDS_SHIMLESS_RMA_FINALIZE_PAGE_TITLE},
  175. {"finalizePageProgressText", IDS_SHIMLESS_RMA_FINALIZE_PROGRESS},
  176. {"finalizePageCompleteText", IDS_SHIMLESS_RMA_FINALIZE_COMPLETE},
  177. // Run calibration page
  178. {"runCalibrationTitleText", IDS_SHIMLESS_RMA_RUN_CALIBRATION_PAGE_TITLE},
  179. {"runCalibrationCompleteTitleText",
  180. IDS_SHIMLESS_RMA_RUN_CALIBRATION_COMPLETE_TITLE},
  181. // Device provisioning page
  182. {"provisioningPageTitleText", IDS_SHIMLESS_RMA_PROVISIONING_TITLE},
  183. {"provisioningPageWpEnabledDialogTitle",
  184. IDS_SHIMLESS_RMA_PROVISIONING_WP_ENABLED_DIALOG_TITLE},
  185. {"provisioningPageWpEnabledDialogBody",
  186. IDS_SHIMLESS_RMA_PROVISIONING_WP_ENABLED_DIALOG_BODY},
  187. // Repair complete page
  188. {"repairCompletedTitleText", IDS_SHIMLESS_RMA_REPAIR_COMPLETED},
  189. {"repairCompletedDescriptionText",
  190. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DESCRIPTION},
  191. {"repairCompletedDiagnosticsButtonText",
  192. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DIAGNOSTICS_BUTTON},
  193. {"repairCompletedDiagnosticsDescriptionText",
  194. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DIAGNOSTICS_DESCRIPTION},
  195. {"repairCompleteShutDownButtonText",
  196. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_SHUT_DOWN_BUTTON_LABEL},
  197. {"repairCompleteRebootButtonText",
  198. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_REBOOT_BUTTON_LABEL},
  199. {"repairCompletedLogsButtonText",
  200. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_LOGS_BUTTON},
  201. {"repairCompletedLogsDescriptionText",
  202. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_LOGS_DESCRIPTION},
  203. {"repairCompletedShutoffButtonText",
  204. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_BUTTON},
  205. {"repairCompletedShutoffDescriptionText",
  206. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_DESCRIPTION},
  207. {"repairCompletedShutoffInstructionsText",
  208. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_INSTRUCTIONS},
  209. {"rmaLogsTitleText", IDS_SHIMLESS_RMA_LOGS_TITLE},
  210. {"rmaLogsCancelButtonText", IDS_SHIMLESS_RMA_LOGS_CANCEL_BUTTON},
  211. {"rmaLogsSaveToUsbButtonText", IDS_SHIMLESS_RMA_LOGS_SAVE_BUTTON},
  212. {"repairCompletedPowerwashTitle",
  213. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_TITLE},
  214. {"repairCompletedPowerwashShutdownDescription",
  215. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_SHUTDOWN_DESCRIPTION},
  216. {"repairCompletedPowerwashRebootDescription",
  217. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_REBOOT_DESCRIPTION},
  218. {"repairCompletedPowerwashButton",
  219. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_BUTTON},
  220. {"repairCompletedBatteryCutoffCountdownDescription",
  221. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_CUTOFF_COUNTDOWN_DESCRIPTION},
  222. {"repairCompletedBatteryCutoffShutdownButton",
  223. IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_SHUTDOWN_BUTTON},
  224. {"rmaLogsSaveSuccessText", IDS_SHIMLESS_RMA_LOGS_SAVE_SUCCESS},
  225. {"rmaLogsSaveFailText", IDS_SHIMLESS_RMA_LOGS_SAVE_FAIL},
  226. // Powerwash dialog
  227. {"powerwashDialogTitle", IDS_SHIMLESS_RMA_POWERWASH_DIALOG_TITLE},
  228. {"powerwashDialogShutdownDescription",
  229. IDS_SHIMLESS_RMA_POWERWASH_DIALOG_SHUTDOWN_DESCRIPTION},
  230. {"powerwashDialogRebootDescription",
  231. IDS_SHIMLESS_RMA_POWERWASH_DIALOG_REBOOT_DESCRIPTION},
  232. {"powerwashDialogPowerwashButton",
  233. IDS_SHIMLESS_RMA_POWERWASH_DIALOG_POWERWASH_BUTTON},
  234. // Manual disable wp page
  235. {"manuallyDisableWpTitleText",
  236. IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_TITLE},
  237. {"manuallyDisableWpInstructionsText",
  238. IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_INSTRUCTIONS},
  239. {"manuallyDisableWpTitleTextReboot",
  240. IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_TITLE_REBOOT},
  241. {"manuallyDisableWpInstructionsTextReboot",
  242. IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_INSTRUCTIONS_REBOOT},
  243. // Restock mainboard page
  244. {"restockInstructionsText", IDS_SHIMLESS_RMA_RESTOCK_INSTRUCTIONS},
  245. {"restockShutdownButtonText", IDS_SHIMLESS_RMA_RESTOCK_SHUTDOWN_BUTTON},
  246. {"restockContinueButtonText", IDS_SHIMLESS_RMA_RESTOCK_CONTINUE_BUTTON},
  247. {"restockTitleText", IDS_SHIMLESS_RMA_RESTOCK_PAGE_TITLE},
  248. // Manual enable wp page
  249. {"manuallyEnableWpTitleText", IDS_SHIMLESS_RMA_MANUALLY_ENABLE_WP_TITLE},
  250. {"manuallyEnableWpInstructionsText",
  251. IDS_SHIMLESS_RMA_MANUALLY_ENABLE_WP_INSTRUCTIONS},
  252. // Confirm device information page
  253. {"confirmDeviceInfoTitle", IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_TITLE},
  254. {"confirmDeviceInfoInstructions",
  255. IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_INSTRUCTIONS},
  256. {"confirmDeviceInfoSerialNumberLabel",
  257. IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SERIAL_NUMBER_LABEL},
  258. {"confirmDeviceInfoRegionLabel",
  259. IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_REGION_LABEL},
  260. {"confirmDeviceInfoWhiteLabelLabel",
  261. IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_WHITE_LABEL_LABEL},
  262. {"confirmDeviceInfoEmptyWhiteLabelLabel",
  263. IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_EMPTY_WHITE_LABEL_LABEL},
  264. {"confirmDeviceInfoDramPartNumberLabel",
  265. IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DRAM_PART_NUMBER_LABEL},
  266. {"confirmDeviceInfoSkuLabel",
  267. IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SKU_LABEL},
  268. {"confirmDeviceInfoResetButtonLabel",
  269. IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_REVERT_BUTTON_LABEL},
  270. {"confirmDeviceInfoSkuWarning",
  271. IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SKU_WARNING},
  272. // Firmware reimaging page
  273. {"firmwareUpdateInstallImageTitleText",
  274. IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_IMAGE_TITLE},
  275. {"firmwareUpdateInstallCompleteTitleText",
  276. IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_COMPLETE_TITLE},
  277. {"firmwareUpdateWaitForUsbText", IDS_SHIMLESS_RMA_FIRMWARE_WAIT_FOR_USB},
  278. {"firmwareUpdateFileNotFoundText",
  279. IDS_SHIMLESS_RMA_FIRMWARE_FILE_NOT_FOUND},
  280. {"firmwareUpdatingText", IDS_SHIMLESS_RMA_FIRMWARE_UPDATING},
  281. {"firmwareUpdateRebootText", IDS_SHIMLESS_RMA_FIRMWARE_REBOOT},
  282. {"firmwareUpdateCompleteText", IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_COMPLETE},
  283. // Onboarding update page
  284. {"onboardingUpdateProgress", IDS_SHIMLESS_RMA_ONBOARDING_UPDATE_PROGRESS},
  285. {"onboardingUpdateIdle", IDS_SHIMLESS_RMA_ONBOARDING_UPDATE_IDLE},
  286. {"onboardingUpdateChecking", IDS_SHIMLESS_RMA_ONBOARDING_UPDATE_CHECKING},
  287. {"onboardingUpdateAvailable",
  288. IDS_SHIMLESS_RMA_ONBOARDING_UPDATE_AVAILABLE},
  289. {"onboardingUpdateDownloading",
  290. IDS_SHIMLESS_RMA_ONBOARDING_UPDATE_DOWNLOADING},
  291. {"onboardingUpdateVerifying",
  292. IDS_SHIMLESS_RMA_ONBOARDING_UPDATE_VERIFYING},
  293. {"onboardingUpdateFinalizing",
  294. IDS_SHIMLESS_RMA_ONBOARDING_UPDATE_FINALIZING},
  295. {"onboardingUpdateReboot", IDS_SHIMLESS_RMA_ONBOARDING_UPDATE_REBOOT},
  296. {"onboardingUpdateError", IDS_SHIMLESS_RMA_ONBOARDING_UPDATE_ERROR},
  297. {"onboardingUpdateRollback", IDS_SHIMLESS_RMA_ONBOARDING_UPDATE_ROLLBACK},
  298. {"onboardingUpdateDisabled", IDS_SHIMLESS_RMA_ONBOARDING_UPDATE_DISABLED},
  299. {"onboardingUpdatePermission",
  300. IDS_SHIMLESS_RMA_ONBOARDING_UPDATE_PERMISSION},
  301. // Critical error
  302. {"criticalErrorMessageText", IDS_SHIMLESS_RMA_CRITICAL_ERROR_MESSAGE},
  303. {"criticalErrorRebootText", IDS_SHIMLESS_RMA_CRITICAL_REBOOT_BUTTON},
  304. // Hardware error
  305. {"hardwareErrorTitle", IDS_SHIMLESS_RMA_HARDWARE_ERROR_TITLE},
  306. {"hardwareErrorMessage", IDS_SHIMLESS_RMA_HARDWARE_ERROR_MESSAGE},
  307. {"hardwareErrorShutDownButton",
  308. IDS_SHIMLESS_RMA_HARDWARE_SHUTDOWN_BUTTON},
  309. // Reboot page
  310. {"rebootPageTitle", IDS_SHIMLESS_RMA_REBOOT_PAGE_TITLE},
  311. {"rebootPageMessage", IDS_SHIMLESS_RMA_REBOOT_PAGE_MESSAGE},
  312. {"shutdownPageTitle", IDS_SHIMLESS_RMA_REBOOT_PAGE_SHUTDOWN_TITLE},
  313. {"shutdownPageMessage", IDS_SHIMLESS_RMA_REBOOT_PAGE_SHUTDOWN_MESSAGE},
  314. // Wipe device page
  315. {"wipeDeviceTitleText", IDS_SHIMLESS_RMA_WIPE_DEVICE_TITLE},
  316. {"wipeDeviceRemoveDataLabel",
  317. IDS_SHIMLESS_RMA_WIPE_DEVICE_REMOVE_DATA_OPTION},
  318. {"wipeDeviceRemoveDataDescription",
  319. IDS_SHIMLESS_RMA_WIPE_DEVICE_REMOVE_DATA_OPTION_DESCRIPTION},
  320. {"wipeDevicePreserveDataLabel",
  321. IDS_SHIMLESS_RMA_WIPE_DEVICE_PRESERVE_DATA_OPTION},
  322. // Illustrations
  323. {"baseOnFlatSurfaceAltText",
  324. IDS_SHIMLESS_RMA_BASE_ON_FLAT_SURFACE_ALT_TEXT},
  325. {"downloadingAltText", IDS_SHIMLESS_RMA_DOWNLOADING_ALT_TEXT},
  326. {"errorAltText", IDS_SHIMLESS_RMA_ERROR_ALT_TEXT},
  327. {"insertUsbAltText", IDS_SHIMLESS_RMA_INSERT_USB_ALT_TEXT},
  328. {"lidOnFlatSurfaceAltText",
  329. IDS_SHIMLESS_RMA_LID_ON_FLAT_SURFACE_ALT_TEXT},
  330. {"repairStartAltText", IDS_SHIMLESS_RMA_REPAIR_START_ALT_TEXT},
  331. {"successAltText", IDS_SHIMLESS_RMA_SUCCESS_ALT_TEXT},
  332. {"updateOsAltText", IDS_SHIMLESS_RMA_UPDATE_OS_ALT_TEXT},
  333. };
  334. html_source->AddLocalizedStrings(kLocalizedStrings);
  335. html_source->UseStringsJs();
  336. }
  337. void AddDevicePlaceholderStrings(content::WebUIDataSource* html_source) {
  338. html_source->AddString(
  339. "shimlessSplashTitle",
  340. ui::SubstituteChromeOSDeviceType(IDS_SHIMLESS_RMA_SPLASH_TITLE));
  341. html_source->AddString(
  342. "welcomeTitleText",
  343. ui::SubstituteChromeOSDeviceType(IDS_SHIMLESS_RMA_LANDING_PAGE_TITLE));
  344. html_source->AddString(
  345. "criticalErrorExitText",
  346. ui::SubstituteChromeOSDeviceType(IDS_SHIMLESS_RMA_CRITICAL_EXIT_BUTTON));
  347. html_source->AddString(
  348. "criticalErrorTitleText",
  349. ui::SubstituteChromeOSDeviceType(IDS_SHIMLESS_RMA_CRITICAL_ERROR_TITLE));
  350. html_source->AddString("exitDialogDescriptionText",
  351. ui::SubstituteChromeOSDeviceType(
  352. IDS_SHIMLESS_RMA_EXIT_DIALOG_DESCRIPTION));
  353. }
  354. void AddFeatureFlags(content::WebUIDataSource* html_source) {
  355. html_source->AddBoolean(
  356. "osUpdateEnabled",
  357. base::FeatureList::IsEnabled(chromeos::features::kShimlessRMAOsUpdate));
  358. }
  359. } // namespace
  360. namespace shimless_rma {
  361. /* static */
  362. bool IsShimlessRmaAllowed() {
  363. const base::CommandLine& command_line =
  364. *base::CommandLine::ForCurrentProcess();
  365. // Do not attempt to launch RMA in safe mode as RMA will prevent login, and
  366. // any option to attempt repairs.
  367. return ash::features::IsShimlessRMAFlowEnabled() &&
  368. !command_line.HasSwitch(switches::kRmaNotAllowed) &&
  369. !command_line.HasSwitch(switches::kSafeMode);
  370. }
  371. /* static */
  372. bool HasLaunchRmaSwitchAndIsAllowed() {
  373. const base::CommandLine& command_line =
  374. *base::CommandLine::ForCurrentProcess();
  375. // Do not attempt to launch RMA in safe mode as RMA will prevent login, and
  376. // any option to attempt repairs.
  377. const bool launch_rma_switch_detected =
  378. command_line.HasSwitch(switches::kLaunchRma);
  379. // Call IsShimlessRmaAllowed() to safe guard from launching Shimless RMA in
  380. // in the wrong state.
  381. return launch_rma_switch_detected && IsShimlessRmaAllowed();
  382. }
  383. } // namespace shimless_rma
  384. ShimlessRMADialogUI::ShimlessRMADialogUI(
  385. content::WebUI* web_ui,
  386. std::unique_ptr<shimless_rma::ShimlessRmaDelegate> shimless_rma_delegate)
  387. : ui::MojoWebDialogUI(web_ui),
  388. shimless_rma_manager_(std::make_unique<shimless_rma::ShimlessRmaService>(
  389. std::move(shimless_rma_delegate))) {
  390. content::WebUIDataSource* html_source =
  391. content::WebUIDataSource::CreateAndAdd(
  392. web_ui->GetWebContents()->GetBrowserContext(),
  393. kChromeUIShimlessRMAHost);
  394. html_source->OverrideContentSecurityPolicy(
  395. network::mojom::CSPDirectiveName::ScriptSrc,
  396. "script-src chrome://resources chrome://test 'self';");
  397. html_source->DisableTrustedTypesCSP();
  398. const auto resources =
  399. base::make_span(kAshShimlessRmaResources, kAshShimlessRmaResourcesSize);
  400. SetUpWebUIDataSource(html_source, resources, IDR_ASH_SHIMLESS_RMA_INDEX_HTML);
  401. AddShimlessRmaStrings(html_source);
  402. AddDevicePlaceholderStrings(html_source);
  403. AddFeatureFlags(html_source);
  404. ui::network_element::AddLocalizedStrings(html_source);
  405. ui::network_element::AddOncLocalizedStrings(html_source);
  406. ui::network_element::AddDetailsLocalizedStrings(html_source);
  407. ui::network_element::AddConfigLocalizedStrings(html_source);
  408. ui::network_element::AddErrorLocalizedStrings(html_source);
  409. html_source->UseStringsJs();
  410. }
  411. ShimlessRMADialogUI::~ShimlessRMADialogUI() = default;
  412. void ShimlessRMADialogUI::BindInterface(
  413. mojo::PendingReceiver<chromeos::network_config::mojom::CrosNetworkConfig>
  414. receiver) {
  415. ash::GetNetworkConfigService(std::move(receiver));
  416. }
  417. void ShimlessRMADialogUI::BindInterface(
  418. mojo::PendingReceiver<shimless_rma::mojom::ShimlessRmaService> receiver) {
  419. DCHECK(shimless_rma_manager_);
  420. shimless_rma_manager_->BindInterface(std::move(receiver));
  421. }
  422. WEB_UI_CONTROLLER_TYPE_IMPL(ShimlessRMADialogUI)
  423. } // namespace ash