| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Note: The handle* functions below are called internally on promise |
| // resolution, unlike the other return* functions, which are called |
| // asynchronously by the host. |
| |
| // clang-format off |
| // <if expr="is_ios"> |
| import 'chrome://resources/js/ios/web_ui.js'; |
| // </if> |
| |
| import './strings.m.js'; |
| |
| import {sendWithPromise} from 'chrome://resources/js/cr.js'; |
| import {loadTimeData} from 'chrome://resources/js/load_time_data.js'; |
| import {getRequiredElement} from 'chrome://resources/js/util.js'; |
| // <if expr="is_chromeos or is_win"> |
| import {addWebUiListener} from 'chrome://resources/js/cr.js'; |
| // </if> |
| // <if expr="chromeos_ash"> |
| import {$} from 'chrome://resources/js/util.js'; |
| // </if> |
| // clang-format on |
| |
| /** |
| * Promise resolution handler for variations list and command line equivalent. |
| */ |
| function handleVariationInfo( |
| {variationsList, variationsCmd}: |
| {variationsList: string[], variationsCmd?: string}) { |
| getRequiredElement('variations-section').hidden = !variationsList.length; |
| for (const item of variationsList) { |
| getRequiredElement('variations-list') |
| .appendChild(document.createTextNode(item)); |
| getRequiredElement('variations-list') |
| .appendChild(document.createElement('br')); |
| } |
| |
| if (variationsCmd) { |
| getRequiredElement('variations-cmd-section').hidden = !variationsCmd; |
| getRequiredElement('variations-cmd').textContent = variationsCmd; |
| } |
| } |
| |
| /** |
| * Promise resolution handler for the executable and profile paths to display. |
| * @param execPath The executable path to display. |
| * @param profilePath The profile path to display. |
| */ |
| function handlePathInfo( |
| {execPath, profilePath}: {execPath: string, profilePath: string}) { |
| getRequiredElement('executable_path').textContent = execPath; |
| getRequiredElement('profile_path').textContent = profilePath; |
| } |
| |
| // <if expr="chromeos_lacros or is_win"> |
| /** |
| * Callback from the backend with the OS version to display. |
| * @param osVersion The OS version to display. |
| */ |
| function returnOsVersion(osVersion: string) { |
| getRequiredElement('os_version').textContent = osVersion; |
| } |
| // </if> |
| |
| // <if expr="is_chromeos"> |
| /** |
| * Callback from the backend with the ChromeOS platform version to display. |
| * @param platformVersion The platform version to display. |
| */ |
| function returnPlatformVersion(platformVersion: string) { |
| getRequiredElement('platform_version').textContent = platformVersion; |
| } |
| |
| /** |
| * Callback from the backend with the firmware version to display. |
| */ |
| function returnFirmwareVersion(firmwareVersion: string) { |
| getRequiredElement('firmware_version').textContent = firmwareVersion; |
| } |
| |
| /** |
| * Callback from the backend with the ARC Android SDK version to display. |
| * @param arcAndroidSdkVersion The ARC Android SDK version to display, |
| * already localized. |
| */ |
| function returnArcAndArcAndroidSdkVersions(arcAndroidSdkVersion: string) { |
| getRequiredElement('arc_holder').hidden = false; |
| getRequiredElement('arc_and_arc_android_sdk_versions').textContent = |
| arcAndroidSdkVersion; |
| } |
| |
| /** |
| * Callback from chromeosInfoPrivate with the value of the customization ID. |
| */ |
| function returnCustomizationId(response: {[customizationId: string]: any}) { |
| if (!response['customizationId']) { |
| return; |
| } |
| getRequiredElement('customization_id_holder').hidden = false; |
| getRequiredElement('customization_id').textContent = |
| response['customizationId']; |
| } |
| |
| // </if> |
| |
| // <if expr="chromeos_ash"> |
| /** |
| * Callback from the backend to inform if Lacros is enabled or not. |
| * @param enabled True if it is enabled. |
| */ |
| function returnLacrosEnabled(enabled: string) { |
| getRequiredElement('os-link-container').hidden = !enabled; |
| |
| const crosUrlRedirectButton = $('os-link-href'); |
| if (crosUrlRedirectButton) { |
| crosUrlRedirectButton.onclick = crosUrlVersionRedirect; |
| } |
| } |
| |
| /** |
| * Called when the user clicks on the os-link-href button. |
| */ |
| function crosUrlVersionRedirect() { |
| chrome.send('crosUrlVersionRedirect'); |
| } |
| // </if> |
| |
| function copyToClipboard() { |
| navigator.clipboard.writeText(getRequiredElement('copy-content').innerText) |
| .then(announceCopy); |
| } |
| |
| function announceCopy() { |
| const messagesDiv = getRequiredElement('messages'); |
| messagesDiv.innerHTML = window.trustedTypes!.emptyHTML; |
| |
| // <if expr="is_macosx"> |
| // VoiceOver on Mac does not seem to consistently read out the contents of |
| // a static alert element. Toggling the role of alert seems to force VO |
| // to consistently read out the messages. |
| messagesDiv.removeAttribute('role'); |
| messagesDiv.setAttribute('role', 'alert'); |
| // </if> |
| |
| const div = document.createElement('div'); |
| div.innerText = loadTimeData.getString('copy_notice'); |
| messagesDiv.append(div); |
| } |
| |
| // <if expr="chromeos_lacros"> |
| function copyOSContentToClipboard() { |
| navigator.clipboard.writeText( |
| getRequiredElement('copy-os-content').innerText); |
| } |
| // </if> |
| |
| /* All the work we do onload. */ |
| function initialize() { |
| // <if expr="chromeos_lacros or is_win"> |
| addWebUiListener('return-os-version', returnOsVersion); |
| // </if> |
| |
| // <if expr="is_chromeos"> |
| addWebUiListener('return-platform-version', returnPlatformVersion); |
| addWebUiListener('return-firmware-version', returnFirmwareVersion); |
| addWebUiListener( |
| 'return-arc-and-arc-android-sdk-versions', |
| returnArcAndArcAndroidSdkVersions); |
| getRequiredElement('arc_holder').hidden = true; |
| chrome.chromeosInfoPrivate.get(['customizationId']) |
| .then(returnCustomizationId); |
| // </if> |
| |
| // <if expr="chromeos_ash"> |
| addWebUiListener('return-lacros-enabled', returnLacrosEnabled); |
| // </if> |
| // <if expr="chromeos_lacros"> |
| // We always display the container in Lacros |
| getRequiredElement('os-link-container').hidden = false; |
| // </if> |
| |
| chrome.send('requestVersionInfo'); |
| const includeVariationsCmd = location.search.includes('show-variations-cmd'); |
| sendWithPromise('requestVariationInfo', includeVariationsCmd) |
| .then(handleVariationInfo); |
| sendWithPromise('requestPathInfo').then(handlePathInfo); |
| |
| if (getRequiredElement('variations-seed').textContent !== '') { |
| getRequiredElement('variations-seed-section').hidden = false; |
| } |
| |
| if (getRequiredElement('sanitizer').textContent !== '') { |
| getRequiredElement('sanitizer-section').hidden = false; |
| } |
| |
| getRequiredElement('copy-to-clipboard') |
| .addEventListener('click', copyToClipboard); |
| |
| // <if expr="chromeos_lacros"> |
| getRequiredElement('copy-os-content-to-clipboard') |
| .addEventListener('click', copyOSContentToClipboard); |
| // </if> |
| } |
| |
| document.addEventListener('DOMContentLoaded', initialize); |