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