[ { "namespace": "manifest", "types": [ { "$extend": "WebExtensionManifest", "properties": { "telemetry": { "type": "object", "optional": true, "additionalProperties": { "$ref": "UnrecognizedProperty" }, "properties": { "ping_type": { "type": "string" }, "schemaNamespace": { "type": "string" }, "public_key": { "type": "object", "properties": { "id": { "type": "string" }, "key": { "type": "object", "properties": { "crv": { "type": "string", "optional": "false" }, "kty": { "type": "string", "optional": "false" }, "x": { "type": "string", "optional": "false" }, "y": { "type": "string", "optional": "false" } } } } }, "study_name": { "type": "string", "optional": true }, "pioneer_id": { "type": "boolean", "optional": true, "default": false } } } } }, { "$extend": "PermissionPrivileged", "choices": [ { "type": "string", "enum": ["telemetry"] } ] } ] }, { "namespace": "telemetry", "description": "Use the browser.telemetry API to send telemetry data to the Mozilla Telemetry service. Restricted to Mozilla privileged webextensions.", "types": [ { "id": "ScalarType", "type": "string", "enum": ["count", "string", "boolean"], "description": "Type of scalar: 'count' for numeric values, 'string' for string values, 'boolean' for boolean values. Maps to nsITelemetry.SCALAR_TYPE_*." }, { "id": "ScalarData", "type": "object", "description": "Represents registration data for a Telemetry scalar.", "properties": { "kind": { "$ref": "ScalarType" }, "keyed": { "type": "boolean", "optional": true, "default": false, "description": "True if this is a keyed scalar." }, "record_on_release": { "type": "boolean", "optional": true, "default": false, "description": "True if this data should be recorded on release." }, "expired": { "type": "boolean", "optional": true, "default": false, "description": "True if this scalar entry is expired. This allows recording it without error, but it will be discarded." } } }, { "id": "EventData", "type": "object", "description": "Represents registration data for a Telemetry event.", "properties": { "methods": { "type": "array", "items": { "type": "string" }, "description": "List of methods for this event entry." }, "objects": { "type": "array", "items": { "type": "string" }, "description": "List of objects for this event entry." }, "extra_keys": { "type": "array", "items": { "type": "string" }, "description": "List of allowed extra keys for this event entry." }, "record_on_release": { "type": "boolean", "optional": true, "default": false, "description": "True if this data should be recorded on release." }, "expired": { "type": "boolean", "optional": true, "default": false, "description": "True if this event entry is expired. This allows recording it without error, but it will be discarded." } } } ], "permissions": ["telemetry"], "functions": [ { "name": "submitPing", "type": "function", "description": "Submits a custom ping to the Telemetry back-end. See submitExternalPing inside TelemetryController.sys.mjs for more details.", "async": true, "parameters": [ { "name": "type", "type": "string", "pattern": "^[a-z0-9][a-z0-9-]+[a-z0-9]$", "description": "The type of the ping." }, { "name": "message", "type": "object", "additionalProperties": { "type": "any" }, "description": "The data payload for the ping." }, { "description": "Options object.", "name": "options", "type": "object", "properties": { "addClientId": { "type": "boolean", "optional": true, "default": false, "description": "True if the ping should contain the client id." }, "addEnvironment": { "type": "boolean", "optional": true, "default": false, "description": "True if the ping should contain the environment data." }, "overrideEnvironment": { "type": "object", "additionalProperties": { "type": "any" }, "optional": true, "default": false, "description": "Set to override the environment data." }, "usePingSender": { "type": "boolean", "optional": true, "default": false, "description": "If true, send the ping using the PingSender." } } } ] }, { "name": "submitEncryptedPing", "type": "function", "description": "Submits a custom ping to the Telemetry back-end, with an encrypted payload. Requires a telemetry entry in the manifest to be used.", "parameters": [ { "name": "message", "type": "object", "additionalProperties": { "type": "any" }, "description": "The data payload for the ping, which will be encrypted." }, { "description": "Options object.", "name": "options", "type": "object", "properties": { "schemaName": { "type": "string", "optional": false, "description": "Schema name used for payload." }, "schemaVersion": { "type": "integer", "optional": false, "description": "Schema version used for payload." } } } ], "async": true }, { "name": "canUpload", "type": "function", "description": "Checks if Telemetry upload is enabled.", "parameters": [], "async": true }, { "name": "scalarAdd", "type": "function", "description": "Adds the value to the given scalar.", "async": true, "parameters": [ { "name": "name", "type": "string", "description": "The scalar name." }, { "name": "value", "type": "integer", "minimum": 1, "description": "The numeric value to add to the scalar. Only unsigned integers supported." } ] }, { "name": "scalarSet", "type": "function", "description": "Sets the named scalar to the given value. Throws if the value type doesn't match the scalar type.", "async": true, "parameters": [ { "name": "name", "type": "string", "description": "The scalar name" }, { "name": "value", "description": "The value to set the scalar to", "choices": [ { "type": "string" }, { "type": "boolean" }, { "type": "integer" }, { "type": "object", "additionalProperties": { "type": "any" } } ] } ] }, { "name": "scalarSetMaximum", "type": "function", "description": "Sets the scalar to the maximum of the current and the passed value", "async": true, "parameters": [ { "name": "name", "type": "string", "description": "The scalar name." }, { "name": "value", "type": "integer", "minimum": 0, "description": "The numeric value to set the scalar to. Only unsigned integers supported." } ] }, { "name": "keyedScalarAdd", "type": "function", "description": "Adds the value to the given keyed scalar.", "async": true, "parameters": [ { "name": "name", "type": "string", "description": "The scalar name" }, { "name": "key", "type": "string", "description": "The key name" }, { "name": "value", "type": "integer", "minimum": 1, "description": "The numeric value to add to the scalar. Only unsigned integers supported." } ] }, { "name": "keyedScalarSet", "type": "function", "description": "Sets the keyed scalar to the given value. Throws if the value type doesn't match the scalar type.", "async": true, "parameters": [ { "name": "name", "type": "string", "description": "The scalar name." }, { "name": "key", "type": "string", "description": "The key name." }, { "name": "value", "description": "The value to set the scalar to.", "choices": [ { "type": "string" }, { "type": "boolean" }, { "type": "integer" }, { "type": "object", "additionalProperties": { "type": "any" } } ] } ] }, { "name": "keyedScalarSetMaximum", "type": "function", "description": "Sets the keyed scalar to the maximum of the current and the passed value", "async": true, "parameters": [ { "name": "name", "type": "string", "description": "The scalar name." }, { "name": "key", "type": "string", "description": "The key name." }, { "name": "value", "type": "integer", "minimum": 0, "description": "The numeric value to set the scalar to. Only unsigned integers supported." } ] }, { "name": "recordEvent", "type": "function", "description": "Record an event in Telemetry. Throws when trying to record an unknown event.", "async": true, "parameters": [ { "name": "category", "type": "string", "description": "The category name." }, { "name": "method", "type": "string", "description": "The method name." }, { "name": "object", "type": "string", "description": "The object name." }, { "name": "value", "type": "string", "optional": true, "description": "An optional string value to record." }, { "name": "extra", "type": "object", "optional": true, "description": "An optional object of the form (string -> string). It should only contain registered extra keys.", "additionalProperties": { "type": "string" } } ] }, { "name": "registerScalars", "type": "function", "description": "Register new scalars to record them from addons. See nsITelemetry.idl for more details.", "async": true, "parameters": [ { "name": "category", "type": "string", "description": "The unique category the scalars are registered in." }, { "name": "data", "type": "object", "additionalProperties": { "$ref": "ScalarData" }, "description": "An object that contains registration data for multiple scalars. Each property name is the scalar name, and the corresponding property value is an object of ScalarData type." } ] }, { "name": "registerEvents", "type": "function", "description": "Register new events to record them from addons. See nsITelemetry.idl for more details.", "async": true, "parameters": [ { "name": "category", "type": "string", "description": "The unique category the events are registered in." }, { "name": "data", "type": "object", "additionalProperties": { "$ref": "EventData" }, "description": "An object that contains registration data for 1+ events. Each property name is the category name, and the corresponding property value is an object of EventData type." } ] }, { "name": "setEventRecordingEnabled", "type": "function", "description": "Enable recording of events in a category. Events default to recording disabled. This allows to toggle recording for all events in the specified category.", "async": true, "parameters": [ { "name": "category", "type": "string", "description": "The category name." }, { "name": "enabled", "type": "boolean", "description": "Whether recording is enabled for events in that category." } ] } ] } ]