|  | // Copyright 2014 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  | // | 
|  | // Stores information about the user's brower and system configuration. | 
|  | // The system configuration fields are recorded once per client session. | 
|  |  | 
|  | syntax = "proto2"; | 
|  |  | 
|  | option optimize_for = LITE_RUNTIME; | 
|  | option java_outer_classname = "SystemProfileProtos"; | 
|  | option java_package = "org.chromium.components.metrics"; | 
|  |  | 
|  | package metrics; | 
|  |  | 
|  | // Next tag: 24 | 
|  | 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. | 
|  | // Most commonly this is the browser version number found in a user agent | 
|  | // string, and is typically a 4-tuple of numbers separated by periods.  In | 
|  | // cases where the user agent version might be ambiguous (example: Linux 64- | 
|  | // bit build, rather than 32-bit build, or a Windows version used in some | 
|  | // special context, such as ChromeFrame running in IE), then this may include | 
|  | // some additional postfix to provide clarification not available in the UA | 
|  | // string. | 
|  | // | 
|  | // An example of a browser version 4-tuple is "5.0.322.0".  Currently used | 
|  | // postfixes are: | 
|  | // | 
|  | //   "-64": a 64-bit build | 
|  | //   "-F": Chrome is running under control of ChromeFrame | 
|  | //   "-devel": this is not an official build of Chrome | 
|  | // | 
|  | // A full version number string could look similar to: | 
|  | // "5.0.322.0-F-devel". | 
|  | // | 
|  | // This value, when available, is more trustworthy than the UA string | 
|  | // associated with the request; and including the postfix, may be more | 
|  | // specific. | 
|  | optional string app_version = 2; | 
|  |  | 
|  | // The brand code or distribution tag assigned to a partner, if available. | 
|  | // Brand codes are only available on Windows.  Not every Windows install | 
|  | // though will have a brand code. | 
|  | optional string brand_code = 12; | 
|  |  | 
|  | // The possible channels for an installation, from least to most stable. | 
|  | 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 if Chrome build is ASan-instrumented. | 
|  | optional bool is_asan_build = 20 [default = false]; | 
|  |  | 
|  | // 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. | 
|  | 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; | 
|  |  | 
|  | // 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; | 
|  |  | 
|  | // Information on the user's operating system. | 
|  | message OS { | 
|  | // The user's operating system. This should be one of: | 
|  | // - Android | 
|  | // - Windows NT | 
|  | // - Linux (includes ChromeOS) | 
|  | // - iPhone OS | 
|  | // - 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.  This field is used only on Android. | 
|  | optional string fingerprint = 3; | 
|  |  | 
|  | // Whether the version of iOS appears to be "jailbroken". This field is | 
|  | // used only on iOS. Chrome for iOS detects whether device contains a | 
|  | // DynamicLibraries/ directory. It's a necessary but insufficient indicator | 
|  | // of whether the operating system has been jailbroken. | 
|  | optional bool is_jailbroken = 4; | 
|  | } | 
|  | optional OS os = 5; | 
|  |  | 
|  | // Next tag for Hardware: 18 | 
|  | // Information on the user's hardware. | 
|  | message Hardware { | 
|  | // The CPU architecture (x86, PowerPC, x86_64, ...) | 
|  | optional string cpu_architecture = 1; | 
|  |  | 
|  | // 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, or "Nexus 5" on Android. Only implemented on OS X, Android, and | 
|  | // Chrome OS. | 
|  | // | 
|  | // For Chrome OS, the device hardware class ID 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 hardware_class = 4; | 
|  |  | 
|  | // 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; | 
|  |  | 
|  | // Information on the CPU obtained by CPUID. | 
|  | message CPU { | 
|  | // A 12 character string naming the vendor, e.g. "GeniuneIntel". | 
|  | 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. | 
|  | optional uint32 num_cores = 3; | 
|  | } | 
|  | optional CPU cpu = 13; | 
|  |  | 
|  | // 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 driver date on the GPU. | 
|  | optional string driver_date = 4; | 
|  |  | 
|  | // 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; | 
|  |  | 
|  | // Information about Bluetooth devices paired with the system. | 
|  | message Bluetooth { | 
|  | // Whether Bluetooth is present on this system. | 
|  | optional bool is_present = 1; | 
|  |  | 
|  | // Whether Bluetooth is enabled on this system. | 
|  | optional bool is_enabled = 2; | 
|  |  | 
|  | // Describes a paired device. | 
|  | message PairedDevice { | 
|  | // Assigned class of the device. This is a bitfield according to the | 
|  | // Bluetooth specification available at the following URL: | 
|  | // https://www.bluetooth.org/en-us/specification/assigned-numbers-overview/baseband | 
|  | optional uint32 bluetooth_class = 1; | 
|  |  | 
|  | // Decoded device type. | 
|  | enum Type { | 
|  | DEVICE_UNKNOWN = 0; | 
|  | DEVICE_COMPUTER = 1; | 
|  | DEVICE_PHONE = 2; | 
|  | DEVICE_MODEM = 3; | 
|  | DEVICE_AUDIO = 4; | 
|  | DEVICE_CAR_AUDIO = 5; | 
|  | DEVICE_VIDEO = 6; | 
|  | DEVICE_PERIPHERAL = 7; | 
|  | DEVICE_JOYSTICK = 8; | 
|  | DEVICE_GAMEPAD = 9; | 
|  | DEVICE_KEYBOARD = 10; | 
|  | DEVICE_MOUSE = 11; | 
|  | DEVICE_TABLET = 12; | 
|  | DEVICE_KEYBOARD_MOUSE_COMBO = 13; | 
|  | } | 
|  | optional Type type = 2; | 
|  |  | 
|  | // Vendor prefix of the Bluetooth address, these are OUI registered by | 
|  | // the IEEE and are encoded with the first byte in bits 16-23, the | 
|  | // second byte in bits 8-15 and the third byte in bits 0-7. | 
|  | // | 
|  | // ie. Google's OUI (00:1A:11) is encoded as 0x00001A11 | 
|  | optional uint32 vendor_prefix = 4; | 
|  |  | 
|  | // The Vendor ID of a device, returned in vendor_id below, can be | 
|  | // either allocated by the Bluetooth SIG or USB IF, providing two | 
|  | // completely overlapping namespaces for identifiers. | 
|  | // | 
|  | // This field should be read along with vendor_id to correctly | 
|  | // identify the vendor. For example Google is identified by either | 
|  | // vendor_id_source = VENDOR_ID_BLUETOOTH, vendor_id = 0x00E0 or | 
|  | // vendor_id_source = VENDOR_ID_USB, vendor_id = 0x18D1. | 
|  | // | 
|  | // If the device does not support the Device ID specification the | 
|  | // unknown value will be set. | 
|  | enum VendorIDSource { | 
|  | VENDOR_ID_UNKNOWN = 0; | 
|  | VENDOR_ID_BLUETOOTH = 1; | 
|  | VENDOR_ID_USB = 2; | 
|  | } | 
|  | optional VendorIDSource vendor_id_source = 8; | 
|  |  | 
|  | // Vendor ID of the device, where available. | 
|  | optional uint32 vendor_id = 5; | 
|  |  | 
|  | // Product ID of the device, where available. | 
|  | optional uint32 product_id = 6; | 
|  |  | 
|  | // Device ID of the device, generally the release or version number in | 
|  | // BCD format, where available. | 
|  | optional uint32 device_id = 7; | 
|  | } | 
|  | repeated PairedDevice paired_device = 3; | 
|  | } | 
|  | optional Bluetooth bluetooth = 11; | 
|  |  | 
|  | // Whether the internal display produces touch events. Omitted if unknown. | 
|  | // Logged on ChromeOS only. | 
|  | optional bool internal_display_supports_touch = 14; | 
|  |  | 
|  | // Vendor ids and product ids of external touchscreens. | 
|  | message TouchScreen { | 
|  | // Touch screen vendor id. | 
|  | optional uint32 vendor_id = 1; | 
|  | // Touch screen product id. | 
|  | optional uint32 product_id = 2; | 
|  | } | 
|  | // Lists vendor and product ids of external touchscreens. | 
|  | // Logged on ChromeOS only. | 
|  | repeated TouchScreen external_touchscreen = 15; | 
|  |  | 
|  | // 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; | 
|  | } | 
|  | optional Hardware hardware = 6; | 
|  |  | 
|  | // Information about the network connection. | 
|  | 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; | 
|  | } | 
|  | // The connection type according to NetworkChangeNotifier. | 
|  | optional ConnectionType connection_type = 2; | 
|  |  | 
|  | // Set to true if wifi_phy_layer_protocol changed during the lifetime of the log. | 
|  | optional bool wifi_phy_layer_protocol_is_ambiguous = 3; | 
|  |  | 
|  | // See net::WifiPHYLayerProtocol. | 
|  | enum WifiPHYLayerProtocol { | 
|  | WIFI_PHY_LAYER_PROTOCOL_NONE = 0; | 
|  | WIFI_PHY_LAYER_PROTOCOL_ANCIENT = 1; | 
|  | WIFI_PHY_LAYER_PROTOCOL_A = 2; | 
|  | WIFI_PHY_LAYER_PROTOCOL_B = 3; | 
|  | WIFI_PHY_LAYER_PROTOCOL_G = 4; | 
|  | WIFI_PHY_LAYER_PROTOCOL_N = 5; | 
|  | WIFI_PHY_LAYER_PROTOCOL_UNKNOWN = 6; | 
|  | } | 
|  | // The physical layer mode of the associated wifi access point, if any. | 
|  | optional WifiPHYLayerProtocol wifi_phy_layer_protocol = 4; | 
|  |  | 
|  | // Describe wifi access point information. | 
|  | message WifiAccessPoint { | 
|  | // Vendor prefix of the access point's BSSID, these are OUIs | 
|  | // (Organizationally Unique Identifiers) registered by | 
|  | // the IEEE and are encoded with the first byte in bits 16-23, the | 
|  | // second byte in bits 8-15 and the third byte in bits 0-7. | 
|  | optional uint32 vendor_prefix = 1; | 
|  |  | 
|  | // Access point seurity mode definitions. | 
|  | enum SecurityMode { | 
|  | SECURITY_UNKNOWN = 0; | 
|  | SECURITY_WPA = 1; | 
|  | SECURITY_WEP = 2; | 
|  | SECURITY_RSN = 3; | 
|  | SECURITY_802_1X = 4; | 
|  | SECURITY_PSK = 5; | 
|  | SECURITY_NONE = 6; | 
|  | } | 
|  | // The security mode of the access point. | 
|  | optional SecurityMode security_mode = 2; | 
|  |  | 
|  | // Vendor specific information. | 
|  | message VendorInformation { | 
|  | // The model number, for example "0". | 
|  | optional string model_number = 1; | 
|  |  | 
|  | // The model name (sometimes the same as the model_number), | 
|  | // for example "WZR-HP-AG300H". | 
|  | optional string model_name = 2; | 
|  |  | 
|  | // The device name (sometimes the same as the model_number), | 
|  | // for example "Dummynet" | 
|  | optional string device_name = 3; | 
|  |  | 
|  | // The list of vendor-specific OUIs (Organziationally Unqiue | 
|  | // Identifiers). These are provided by the vendor through WPS | 
|  | // (Wireless Provisioning Service) information elements, which | 
|  | // identifies the content of the element. | 
|  | repeated uint32 element_identifier = 4; | 
|  | } | 
|  | // The wireless access point vendor information. | 
|  | optional VendorInformation vendor_info = 3; | 
|  | } | 
|  | // Information of the wireless AP that device is connected to. | 
|  | optional WifiAccessPoint access_point_info = 5; | 
|  | } | 
|  | 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 recieved 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; | 
|  |  | 
|  | // Information on all installed plugins. | 
|  | message Plugin { | 
|  | // The plugin's self-reported name and filename (without path). | 
|  | optional string name = 1; | 
|  | optional string filename = 2; | 
|  |  | 
|  | // The plugin's version. | 
|  | optional string version = 3; | 
|  |  | 
|  | // True if the plugin is disabled. | 
|  | // If a client has multiple local Chrome user accounts, this is logged based | 
|  | // on the first user account launched during the current session. | 
|  | optional bool is_disabled = 4; | 
|  |  | 
|  | // True if the plugin is PPAPI. | 
|  | optional bool is_pepper = 5; | 
|  | } | 
|  | repeated Plugin plugin = 7; | 
|  |  | 
|  | // 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: 28 | 
|  | message Stability { | 
|  | // Total amount of time that the program was running, in seconds, | 
|  | // since the last time a log was recorded, as measured using a client-side | 
|  | // clock implemented via TimeTicks, which guarantees that it is monotonic | 
|  | // and does not jump if the user changes their clock.  The TimeTicks | 
|  | // implementation also makes the clock not count time the computer is | 
|  | // suspended. | 
|  | optional int64 incremental_uptime_sec = 1; | 
|  |  | 
|  | // Total amount of time that the program was running, in seconds, | 
|  | // since startup, as measured using a client-side clock implemented | 
|  | // via TimeTicks, which guarantees that it is monotonic and does not | 
|  | // jump if the user changes their clock.  The TimeTicks implementation | 
|  | // also makes the clock not count time the computer is suspended. | 
|  | // This field was added for M-35. | 
|  | optional int64 uptime_sec = 23; | 
|  |  | 
|  | // Page loads along with renderer launches, crashes, hangs and failed | 
|  | // launches, since page load count roughly corresponds to usage. | 
|  | optional int32 page_load_count = 2; | 
|  | optional int32 renderer_crash_count = 3; | 
|  | optional int32 renderer_hang_count = 4; | 
|  | optional int32 renderer_failed_launch_count = 24; | 
|  | optional int32 renderer_launch_count = 26; | 
|  |  | 
|  | // Number of renderer launches, crashes and failed launches that were for | 
|  | // extensions. These are not counted in the renderer counts above. | 
|  | optional int32 extension_renderer_crash_count = 5; | 
|  | optional int32 extension_renderer_failed_launch_count = 25; | 
|  | optional int32 extension_renderer_launch_count = 27; | 
|  |  | 
|  | // Number of non-renderer child process crashes. | 
|  | optional int32 child_process_crash_count = 6; | 
|  |  | 
|  | // 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. | 
|  | // This will typically 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), and hence this value might be greater | 
|  | // than 1. | 
|  | optional int32 launch_count = 15; | 
|  | // The number of times that it didn't exit cleanly (which we assume to be | 
|  | // mostly crashes). | 
|  | optional int32 crash_count = 16; | 
|  |  | 
|  | // The number of times the program began, but did not complete, the shutdown | 
|  | // process.  (For example, this may occur when Windows is shutting down, and | 
|  | // it only gives the process a few seconds to clean up.) | 
|  | optional int32 incomplete_shutdown_count = 17; | 
|  |  | 
|  | // The number of times the program was able register with breakpad crash | 
|  | // services. | 
|  | optional int32 breakpad_registration_success_count = 18; | 
|  |  | 
|  | // The number of times the program failed to register with breakpad crash | 
|  | // services.  If crash registration fails then when the program crashes no | 
|  | // crash report will be generated. | 
|  | optional int32 breakpad_registration_failure_count = 19; | 
|  |  | 
|  | // The number of times the program has run under a debugger.  This should | 
|  | // be an exceptional condition.  Running under a debugger prevents crash | 
|  | // dumps from being generated. | 
|  | optional int32 debugger_present_count = 20; | 
|  |  | 
|  | // The number of times the program has run without a debugger attached. | 
|  | // This should be most common scenario and should be very close to | 
|  | // |launch_count|. | 
|  | optional int32 debugger_not_present_count = 21; | 
|  |  | 
|  | // Stability information for all installed plugins. | 
|  | message PluginStability { | 
|  | // The relevant plugin's information (name, etc.) | 
|  | optional Plugin plugin = 1; | 
|  |  | 
|  | // The number of times this plugin's process was launched. | 
|  | optional int32 launch_count = 2; | 
|  |  | 
|  | // The number of times this plugin was instantiated on a web page. | 
|  | // This will be >= |launch_count|. | 
|  | // (A page load with multiple sections drawn by this plugin will | 
|  | // increase this count multiple times.) | 
|  | optional int32 instance_count = 3; | 
|  |  | 
|  | // The number of times this plugin process crashed. | 
|  | // This value will be <= |launch_count|. | 
|  | optional int32 crash_count = 4; | 
|  |  | 
|  | // The number of times this plugin could not be loaded. | 
|  | optional int32 loading_error_count = 5; | 
|  | } | 
|  | repeated PluginStability plugin_stability = 22; | 
|  | } | 
|  | 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; | 
|  |  | 
|  | // 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 EOTFs. | 
|  | // 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 ChromeOS, Android or other clients. | 
|  | 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; | 
|  | } | 
|  | 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. | 
|  | // Consequently this should only be defined for clients that were installed | 
|  | // after the recording code was implemented. | 
|  | 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; | 
|  | } | 
|  | 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 AntiVirus products installed. | 
|  | // 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; | 
|  | } |