// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Use the <code>chrome.os.telemetry</code> API to get telemetry data.
[implemented_in = "chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api.h"]
namespace os.telemetry {
// Note: Please update documentation as well when this interface is changed.
// The documentation lives here: //docs/telemetry_extension/api_overview.md.
// LINT.IfChange
dictionary AudioInputNodeInfo {
double? id;
DOMString? name;
DOMString? deviceName;
boolean? active;
long? nodeGain;
};
dictionary AudioOutputNodeInfo {
double? id;
DOMString? name;
DOMString? deviceName;
boolean? active;
long? nodeVolume;
};
dictionary AudioInfo {
boolean? outputMute;
boolean? inputMute;
long? underruns;
long? severeUnderruns;
AudioOutputNodeInfo[] outputNodes;
AudioInputNodeInfo[] inputNodes;
};
callback AudioInfoCallback = void (AudioInfo audioInfo);
dictionary BatteryInfo {
double? cycleCount;
double? voltageNow;
DOMString? vendor;
DOMString? serialNumber;
double? chargeFullDesign;
double? chargeFull;
double? voltageMinDesign;
DOMString? modelName;
double? chargeNow;
double? currentNow;
DOMString? technology;
DOMString? status;
DOMString? manufactureDate;
double? temperature;
};
callback BatteryInfoCallback = void (BatteryInfo batteryInfo);
dictionary NonRemovableBlockDeviceInfo {
DOMString? name;
DOMString? type;
double? size;
};
dictionary NonRemovableBlockDeviceInfoResponse {
NonRemovableBlockDeviceInfo[] deviceInfos;
};
callback NonRemovableBlockDevicesInfoCallback = void (
NonRemovableBlockDeviceInfoResponse deviceInfoResponse);
enum CpuArchitectureEnum {
unknown,
x86_64,
aarch64,
armv7l
};
dictionary CpuCStateInfo {
// Name of the state.
DOMString? name;
// Time spent in the state since the last reboot, in microseconds.
double? timeInStateSinceLastBootUs;
};
dictionary LogicalCpuInfo {
// The max CPU clock speed in kHz.
long? maxClockSpeedKhz;
// Maximum frequency the CPU is allowed to run at, by policy.
long? scalingMaxFrequencyKhz;
// Current frequency the CPU is running at.
long? scalingCurrentFrequencyKhz;
// Idle time since last boot, in milliseconds.
double? idleTimeMs;
// Information about the logical CPU's time in various C-states.
CpuCStateInfo[] cStates;
// The core number this logical CPU corresponds to.
long? coreId;
};
dictionary PhysicalCpuInfo {
DOMString? modelName;
LogicalCpuInfo[] logicalCpus;
};
dictionary CpuInfo {
long? numTotalThreads;
CpuArchitectureEnum architecture;
PhysicalCpuInfo[] physicalCpus;
};
callback CpuInfoCallback = void (CpuInfo cpuInfo);
// An enumeration of display input type.
enum DisplayInputType {
// Unknown enum value.
unknown,
// Digital input.
digital,
// Analog input.
analog
};
dictionary EmbeddedDisplayInfo {
// Privacy screen is supported or not.
boolean? privacyScreenSupported;
// Privacy screen is enabled or not.
boolean? privacyScreenEnabled;
// Display width in millimeters.
long? displayWidth;
// Display height in millimeters.
long? displayHeight;
// Horizontal resolution.
long? resolutionHorizontal;
// Vertical resolution.
long? resolutionVertical;
// Refresh rate.
double? refreshRate;
// Three letter manufacturer ID.
DOMString? manufacturer;
// Manufacturer product code.
long? modelId;
// 32 bits serial number.
long? serialNumber;
// Week of manufacture.
long? manufactureWeek;
// Year of manufacture.
long? manufactureYear;
// EDID version.
DOMString? edidVersion;
// Digital or analog input.
DisplayInputType inputType;
// Name of display product.
DOMString? displayName;
};
dictionary ExternalDisplayInfo {
// Display width in millimeters.
long? displayWidth;
// Display height in millimeters.
long? displayHeight;
// Horizontal resolution.
long? resolutionHorizontal;
// Vertical resolution.
long? resolutionVertical;
// Refresh rate.
double? refreshRate;
// Three letter manufacturer ID.
DOMString? manufacturer;
// Manufacturer product code.
long? modelId;
// 32 bits serial number.
long? serialNumber;
// Week of manufacture.
long? manufactureWeek;
// Year of manufacture.
long? manufactureYear;
// EDID version.
DOMString? edidVersion;
// Digital or analog input.
DisplayInputType inputType;
// Name of display product.
DOMString? displayName;
};
dictionary DisplayInfo {
// Embedded display info.
EmbeddedDisplayInfo embeddedDisplay;
// External display info.
ExternalDisplayInfo[] externalDisplays;
};
callback DisplayInfoCallback = void (DisplayInfo displayInfo);
dictionary MarketingInfo {
DOMString? marketingName;
};
callback MarketingInfoCallback = void (MarketingInfo marketingInfo);
dictionary MemoryInfo {
long? totalMemoryKiB;
long? freeMemoryKiB;
long? availableMemoryKiB;
double? pageFaultsSinceLastBoot;
};
callback MemoryInfoCallback = void (MemoryInfo cpuInfo);
enum NetworkType {
cellular,
ethernet,
tether,
vpn,
wifi
};
enum NetworkState {
// The network type is available but not yet initialized.
uninitialized,
// The network type is available but disabled or disabling.
disabled,
// The network type is prohibited by policy.
prohibited,
// The network type is available and enabled or enabling, but no network
// connection has been established.
not_connected,
// The network type is available and enabled, and a network connection is in
// progress.
connecting,
// The network is in a portal state.
portal,
// The network is in a connected state, but connectivity is limited.
connected,
// The network is connected and online.
online
};
dictionary NetworkInfo {
NetworkType? type;
NetworkState? state;
DOMString? macAddress;
DOMString? ipv4Address;
DOMString[] ipv6Addresses;
double? signalStrength;
};
dictionary InternetConnectivityInfo {
NetworkInfo[] networks;
};
callback InternetConnectivityInfoCallback = void (
InternetConnectivityInfo networkInfo);
dictionary OemData {
// OEM data. This field used to store battery serial number by some OEMs.
DOMString? oemData;
};
callback OemDataCallback = void (OemData oemData);
dictionary OsVersionInfo {
DOMString? releaseMilestone;
DOMString? buildNumber;
DOMString? patchNumber;
DOMString? releaseChannel;
};
callback OsVersionInfoCallback = void (OsVersionInfo osVersionInfo);
// The info related to usb interfaces.
dictionary UsbBusInterfaceInfo {
// The zero-based number (index) of the interface.
double? interfaceNumber;
// These fields can be used to classify / identify the usb interfaces. See
// the usb.ids database for the values. (https://github.com/gentoo/hwids)
double? classId;
double? subclassId;
double? protocolId;
// The driver used by the device. This is the name of the matched driver
// which is registered in the kernel. See "{kernel root}/drivers/" for the
// list of the built in drivers.
DOMString? driver;
};
// An enumeration of the formats of firmware version in fwpud. See the fwupd
// repo for the values. (https://github.com/fwupd/fwupd)
enum FwupdVersionFormat {
// An unidentified format text string.
plain,
// A single integer version number.
number,
// Two AABB.CCDD version numbers.
pair,
// Microsoft-style AA.BB.CCDD version numbers.
triplet,
// UEFI-style AA.BB.CC.DD version numbers.
quad,
// Binary coded decimal notation.
bcd,
// Intel ME-style bitshifted notation.
intelMe,
// Intel ME-style A.B.CC.DDDD notation.
intelMe2,
// Legacy Microsoft Surface 10b.12b.10b.
surfaceLegacy,
// Microsoft Surface 8b.16b.8b.
surface,
// Dell BIOS BB.CC.DD style.
dellBios,
// Hexadecimal 0xAABCCDD style.
hex
};
// The info related to a firmware version obtained from fwupd.
dictionary FwupdFirmwareVersionInfo {
// The string form of the firmware version.
DOMString? version;
// The format for parsing the version string.
FwupdVersionFormat? version_format;
};
enum UsbVersion {
// Can't determine the usb version.
unknown,
// Usb 1.
usb1,
// Usb 2.
usb2,
// Usb 3.
usb3
};
// An enumeration of the usb spec speed in Mbps.
// Source:
// - https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-usb
// - https://www.kernel.org/doc/Documentation/ABI/stable/sysfs-bus-usb
// - https://en.wikipedia.org/wiki/USB
//
enum UsbSpecSpeed {
// Unknown speed.
unknown,
// Low speed.
n1_5Mbps,
// Full speed.
n12Mbps,
// High Speed.
n480Mbps,
// Super Speed.
n5Gbps,
// Super Speed+.
n10Gbps,
// Super Speed+ Gen 2x2.
n20Gbps
};
// The info related to usb.
dictionary UsbBusInfo {
// These fields can be used to classify / identify the usb devices. See the
// usb.ids database for the values. (https://github.com/gentoo/hwids)
double? classId;
double? subclassId;
double? protocolId;
double? vendorId;
double? productId;
// The usb interfaces under the device. A usb device has at least one
// interface. Each interface may or may not work independently, based on
// each device. This allows a usb device to provide multiple features.
// The interfaces are sorted by the `interface_number` field.
UsbBusInterfaceInfo[] interfaces;
// The firmware version obtained from fwupd.
FwupdFirmwareVersionInfo? fwupdFirmwareVersionInfo;
// The recognized usb version. It may not be the highest USB version
// supported by the hardware.
UsbVersion? version;
// The spec usb speed.
UsbSpecSpeed? spec_speed;
};
dictionary UsbBusDevices {
UsbBusInfo[] devices;
};
callback UsbBusDevicesCallback = void (UsbBusDevices UsbBusDevices);
dictionary VpdInfo {
// Device activate date. Format: YYYY-WW.
DOMString? activateDate;
// Device model name.
DOMString? modelName;
// Device serial number.
DOMString? serialNumber;
// Device SKU number, a.k.a. model number.
DOMString? skuNumber;
};
callback VpdInfoCallback = void (VpdInfo vpdInfo);
dictionary StatefulPartitionInfo {
double? availableSpace;
double? totalSpace;
};
callback StatefulPartitionInfoCallback = void (
StatefulPartitionInfo statefulPartitionInfo);
enum ThermalSensorSource {
unknown,
ec,
sysFs
};
dictionary ThermalSensorInfo {
// Name of the thermal sensor.
DOMString? name;
// Temperature detected by the thermal sensor in celsius.
double? temperatureCelsius;
// Where the thermal sensor is detected from.
ThermalSensorSource? source;
};
dictionary ThermalInfo {
// An array containing all the information retrieved for thermal sensors.
ThermalSensorInfo[] thermalSensors;
};
callback ThermalInfoCallback = void (ThermalInfo thermalInfo);
enum TpmGSCVersion {
not_gsc,
cr50,
ti50
};
dictionary TpmVersion {
// GSC version.
TpmGSCVersion? gscVersion;
// TPM family. We use the TPM 2.0 style encoding, e.g.:
// * TPM 1.2: "1.2" -> 0x312e3200
// * TPM 2.0: "2.0" -> 0x322e3000
long? family;
// TPM spec level.
double? specLevel;
// Manufacturer code.
long? manufacturer;
// TPM model number.
long? tpmModel;
// Firmware version.
double? firmwareVersion;
// Vendor specific information.
DOMString? vendorSpecific;
};
dictionary TpmStatus {
// Whether a TPM is enabled on the system.
boolean? enabled;
// Whether the TPM has been owned.
boolean? owned;
// Whether the owner password is still retained.
boolean? ownerPasswordIsPresent;
};
dictionary TpmDictionaryAttack {
// The current dictionary attack counter value.
long? counter;
// The current dictionary attack counter threshold.
long? threshold;
// Whether the TPM is in some form of dictionary attack lockout.
boolean? lockoutInEffect;
// The number of seconds remaining in the lockout.
long? lockoutSecondsRemaining;
};
dictionary TpmInfo {
// TPM version related information.
TpmVersion version;
// TPM status related information.
TpmStatus status;
// TPM dictionary attack (DA) related information.
TpmDictionaryAttack dictionaryAttack;
};
callback TpmInfoCallback = void (TpmInfo tpmInfo);
interface Functions {
static void getAudioInfo(AudioInfoCallback callback);
static void getBatteryInfo(BatteryInfoCallback callback);
static void getNonRemovableBlockDevicesInfo(
NonRemovableBlockDevicesInfoCallback callback);
static void getCpuInfo(CpuInfoCallback callback);
static void getInternetConnectivityInfo(
InternetConnectivityInfoCallback callback);
static void getMarketingInfo(MarketingInfoCallback callback);
static void getMemoryInfo(MemoryInfoCallback callback);
static void getOemData(OemDataCallback callback);
static void getOsVersionInfo(OsVersionInfoCallback callback);
static void getUsbBusInfo(UsbBusDevicesCallback callback);
static void getVpdInfo(VpdInfoCallback callback);
static void getStatefulPartitionInfo(
StatefulPartitionInfoCallback callback);
static void getTpmInfo(TpmInfoCallback callback);
static void getDisplayInfo(DisplayInfoCallback callback);
static void getThermalInfo(ThermalInfoCallback callback);
};
// LINT.ThenChange(//docs/telemetry_extension/api_overview.md)
// The following is an empty definition, since the IDL compiler only accepts
// comments over valid definitions.
callback EOF = void();
};