1// Copyright 2014 The Chromium Authors 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5syntax = "proto2"; 6 7option optimize_for = LITE_RUNTIME; 8option java_package = "org.chromium.components.metrics"; 9 10option java_outer_classname = "SystemProfileProtos"; 11 12package metrics; 13 14import "extension_install.proto"; 15 16// Stores information about the user's brower and system configuration. 17// Almost all the fields should be populated on every upload. (The only 18// exception is some fields in the stability section that are only uploaded 19// once per browsing session, usually shortly after startup.) 20// Next tag: 44 21message SystemProfileProto { 22 // The time when the client was compiled/linked, in seconds since the epoch. 23 optional int64 build_timestamp = 1; 24 25 // A version number string for the application. 26 // Most commonly this is the browser version number found in a user agent 27 // string, and is typically a 4-tuple of numbers separated by periods. In 28 // cases where the user agent version might be ambiguous (example: Linux 64- 29 // bit build, rather than 32-bit build, or a Windows version used in some 30 // special context, such as ChromeFrame running in IE), then this may include 31 // some additional postfix to provide clarification not available in the UA 32 // string. 33 // 34 // An example of a browser version 4-tuple is "5.0.322.0". Currently used 35 // postfixes are: 36 // 37 // "-64": a 64-bit build 38 // "-F": Chrome is running under control of ChromeFrame 39 // "-devel": this is not an official build of Chrome 40 // 41 // A full version number string could look similar to: 42 // "5.0.322.0-F-devel". 43 // 44 // This value, when available, is more trustworthy than the UA string 45 // associated with the request; and including the postfix, may be more 46 // specific. 47 optional string app_version = 2; 48 49 // The application can create logs about previous versions. In particular the 50 // initial stability log refers to the previous run, which can be an older 51 // version. This field is set by the client when the log being written has an 52 // app_version that's different than the version of the app writing the log. 53 // Note that the version uploading the log may also be different. 54 optional string log_written_by_app_version = 40; 55 56 // The brand code or distribution tag assigned to a partner, if available. 57 // Brand codes are only available on Windows. Not every Windows install 58 // though will have a brand code. 59 optional string brand_code = 12; 60 61 // The possible channels for an installation, from least to most stable. 62 enum Channel { 63 CHANNEL_UNKNOWN = 0; // Unknown channel -- perhaps an unofficial build? 64 CHANNEL_CANARY = 1; 65 CHANNEL_DEV = 2; 66 CHANNEL_BETA = 3; 67 CHANNEL_STABLE = 4; 68 } 69 optional Channel channel = 10; 70 71 // True for a client following updates on the extended stable channel; 72 // see go/chrome-extended-dd. 73 optional bool is_extended_stable_channel = 36 [default = false]; 74 75 // True if Chrome build is instrumented (e.g. built with ASAN instrumentation 76 // or with DCHECKs enabled). 77 // This field was renamed from |is_asan_build| to reflect its actual meaning. 78 optional bool is_instrumented_build = 20 [default = false]; 79 80 // For Chrome, the date the user enabled UMA, in seconds since the epoch. 81 // If the user has toggled the UMA enabled state multiple times, this will 82 // be the most recent date on which UMA was enabled. 83 // For privacy, this is rounded to the nearest hour (M30+). 84 // For WebView, the field stores the date "January 1st, 2014 00:00:00 UTC" 85 // if the user opted into metrics collection before WebView started tracking 86 // this information. Otherwise, the field value should correctly reflect the 87 // first startup for this app after the user opted into metrics collection. 88 optional int64 uma_enabled_date = 3; 89 90 // The time when the client was installed, in seconds since the epoch. 91 // For privacy, this is rounded to the nearest hour. 92 optional int64 install_date = 16; 93 94 // A message about the cloned install detection that helps improve data 95 // quality by identifying potential VMs and bots. This message will be 96 // set in every record after the client has ever been reset due to cloned 97 // install detection. However, the `cloned_from_client_id` 98 // field will only be set in the resetting session because this is not 99 // persisted in the local prefs. 100 // Next tag: 5 101 message ClonedInstallInfo { 102 // The latest timestamp we reset a cloned client’s client id, in seconds 103 // since the epoch. For privacy, this is rounded to the nearest hour. 104 optional int64 last_timestamp = 1; 105 106 // The client_id that this client is cloned from. This field is tied to the 107 // cloned install detector only; any other way of resetting client_id 108 // doesn't touch this field. This field is only reported in the 109 // resetting session. 110 optional fixed64 cloned_from_client_id = 2; 111 112 // The first timestamp when we reset a cloned client’s client id, in seconds 113 // since the epoch. For privacy, this is rounded to the nearest hour. 114 optional int64 first_timestamp = 3; 115 116 // The number of times this client has been reset due to cloned install. 117 // Increment by one per reset happens. 118 optional int32 count = 4; 119 } 120 optional ClonedInstallInfo cloned_install_info = 39; 121 122 // The non-identifying low entropy source value. This value seeds the 123 // pseudorandom generator which picks experimental groups. Clients only report 124 // the value that they used for picking experimental groups on startup which 125 // means this value won't be changed within the session even even if the low 126 // entropy source is reset (e.g. via the UMA checkbox) because group 127 // assignments won't be changed until restart. 128 optional int32 low_entropy_source = 31; 129 130 // The old low entropy value. This value is thought to be biased in the wild, 131 // and is no longer used for experiments requiring low entropy. Clients which 132 // already have an "old" value continue incorporating it into the high entropy 133 // source, to avoid changing those group assignments. New clients only have 134 // the new source. 135 optional int32 old_low_entropy_source = 32; 136 137 // A pseudo low entropy value. The actual low_entropy_source value is used for 138 // assignment to experiment arms, and this use may cause drift over time (for 139 // example, if a bad experiment arm drives away some users permanently.) This 140 // pseudo low entropy value is generated identically to low_entropy_source, 141 // but it is generated with a different randomization seed and is not used for 142 // experiment randomization. Consequently, it can be used in statistical 143 // validation to answer the question of how our data would be distributed if 144 // we didn't have to worry about low entropy source drift. 145 optional int32 pseudo_low_entropy_source = 37; 146 147 // The user's selected application locale, i.e. the user interface language. 148 // The locale includes a language code and, possibly, also a country code, 149 // e.g. "en-US". 150 optional string application_locale = 4; 151 152 // Hashes of command line keys used in the browser session when the MetricsLog 153 // is created. This takes into account the command line switches that were 154 // used when launching the session, as well as any modifications made to them, 155 // for example via CommandLine::AppendSwitch and CommandLine::RemoveSwitch. 156 // Values are the lower 32-bit of SHA1 hash in little-endian. 157 repeated fixed32 command_line_key_hash = 38 [packed = true]; 158 159 // Information on the user's operating system. 160 // Next tag: 11 161 message OS { 162 // The user's operating system. This should be one of: 163 // - 'Android' 164 // - 'Windows NT' 165 // - 'CrOS' (as of 07/2020) 166 // - 'Lacros' (the Lacros browser runs on Chrome OS, but reports a special 167 // OS name to differentiate itself from the built-in ash 168 // browser + window manager binary.) 169 // - 'Linux' (includes ChromeOS prior to 07/2020) 170 // - 'iOS' (iOS versions >= 9) 171 // - 'iPhone OS' (iOS versions <= 8) 172 // - 'iPadOS' 173 // - 'Mac OS X' 174 optional string name = 1; 175 176 // The version of the OS. The meaning of this field is OS-dependent. 177 optional string version = 2; 178 179 // The fingerprint of the build. This field is used only on Android. 180 optional string build_fingerprint = 3; 181 182 // Whether the version of iOS appears to be "jailbroken". This field is 183 // used only on iOS. Chrome for iOS detects whether device contains a 184 // DynamicLibraries/ directory. It's a necessary but insufficient indicator 185 // of whether the operating system has been jailbroken. 186 // Deprecated 01/2023. This was never set. 187 optional bool DEPRECATED_is_jailbroken = 4 [deprecated = true]; 188 189 // The build number for the OS version. The same OS version may have a 190 // different build number. The meaning of this field is OS-dependent. 191 optional string build_number = 5; 192 193 // The version of the kernel. Linux based operating systems, such as 194 // ChromeOS and Android, have a kernel version that the OS release version 195 // was built with that differs from the version field above. 196 optional string kernel_version = 6; 197 198 // Information on ChromeOS ARC runtime. This is collected to ease analysis 199 // on ARC-specific metrics, since this info varies by different boards / 200 // build configs / releases. 201 // Next tag: 2 202 message Arc { 203 // Android release number from build.prop "ro.build.version.release", e.g. 204 // "7.1.1" for N and "9" for P. 205 optional string release = 1; 206 } 207 // Available since M76. This field is reported if current build supports 208 // ARC, regardless of whether ARC is enabled or not. Check "Arc.State" 209 // histogram to determine if ARC is enabled for current report. 210 // Logged on ChromeOS only. 211 optional Arc arc = 7; 212 213 // Data related to system-level dark mode configuration. This is currently 214 // only uploaded on Android. "*_APP" variants are included to reflect when 215 // the user overrides the system configuration within the browser 216 enum DarkModeState { 217 UNKNOWN = 0; 218 219 // Both the system and the browser are in dark mode. 220 DARK_MODE_SYSTEM = 1; 221 222 // The browser is in dark mode, but the state of the system either cannot 223 // be determined or has been overridden by the user. 224 DARK_MODE_APP = 2; 225 226 // Both the system and the browser are in light mode. 227 LIGHT_MODE_SYSTEM = 3; 228 229 // The browser is in light mode, but the state of the system either cannot 230 // be determined or has been overridden by the user. 231 LIGHT_MODE_APP = 4; 232 } 233 optional DarkModeState dark_mode_state = 8 [default = UNKNOWN]; 234 235 // The value returned by the "XDG_SESSION_TYPE" environment variable, as 236 // translated to a base::nix::SessionType, this field is only set on Linux. 237 // Some features are enabled/disabled depending on this value. 238 enum XdgSessionType { 239 UNSET = 0; 240 OTHER_SESSION_TYPE = 1; 241 UNSPECIFIED = 2; 242 TTY = 3; 243 X11 = 4; 244 WAYLAND = 5; 245 MIR = 6; 246 } 247 optional XdgSessionType xdg_session_type = 9; 248 249 // The value returned by the "XDG_CURRENT_DESKTOP" environment variable, as 250 // translated to a base::nix::DesktopEnvironment. Note that all KDE values 251 // from that enum are bucketed together. This field is only set on Linux. 252 // Some bugs reproduce only in particular desktop environments. 253 enum XdgCurrentDesktop { 254 OTHER = 0; 255 CINNAMON = 1; 256 DEEPIN = 2; 257 GNOME = 3; 258 KDE = 4; 259 PANTHEON = 5; 260 UKUI = 6; 261 UNITY = 7; 262 XFCE = 8; 263 LXQT = 9; 264 } 265 optional XdgCurrentDesktop xdg_current_desktop = 10; 266 } 267 optional OS os = 5; 268 269 // Information on the user's hardware. 270 // Next tag: 27 271 message Hardware { 272 // OS CPU architecture. Common options are: x86, x86_64, arm64, armv7, 273 // armv7l, armv8l and aarch64. 274 // Note: On Windows, this is not the true OS CPU architecture in the case 275 // of running under emulation (e.g. on Windows on ARM, which would report 276 // either x86 or x86_64, depending on the bitness of the exe being run). 277 // Started being correctly recorded on iOS in M90: crrev/c/2723012. 278 optional string cpu_architecture = 1; 279 280 // Browser process CPU architecture. Will be different from 281 // `cpu_architecture` in the case where Chromium runs non-natively (e.g. 282 // macOS Rosetta or Arm Windows). One of four values: x86, x86_64, ARM, 283 // ARM_64. Added in M90. 284 optional string app_cpu_architecture = 21; 285 286 // The amount of RAM present on the system, in megabytes. 287 optional int64 system_ram_mb = 2; 288 289 // The base memory address that chrome.dll was loaded at. 290 // (Logged only on Windows.) 291 optional int64 dll_base = 3; 292 293 // The hardware_class describes the current machine model, e.g. "MacPro1,1" 294 // on Mac, "iPhone9,3" on iOS or "Nexus 5" on Android. Implemented on OS X, 295 // iOS, Android, Chrome OS. 296 // 297 // The iOS device hardware class was added in Chrome M60 release. Prior 298 // to that, device hardware class was incorrectly recorded in 299 // cpu_architecture field. 300 // 301 // For Chrome OS, prior to M69, this field had the value that is 302 // currently in |full_hardware_class| field. In M69+, this contains the 303 // board name only. E.G. "CELES", "VEYRON_MINNIE". 304 305 optional string hardware_class = 4; 306 307 // This field is only sent on Chrome OS. The full hardware class is a unique 308 // string associated with each Chrome OS device product revision generally 309 // assigned at hardware qualification time. The hardware class effectively 310 // identifies the configured system components such as CPU, WiFi adapter, 311 // etc. 312 // 313 // An example of such a hardware class is "IEC MARIO PONY 6101". An 314 // internal database associates this hardware class with the qualified 315 // device specifications including OEM information, schematics, hardware 316 // qualification reports, test device tags, etc. 317 optional string full_hardware_class = 18; 318 319 // This field is only sent on Chrome OS devices with cellular support. 320 // This represents the variant of cellular modem present on the device. 321 optional string cellular_device_variant = 24; 322 323 // The number of physical screens. 324 optional int32 screen_count = 5; 325 326 // The screen dimensions of the primary screen, in pixels. 327 optional int32 primary_screen_width = 6; 328 optional int32 primary_screen_height = 7; 329 330 // The device scale factor of the primary screen. 331 optional float primary_screen_scale_factor = 12; 332 333 // Max DPI for any attached screen. (Windows only) 334 optional float max_dpi_x = 9; 335 optional float max_dpi_y = 10; 336 337 // The form factor of the device. Added in M101. 338 // Android devices can be phone, tablet, or TV. iOS devices can be phone or 339 // tablet. For Windows, Mac, ChromeOS, Lacros, and Linux, the desktop form 340 // factor is always used. 341 enum FormFactor { 342 FORM_FACTOR_UNKNOWN = 0; 343 FORM_FACTOR_DESKTOP = 1; 344 FORM_FACTOR_PHONE = 2; 345 FORM_FACTOR_TABLET = 3; 346 FORM_FACTOR_TV = 4; 347 FORM_FACTOR_MEET_DEVICE = 5; 348 FORM_FACTOR_AUTOMOTIVE = 6; 349 } 350 optional FormFactor form_factor = 22; 351 352 // Information on the CPU obtained by CPUID. 353 message CPU { 354 // A 12 character string naming the vendor, e.g. "GenuineIntel". 355 optional string vendor_name = 1; 356 357 // The signature reported by CPUID (from EAX). 358 optional uint32 signature = 2; 359 360 // Number of logical processors/cores on the current machine, which 361 // includes hyperthreaded cores. 362 optional uint32 num_cores = 3; 363 364 // Whether the CPU is running in a hypervisor. 365 optional bool is_hypervisor = 4; 366 } 367 optional CPU cpu = 13; 368 369 // Type of BIOS (can change at each boot). 370 enum BiosType { 371 BIOS_TYPE_UNKNOWN = 0; 372 // Legacy BIOS or UEFI with CSM mode. 373 BIOS_TYPE_LEGACY = 1; 374 // BIOS is UEFI and booted into UEFI mode. 375 BIOS_TYPE_UEFI = 2; 376 } 377 // Motherboard information. 378 message Motherboard { 379 // Manufacturer for the motherboard. 380 optional string manufacturer = 1; 381 // Model for the motherboard. 382 optional string model = 2; 383 // Manufacturer for the BIOS. 384 optional string bios_manufacturer = 3; 385 // Version of the BIOS currently installed. 386 optional string bios_version = 4; 387 // What mode of BIOS is booted. 388 optional BiosType bios_type = 5; 389 } 390 optional Motherboard motherboard = 25; 391 392 // Information on the GPU 393 message Graphics { 394 // The GPU manufacturer's vendor id. 395 optional uint32 vendor_id = 1; 396 397 // The GPU manufacturer's device id for the chip set. 398 optional uint32 device_id = 2; 399 400 // The driver version on the GPU. 401 optional string driver_version = 3; 402 403 // The GL_VENDOR string. An example of a gl_vendor string is 404 // "Imagination Technologies". "" if we are not using OpenGL. 405 optional string gl_vendor = 6; 406 407 // The GL_RENDERER string. An example of a gl_renderer string is 408 // "PowerVR SGX 540". "" if we are not using OpenGL. 409 optional string gl_renderer = 7; 410 } 411 optional Graphics gpu = 8; 412 413 // Whether the internal display produces touch events. Omitted if unknown. 414 // Logged on ChromeOS only. 415 optional bool internal_display_supports_touch = 14; 416 417 // Internal storage device information on ChromeOS. Added in M94. 418 // Next tag: 9 419 message InternalStorageDevice { 420 // Id of the storage device manufacturer. 421 // Can be vendor_id (for NVMe, 32bit), manfid (for eMMC, 16bit, since 422 // M113), oemid (for eMMC, 16bit, before M113), JEDEC manfid (for UFS, 423 // 16bit) etc. depending on the device type. 424 optional uint32 vendor_id = 1; 425 426 // Id of the storage device product. 427 // Can be product_id (for NVMe, 32bit), PNM (for eMMC, 48bit), hashed 428 // model name (for UFS, 32bit) etc. depending on the device type. 429 optional uint64 product_id = 2; 430 431 // Revision of the storage device product. 432 // Can be PCIe rev (for NVMe, 8bit), PRV(for eMMC, 8bit) etc. depending on 433 // the device type. 434 optional uint32 revision = 3; 435 436 // Storage Device model. Comes from /sys/block/<device>/device/model. 437 optional string model = 4; 438 439 // Storage Device capacity in MB. 440 optional uint32 size_mb = 5; 441 442 // 8 byte FW revision of a storage device. Usually a string, but may 443 // contain non-printable characters. 444 optional uint64 firmware_version = 6; 445 446 // Type of the storage device interface. 447 // TYPE_UNKNOWN signifies an error on population side. 448 enum Type { 449 TYPE_UNKNOWN = 0; 450 TYPE_EMMC = 1; 451 TYPE_NVME = 2; 452 TYPE_UFS = 3; 453 TYPE_SD_EXPRESS_INTERNAL = 4; 454 } 455 optional Type type = 7; 456 457 // Purpose defines how the OS uses the device. 458 // PURPOSE_UNKNOWN signifies an error on population side. 459 enum Purpose { 460 PURPOSE_UNKNOWN = 0; 461 PURPOSE_BOOT = 1; 462 PURPOSE_SWAP = 2; 463 PURPOSE_BOOT_SWAP = 3; 464 } 465 optional Purpose purpose = 8; 466 } 467 // List of internal storage devices on a Chrome OS device. 468 repeated InternalStorageDevice internal_storage_devices = 20; 469 470 // Drive messages are currently logged on Windows 7+, iOS, and Android. 471 message Drive { 472 // Whether this drive incurs a time penalty when randomly accessed. This 473 // should be true for spinning disks but false for SSDs or other 474 // flash-based drives. 475 optional bool has_seek_penalty = 1; 476 } 477 // The drive that the application executable was loaded from. 478 optional Drive app_drive = 16; 479 // The drive that the current user data directory was loaded from. 480 optional Drive user_data_drive = 17; 481 482 // Type of TPM on the device. This field is only filled in on ChromeOS 483 // devices (both CrOS and LaCrOS platforms). This includes Chromebooks with 484 // TPM1.2 or GSC (cr50 and ti50), flex devices (ChromeOS installed on 485 // devices with other OS) which has TPM type "runtime selection", and lastly 486 // generic TPM2 devices that use TPM2 chips that aren't manufactured by 487 // Google. 488 enum TpmType { 489 TPM_TYPE_UNKNOWN = 0; 490 TPM_TYPE_1 = 1; 491 TPM_TYPE_CR50 = 2; 492 TPM_TYPE_TI50 = 3; 493 TPM_TYPE_RUNTIME_SELECTION = 4; 494 TPM_TYPE_GENERIC_2 = 5; 495 } 496 optional TpmType tpm_type = 23; 497 498 // Firmware version of the TPM on the device. This field is only filled in 499 // on ChromeOS devices (both CrOS and LaCrOS platforms). 500 optional uint64 tpm_firmware_version = 26; 501 } 502 optional Hardware hardware = 6; 503 504 // Information about the network connection. 505 // Next tag: 9 506 message Network { 507 // Set to true if connection_type changed during the lifetime of the log. 508 optional bool connection_type_is_ambiguous = 1; 509 510 // Derived from net::NetworkChangeNotifier::ConnectionType translated 511 // through NetworkMetricsProvider::GetConnectionType. 512 enum ConnectionType { 513 CONNECTION_UNKNOWN = 0; 514 CONNECTION_ETHERNET = 1; 515 CONNECTION_WIFI = 2; 516 CONNECTION_2G = 3; 517 CONNECTION_3G = 4; 518 CONNECTION_4G = 5; 519 CONNECTION_BLUETOOTH = 6; 520 CONNECTION_NONE = 7; 521 // As an alternative to connection_type_is_ambiguous above, 522 // CONNECTION_AMBIGUOUS can be used for connection_type instead. This is 523 // to be used in logs processing as a more convenient way to manage the 524 // ambiguous case when breaking down stats by connection_type. 525 CONNECTION_AMBIGUOUS = 8; 526 CONNECTION_5G = 9; 527 } 528 // The connection type according to NetworkChangeNotifier. 529 optional ConnectionType connection_type = 2; 530 531 // Set to true if wifi_phy_layer_protocol changed during the lifetime of the 532 // log. 533 optional bool wifi_phy_layer_protocol_is_ambiguous = 3; 534 535 // See net::WifiPHYLayerProtocol. 536 enum WifiPHYLayerProtocol { 537 WIFI_PHY_LAYER_PROTOCOL_NONE = 0; 538 WIFI_PHY_LAYER_PROTOCOL_ANCIENT = 1; 539 WIFI_PHY_LAYER_PROTOCOL_A = 2; 540 WIFI_PHY_LAYER_PROTOCOL_B = 3; 541 WIFI_PHY_LAYER_PROTOCOL_G = 4; 542 WIFI_PHY_LAYER_PROTOCOL_N = 5; 543 WIFI_PHY_LAYER_PROTOCOL_UNKNOWN = 6; 544 WIFI_PHY_LAYER_PROTOCOL_AC = 7; 545 WIFI_PHY_LAYER_PROTOCOL_AD = 8; 546 WIFI_PHY_LAYER_PROTOCOL_AX = 9; 547 } 548 // The physical layer mode of the associated wifi access point, if any. 549 optional WifiPHYLayerProtocol wifi_phy_layer_protocol = 4; 550 551 // Derived from net::NetworkQualityEstimator::EffectiveConnectionType 552 // translated through NetworkMetricsProvider::GetConnectionType. 553 enum EffectiveConnectionType { 554 EFFECTIVE_CONNECTION_TYPE_UNKNOWN = 0; 555 // Deprecated: Specifies that the connection_type changed during the 556 // lifetime of the log. 557 DEPRECATED_EFFECTIVE_CONNECTION_TYPE_AMBIGUOUS = 1 [deprecated = true]; 558 EFFECTIVE_CONNECTION_TYPE_OFFLINE = 2; 559 EFFECTIVE_CONNECTION_TYPE_SLOW_2G = 3; 560 EFFECTIVE_CONNECTION_TYPE_2G = 4; 561 EFFECTIVE_CONNECTION_TYPE_3G = 5; 562 EFFECTIVE_CONNECTION_TYPE_4G = 6; 563 } 564 565 // The minimum and maximum values of the effective connection type enum 566 // during the lifetime of the log according to net::NetworkQualityEstimator. 567 // EffectiveConnectionType is the connection type whose typical performance 568 // is most similar to the measured performance of the network in use. In 569 // many cases, the "effective" connection type and the actual type of 570 // connection in use are the same, but often a network connection performs 571 // significantly differently, usually worse, from its expected capabilities. 572 optional EffectiveConnectionType min_effective_connection_type = 7; 573 optional EffectiveConnectionType max_effective_connection_type = 8; 574 } 575 optional Network network = 13; 576 577 // Information on the Google Update install that is managing this client. 578 message GoogleUpdate { 579 // Whether the Google Update install is system-level or user-level. 580 optional bool is_system_install = 1; 581 582 // The date at which Google Update last started performing an automatic 583 // update check, in seconds since the Unix epoch. 584 optional int64 last_automatic_start_timestamp = 2; 585 586 // The date at which Google Update last successfully sent an update check 587 // and received an intact response from the server, in seconds since the 588 // Unix epoch. (The updates don't need to be successfully installed.) 589 optional int64 last_update_check_timestamp = 3; 590 591 // Describes a product being managed by Google Update. (This can also 592 // describe Google Update itself.) 593 message ProductInfo { 594 // The current version of the product that is installed. 595 optional string version = 1; 596 597 // The date at which Google Update successfully updated this product, 598 // stored in seconds since the Unix epoch. This is updated when an update 599 // is successfully applied, or if the server reports that no update 600 // is available. 601 optional int64 last_update_success_timestamp = 2; 602 603 // The result reported by the product updater on its last run. 604 enum InstallResult { 605 INSTALL_RESULT_SUCCESS = 0; 606 INSTALL_RESULT_FAILED_CUSTOM_ERROR = 1; 607 INSTALL_RESULT_FAILED_MSI_ERROR = 2; 608 INSTALL_RESULT_FAILED_SYSTEM_ERROR = 3; 609 INSTALL_RESULT_EXIT_CODE = 4; 610 } 611 optional InstallResult last_result = 3; 612 613 // The error code reported by the product updater on its last run. This 614 // will typically be a error code specific to the product installer. 615 optional int32 last_error = 4; 616 617 // The extra error code reported by the product updater on its last run. 618 // This will typically be a Win32 error code. 619 optional int32 last_extra_error = 5; 620 } 621 optional ProductInfo google_update_status = 4; 622 optional ProductInfo client_status = 5; 623 } 624 optional GoogleUpdate google_update = 11; 625 626 // Figures that can be used to generate application stability metrics. 627 // All values are counts of events since the last time that these 628 // values were reported. 629 // Next tag: 32 630 message Stability { 631 // Total amount of time that the program was running, in seconds, 632 // since the last time a log was recorded, as measured using a client-side 633 // clock implemented via TimeTicks, which guarantees that it is monotonic 634 // and does not jump if the user changes their clock. The TimeTicks 635 // implementation also makes the clock not count time the computer is 636 // suspended. 637 optional int64 incremental_uptime_sec = 1; 638 639 // Total amount of time that the program was running, in seconds, 640 // since startup, as measured using a client-side clock implemented 641 // via TimeTicks, which guarantees that it is monotonic and does not 642 // jump if the user changes their clock. The TimeTicks implementation 643 // also makes the clock not count time the computer is suspended. 644 // This field was added for M-35. 645 optional int64 uptime_sec = 23; 646 647 // Logged on Android only as of late Q2 2022. Used by only Android WebView. 648 // Other platforms should use Stability.Counts2. 649 optional int32 page_load_count = 2; 650 651 // Logged on Android only as of Q2 2022. Used by only Android WebView. Other 652 // platforms should use Stability.Counts2. 653 optional int32 renderer_launch_count = 26; 654 655 // Number of times the browser has crashed while logged in as the "other 656 // user" (guest) account. 657 // Logged on ChromeOS only. 658 optional int32 other_user_crash_count = 7; 659 660 // Number of times the kernel has crashed. 661 // Logged on ChromeOS only. 662 optional int32 kernel_crash_count = 8; 663 664 // Number of times the system has shut down uncleanly. 665 // Logged on ChromeOS only. 666 optional int32 unclean_system_shutdown_count = 9; 667 668 // All the remaining fields in the Stability are recorded at most once per 669 // client session. 670 671 // The number of times the program was launched since the last time metrics 672 // was uploaded. For the initial metrics upload (right after startup), this 673 // will often be equal to 1. However, it is possible that Chrome was unable 674 // to upload stability metrics for previous launches (e.g. due to crashing 675 // early during startup), making this value greater than 1. For subsequent 676 // metrics uploads, this value will be 0. 677 // 678 // Logged on Android only as of Q1 2022. Used by only Android WebView. Other 679 // platforms should use Stability.Counts2. 680 optional int32 launch_count = 15; 681 // Android only. The number of times Chrome didn't exit cleanly and the GMS 682 // Core version has changed from the last session. This is in addition to 683 // |crash_count| in which we exclude unclean exits that are likely caused by 684 // GMS Core updates. 685 optional int32 crash_count_due_to_gms_core_update = 30; 686 687 // Whether the metrics being reported are from a previous run picked up via 688 // the left-over memory mapped files. 689 optional bool from_previous_run = 29; 690 } 691 optional Stability stability = 8; 692 693 // Description of a field trial or experiment that the user is currently 694 // enrolled in. 695 // All metrics reported in this upload can potentially be influenced by the 696 // field trial. 697 message FieldTrial { 698 // The name of the field trial, as a 32-bit identifier. 699 // Currently, the identifier is a hash of the field trial's name. 700 optional fixed32 name_id = 1; 701 702 // The user's group within the field trial, as a 32-bit identifier. 703 // Currently, the identifier is a hash of the group's name. 704 optional fixed32 group_id = 2; 705 } 706 repeated FieldTrial field_trial = 9; 707 708 // Seed version from variations_seed.proto used to instantiate FieldTrials 709 // for this session. 710 optional string variations_seed_version = 28; 711 712 // Whether the client_id in the log matches the client_id we used to assign 713 // field trials. 714 optional bool client_id_was_used_for_trial_assignment = 33; 715 716 // The unhashed client_id for this report. This is a uuid in its canonical 717 // textual representation in the form 8-4-4-4-12 for a total of 36 characters. 718 // Used to simulate field trial assignments for the client. 719 optional string client_uuid = 34; 720 721 // Information about the A/V output device(s) (typically just a TV). 722 // However, a configuration may have one or more intermediate A/V devices 723 // between the source device and the TV (e.g. an A/V receiver, video 724 // processor, etc.). 725 message ExternalAudioVideoDevice { 726 // The manufacturer name (possibly encoded as a 3-letter code, e.g. "YMH" 727 // for Yamaha). 728 optional string manufacturer_name = 1; 729 730 // The model name (e.g. "RX-V1900"). Some devices may report generic names 731 // like "receiver" or use the full manufacturer name (e.g "PHILIPS"). 732 optional string model_name = 2; 733 734 // The product code (e.g. "0218"). 735 optional string product_code = 3; 736 737 // The device types. A single device can have multiple types (e.g. a set-top 738 // box could be both a tuner and a player). The same type may even be 739 // repeated (e.g a device that reports two tuners). 740 enum AVDeviceType { 741 AV_DEVICE_TYPE_UNKNOWN = 0; 742 AV_DEVICE_TYPE_TV = 1; 743 AV_DEVICE_TYPE_RECORDER = 2; 744 AV_DEVICE_TYPE_TUNER = 3; 745 AV_DEVICE_TYPE_PLAYER = 4; 746 AV_DEVICE_TYPE_AUDIO_SYSTEM = 5; 747 } 748 repeated AVDeviceType av_device_type = 4; 749 750 // The year of manufacture. 751 optional int32 manufacture_year = 5; 752 753 // The week of manufacture. 754 // Note: per the Wikipedia EDID article, numbering for this field may not 755 // be consistent between manufacturers. 756 optional int32 manufacture_week = 6; 757 758 // Selected horizontal resolution in pixels. 759 optional int32 horizontal_resolution = 7; 760 761 // Selected vertical resolution in pixels. 762 optional int32 vertical_resolution = 8; 763 764 // Audio capabilities of the device. 765 // Ref: http://en.wikipedia.org/wiki/Extended_display_identification_data 766 // Next tag: 7 767 message AudioDescription { 768 // Audio format 769 enum AudioFormat { 770 AUDIO_FORMAT_UNKNOWN = 0; 771 AUDIO_FORMAT_LPCM = 1; 772 AUDIO_FORMAT_AC_3 = 2; 773 AUDIO_FORMAT_MPEG1 = 3; 774 AUDIO_FORMAT_MP3 = 4; 775 AUDIO_FORMAT_MPEG2 = 5; 776 AUDIO_FORMAT_AAC = 6; 777 AUDIO_FORMAT_DTS = 7; 778 AUDIO_FORMAT_ATRAC = 8; 779 AUDIO_FORMAT_ONE_BIT = 9; 780 AUDIO_FORMAT_DD_PLUS = 10; 781 AUDIO_FORMAT_DTS_HD = 11; 782 AUDIO_FORMAT_MLP_DOLBY_TRUEHD = 12; 783 AUDIO_FORMAT_DST_AUDIO = 13; 784 AUDIO_FORMAT_MICROSOFT_WMA_PRO = 14; 785 } 786 optional AudioFormat audio_format = 1; 787 788 // Number of channels (e.g. 1, 2, 8, etc.). 789 optional int32 num_channels = 2; 790 791 // Supported sample frequencies in Hz (e.g. 32000, 44100, etc.). 792 // Multiple frequencies may be specified. 793 repeated int32 sample_frequency_hz = 3; 794 795 // Maximum bit rate in bits/s. 796 optional int32 max_bit_rate_per_second = 4; 797 798 // Bit depth (e.g. 16, 20, 24, etc.). 799 optional int32 bit_depth = 5; 800 801 // Output mode: analog vs digital. 802 enum OutputMode { 803 ANALOG = 0; 804 DIGITAL = 1; 805 } 806 optional OutputMode output_mode = 6; 807 } 808 repeated AudioDescription audio_description = 9; 809 810 // The position in AV setup. 811 // A value of 0 means this device is the TV. 812 // A value of 1 means this device is directly connected to one of 813 // the TV's inputs. 814 // Values > 1 indicate there are 1 or more devices between this device 815 // and the TV. 816 optional int32 position_in_setup = 10; 817 818 // Whether this device is in the path to the TV. 819 optional bool is_in_path_to_tv = 11; 820 821 // The CEC version the device supports. 822 // CEC stands for Consumer Electronics Control, a part of the HDMI 823 // specification. Not all HDMI devices support CEC. 824 // Only devices that support CEC will report a value here. 825 optional int32 cec_version = 12; 826 827 // This message reports CEC commands seen by a device. 828 // After each log is sent, this information is cleared and gathered again. 829 // By collecting CEC status information by opcode we can determine 830 // which CEC features can be supported. 831 message CECCommand { 832 // The CEC command opcode. CEC supports up to 256 opcodes. 833 // We add only one CECCommand message per unique opcode. Only opcodes 834 // seen by the device will be reported. The remainder of the message 835 // accumulates status for this opcode (and device). 836 optional int32 opcode = 1; 837 838 // The total number of commands received from the external device. 839 optional int32 num_received_direct = 2; 840 841 // The number of commands received from the external device as part of a 842 // broadcast message. 843 optional int32 num_received_broadcast = 3; 844 845 // The total number of commands sent to the external device. 846 optional int32 num_sent_direct = 4; 847 848 // The number of commands sent to the external device as part of a 849 // broadcast message. 850 optional int32 num_sent_broadcast = 5; 851 852 // The number of aborted commands for unknown reasons. 853 optional int32 num_aborted_unknown_reason = 6; 854 855 // The number of aborted commands because of an unrecognized opcode. 856 optional int32 num_aborted_unrecognized = 7; 857 } 858 repeated CECCommand cec_command = 13; 859 860 // Selected Frame rate 861 optional int32 frame_rate = 14; 862 863 // Selected color encoding. 864 enum ColorEncoding { 865 COLOR_ENCODING_UNKNOWN = 0; 866 COLOR_ENCODING_RGB = 1; 867 COLOR_ENCODING_YUV444 = 2; 868 COLOR_ENCODING_YUV422 = 3; 869 COLOR_ENCODING_YUV420 = 4; 870 } 871 optional ColorEncoding color_encoding = 15; 872 873 // Selected bit-depth. 874 optional int32 bit_depth = 16; 875 876 // Devices's max TMDS char rate. 877 optional int32 tmds = 17; 878 879 // HDR10 support. 880 optional bool hdr10_support = 18; 881 882 // Dolby vision support. 883 optional bool dolby_vision_support = 19; 884 885 // Supported EOTF's. 886 // EOTF support according to the spec: 887 // eotf_support & 0x1 -> SDR supported 888 // (eotf_support > 1) & 0x1 -> traditional HDR supported 889 // (eotf_support > 2) & 0x1 -> ST2084 supported 890 optional int32 eotf_support = 20; 891 892 // Supports YUV. 893 optional bool yuv_support = 21; 894 895 // Supports YUV_420. 896 optional bool yuv_420_support = 22; 897 898 // The maximum HDCP version supported by the sink. 899 optional int32 maximum_supported_hdcp_version = 23; 900 901 // The current HDCP version negotiated with the sink. 902 optional int32 current_hdcp_version = 24; 903 } 904 repeated ExternalAudioVideoDevice external_audio_video_device = 14; 905 906 // Information about the current wireless access point. Collected directly 907 // from the wireless access point via standard apis if the device is 908 // connected to the Internet wirelessly. Introduced for Chrome on TV devices 909 // but also can be collected by cast devices running Chrome OS and Android. 910 // Not logged by Chrome browser platforms. 911 message ExternalAccessPoint { 912 // The manufacturer name, for example "ASUSTeK Computer Inc.". 913 optional string manufacturer = 1; 914 915 // The model name, for example "Wi-Fi Protected Setup Router". 916 optional string model_name = 2; 917 918 // The model number, for example "RT-N16". 919 optional string model_number = 3; 920 921 // The device name (sometime same as model_number), for example "RT-N16". 922 optional string device_name = 4; 923 924 // The organizationally unique identifier, for example "08:9E:08". 925 // OUI is the highest three bytes of MAC address 926 // Google's OUI (08:9E:08) is encoded as 0x00089E08 927 // Never recorded server side, but some old clients may send values with 928 // this tag. 929 reserved 5; 930 } 931 optional ExternalAccessPoint external_access_point = 15; 932 933 // Number of users currently signed into a multiprofile session. 934 // A zero value indicates that the user count changed while the log is open. 935 // Logged only on ChromeOS. 936 optional uint32 multi_profile_user_count = 17; 937 938 // Information about extensions that are installed, masked to provide better 939 // privacy. Only extensions from a single profile are reported; this will 940 // generally be the profile used when the browser is started. The profile 941 // reported on will remain consistent at least until the browser is 942 // relaunched (or the profile is deleted by the user). 943 // 944 // Each client first picks a value for client_key derived from its UMA 945 // client_id: 946 // client_key = client_id % 4096 947 // Then, each installed extension is mapped into a hash bucket according to 948 // bucket = CityHash64(StringPrintf("%d:%s", 949 // client_key, extension_id)) % 1024 950 // The client reports the set of hash buckets occupied by all installed 951 // extensions. If multiple extensions map to the same bucket, that bucket is 952 // still only reported once. 953 repeated int32 occupied_extension_bucket = 18; 954 955 // The state of loaded extensions for this system. The system can have either 956 // no applicable extensions, extensions only from the webstore and verified by 957 // the webstore, extensions only from the webstore but not verified, or 958 // extensions not from the store. If there is a single off-store extension, 959 // then HAS_OFFSTORE is reported. This should be kept in sync with the 960 // corresponding enum in chrome/browser/metrics/extensions_metrics_provider.cc 961 enum ExtensionsState { 962 NO_EXTENSIONS = 0; 963 NO_OFFSTORE_VERIFIED = 1; 964 NO_OFFSTORE_UNVERIFIED = 2; 965 HAS_OFFSTORE = 3; 966 } 967 optional ExtensionsState offstore_extensions_state = 19; 968 969 // The nature of the choice the user was given concerning metrics recording. 970 // Specifically, whether the enable metrics/crash reporting checkbox that was 971 // shown on first run was checked or unchecked by default. 972 // This state is recorded on first run, and uploaded in every UMA log. 973 enum UmaDefaultState { 974 // The enable checkbox was unchecked by default. 975 OPT_IN = 0; 976 // The enable checkbox was checked by default. 977 OPT_OUT = 1; 978 // Policy mandated that UMA be enabled, the user had no choice. 979 POLICY_FORCED_ENABLED = 2; 980 // The client has no record of which consent flow was used. 981 OPT_UNKNOWN = 3; 982 } 983 optional UmaDefaultState uma_default_state = 22; 984 985 enum AntiVirusState { 986 // The security product software is turned on and protecting the user. 987 STATE_ON = 0; 988 // The security product software is turned off and protection is disabled. 989 STATE_OFF = 1; 990 // The security product software is in the snoozed state, temporarily off, 991 // and not actively protecting the computer. 992 STATE_SNOOZED = 2; 993 // The security product software has expired and is no longer actively 994 // protecting the computer. 995 STATE_EXPIRED = 3; 996 } 997 998 // Information about AntiVirus products installed. 999 // Next Tag: 6 1000 message AntiVirusProduct { 1001 // The product name e.g. "System Center Endpoint Protection". This might not 1002 // be recorded, see ShouldReportFullNames() in 1003 // chrome/browser/metrics/antivirus_metrics_provider_win.cc. 1004 optional string product_name = 1; 1005 1006 // The hash of the product name. 1007 optional fixed32 product_name_hash = 2; 1008 1009 // The version of the product, as read from the file information. This might 1010 // not be recorded, see ShouldReportFullNames() in 1011 // chrome/browser/metrics/antivirus_metrics_provider_win.cc. 1012 optional string product_version = 3; 1013 1014 // The hash of the product version. Might not be set if the product version 1015 // could not be obtained from the disk. 1016 optional fixed32 product_version_hash = 4; 1017 1018 // The current state of the product. 1019 optional AntiVirusState product_state = 5; 1020 } 1021 repeated AntiVirusProduct antivirus_product = 23; 1022 1023 enum ComponentId { 1024 // The client transmitted a component ID the server does not recognize. 1025 UNKNOWN = 1; 1026 1027 // All the following are various components. 1028 FILE_TYPE_POLICIES = 2; 1029 ORIGIN_TRIALS = 3; 1030 PEPPER_FLASH = 4; 1031 PEPPER_FLASH_CHROMEOS = 5; 1032 PNACL = 6; 1033 RECOVERY = 7; 1034 SSL_ERROR_ASSISTANT = 8; 1035 STH_SET = 9; 1036 CRL_SET = 10; 1037 SUBRESOURCE_FILTER = 11; 1038 SW_REPORTER = 12; 1039 // Software Decryption CDM on all platforms of Chrome 1040 WIDEVINE_CDM = 13; 1041 EPSON_INKJET_PRINTER_ESCPR = 14; 1042 CROS_TERMINA = 15; 1043 STAR_CUPS_DRIVER = 16; 1044 SPEECH_SYNTHESIS_SV_SE = 17; 1045 OPTIMIZATION_HINTS = 18; 1046 DOWNLOADABLE_STRINGS = 19; 1047 VR_ASSETS = 20; 1048 RTANALYTICS_LIGHT = 21; 1049 RTANALYTICS_FULL = 22; 1050 CELLULAR = 23; 1051 DEMO_MODE_RESOURCES = 24; 1052 ON_DEVICE_HEAD_SUGGEST = 25; 1053 CROS_SMART_DIM = 26; 1054 ZXCVBN_DATA = 27; 1055 AUTOFILL_REGEX_CONSTANTS = 28; 1056 WEBVIEW_APPS_PACKAGE_NAMES_ALLOWLIST = 29; 1057 // Hardware Decryption CDM only for Chrome on Windows. 1058 MEDIA_FOUNDATION_WIDEVINE_CDM = 30; 1059 CROWD_DENY = 31; 1060 APP_PROVISIONING = 32; 1061 AUTOFILL_STATES = 33; 1062 CLIENT_SIDE_PHISHING = 34; 1063 COMMERCE_HEURISTICS = 35; 1064 CROW_DOMAIN_LIST = 36; 1065 DEMO_MODE_APP = 37; 1066 DESKTOP_SCREENSHOT_EDITOR = 38; 1067 DESKTOP_SHARING_HUB = 39; 1068 FIRST_PARTY_SETS = 40; 1069 HYPHENATION = 41; 1070 INTERVENTION_POLICY_DATABASE = 42; 1071 LACROS_DOGFOOD_BETA = 43; 1072 LACROS_DOGFOOD_CANARY = 44; 1073 LACROS_DOGFOOD_DEV = 45; 1074 LACROS_DOGFOOD_STABLE = 46; 1075 MEI_PRELOAD = 47; 1076 PKI_METADATA = 48; 1077 REAL_TIME_URL_CHECKS_ALLOWLIST = 49; 1078 RECOVERY_IMPROVED = 50; 1079 SAFETY_TIPS = 51; 1080 SCREEN_AI = 52; 1081 SMART_DIM = 53; 1082 SODA = 54; 1083 SODA_DE_DE = 55; 1084 SODA_EN_US = 56; 1085 SODA_ES_ES = 57; 1086 SODA_FR_FR = 58; 1087 SODA_IT_IT = 59; 1088 SODA_JA_JP = 60; 1089 THIRD_PARTY_MODULE_LIST = 61; 1090 TRUST_TOKEN_KEY_COMMITMENTS = 62; 1091 } 1092 1093 // Information about what Chrome components are registered and at which 1094 // version. 1095 // Next Tag: 5 1096 message ChromeComponent { 1097 // Which component this information is for. 1098 optional ComponentId component_id = 1 [default = UNKNOWN]; 1099 1100 // Human-readable dotted-quad representation of the currently-installed 1101 // version of the component, e.g. "1.2.3.4". 1102 optional string version = 2; 1103 1104 // The first 32 bits of the Omaha-style fingerprint of the installed 1105 // component, discarding any bits that describe the fingerprint format. In 1106 // practice this is the first 32 bits of the SHA256 hash of the package that 1107 // was installed as the component. It is a stronger version number that can 1108 // vary across platform, architecture, or branches of an A/B component test. 1109 optional fixed32 omaha_fingerprint = 3; 1110 1111 // A hash of the cohort identifier of this component, excluding 1112 // non-assignment information. The hash function is Chromium's 1113 // PersistentHash. 1114 optional fixed32 cohort_hash = 4; 1115 } 1116 repeated ChromeComponent chrome_component = 24; 1117 1118 // Information about the user's installed extensions. This will include 1119 // extensions from all fully-initialized profiles. If a single extension is 1120 // installed in multiple profiles, it will be recorded multiple times. 1121 repeated ExtensionInstallProto extension_install = 25; 1122 1123 // Android-only. 1124 // For Chrome UMA records, this field contains the package name of the 1125 // version of Chrome that is running if it's different from 1126 // "com.android.chrome". ("com.android.chrome" is the name of the Chrome 1127 // stable channel app package name.) 1128 // For WebView UMA records, under some conditions this field contains the 1129 // package name of the currently-running app. See http://shortn/_5HRGU153JL 1130 // for details. 1131 optional string app_package_name = 26; 1132 1133 // Indicates if the `app_package_name` should be filtered out on the 1134 // server-side. The client will use this to signal no further filtering is 1135 // required if filtering is enabled on the client-side. If the package name is 1136 // a system app and the server-side filtering is enabled, the client will use 1137 // this to indicate no filtering is required since system apps are not subject 1138 // to filtering. Only recorded on the Android WebView platform. 1139 enum AppPackageNameAllowlistFilter { 1140 // Indicates the package name filtering was not set. 1141 // This will be the case with data coming from old WebView versions. 1142 SERVER_SIDE_FILTER_UNSPECIFIED = 0; 1143 // Indicates the package name filtering should occur on the server-side 1144 SERVER_SIDE_FILTER_REQUIRED = 1; 1145 // Indicates the `app_package_name` does not need filtering since filtering 1146 // occurred on the client-side. 1147 NO_SERVER_SIDE_FILTER_REQUIRED_DUE_TO_CLIENT_FILTERING = 2; 1148 // Indicates the `app_package_name` does not need filtering since it is 1149 // a system app. 1150 NO_SERVER_SIDE_FILTER_REQUIRED_FOR_SYSTEM_APPS = 3; 1151 } 1152 1153 optional AppPackageNameAllowlistFilter app_package_name_allowlist_filter = 42; 1154 1155 enum ClientSideSamplingStatus { 1156 // Default value, no conclusion can be drawn. 1157 SAMPLING_UNKNOWN = 0; 1158 // Client-side sampling was applied. 1159 SAMPLING_APPLIED = 1; 1160 // Client-side sampling was not applied. 1161 SAMPLING_NOT_APPLIED = 2; 1162 } 1163 1164 // Specifies whether sampling was applied on the client. Older clients will 1165 // not set this field, which will result in the default value of UNKNOWN. 1166 optional ClientSideSamplingStatus client_side_sampling_status = 43; 1167 1168 // The package which installed Chrome, as reported by 1169 // PackageManager.getInstallerPackageName(). 1170 enum InstallerPackage { 1171 // This field was not set. 1172 INSTALLER_PACKAGE_UNKNOWN = 0; 1173 // The installer package name returned by Android was empty. 1174 INSTALLER_PACKAGE_NONE = 1; 1175 // 'com.android.vending'. 1176 INSTALLER_PACKAGE_GOOGLE_PLAY_STORE = 2; 1177 // Any other non-empty value. 1178 INSTALLER_PACKAGE_OTHER = 3; 1179 } 1180 1181 // The package which installed Chrome, as reported by Android. 1182 optional InstallerPackage installer_package = 35; 1183 1184 // Data related to the "Better Together" multi-device features. This is only 1185 // uploaded on Chrome OS. 1186 // Next Tag: 5 1187 message LinkedAndroidPhoneData { 1188 // The pii-free model name of the phone used for Better Together with this 1189 // device. Will not be set if Better Together is not set up. Hashed using 1190 // variations::HashName() to produce a 32-bit SHA1 hash. 1191 optional fixed32 phone_model_name_hash = 1; 1192 1193 // True if SmartLock is enabled on this Chromebook. 1194 optional bool is_smartlock_enabled = 2; 1195 1196 // True if Instant Tethering is enabled on this Chromebook. 1197 optional bool is_instant_tethering_enabled = 3; 1198 1199 // True if Messages integration is enabled on this Chromebook. 1200 optional bool is_messages_enabled = 4; 1201 } 1202 optional LinkedAndroidPhoneData linked_android_phone_data = 29; 1203 1204 // Demo mode related dimension information. 1205 // Next Tag: 4 1206 message DemoModeDimensions { 1207 optional string country = 1; 1208 1209 // Demo devices retailer id and store id, value is set during demo setup. 1210 // Next Tag: 3 1211 message Retailer { 1212 optional string retailer_id = 1; 1213 optional string store_id = 2; 1214 } 1215 optional Retailer retailer = 2; 1216 1217 enum CustomizationFacet { 1218 UNDEFINED = 0; 1219 CLOUD_GAMING_DEVICE = 1; 1220 } 1221 repeated CustomizationFacet customization_facet = 3 [packed = true]; 1222 } 1223 optional DemoModeDimensions demo_mode_dimensions = 41; 1224} 1225