diff options
Diffstat (limited to 'toolkit/components/extensions/schemas/telemetry.json')
-rw-r--r-- | toolkit/components/extensions/schemas/telemetry.json | 469 |
1 files changed, 469 insertions, 0 deletions
diff --git a/toolkit/components/extensions/schemas/telemetry.json b/toolkit/components/extensions/schemas/telemetry.json new file mode 100644 index 0000000000..da8587f7e7 --- /dev/null +++ b/toolkit/components/extensions/schemas/telemetry.json @@ -0,0 +1,469 @@ +[ + { + "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 <code>browser.telemetry</code> 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 <code>nsITelemetry.SCALAR_TYPE_*</code>." + }, + { + "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 <code>submitExternalPing</code> 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." + } + ] + } + ] + } +] |