# Preferences and Defines Telemetry behaviour is controlled through the mozconfig defines and preferences listed here. ## mozconfig Defines `MOZ_TELEMETRY_REPORTING` When Defined (which it is for official builds): - If `RELEASE_OR_BETA` is not defined, defines `MOZ_TELEMETRY_ON_BY_DEFAULT` When Not Defined: - If `datareporting.healthreport.uploadEnabled` is locked, we print a message in the Privacy settings that you cannot turn on data submission and disabled the checkbox so you don't try. - Android: hides the data submission UI to prevent users from thinking they can turn it on - Disables Telemetry from being sent (due to `Telemetry::IsOfficialTelemetry`) `MOZ_TELEMETRY_ON_BY_DEFAULT` When Defined: - Android: enables `toolkit.telemetry.enabled` `MOZ_SERVICES_HEALTHREPORT` When Defined (which it is on most platforms): - Sets `datareporting.healthreport.{infoURL|uploadEnabled}` in `modules/libpref/init/all.js`. `MOZ_DATA_REPORTING` When Defined (which it is when `MOZ_TELEMETRY_REPORTING`, `MOZ_SERVICES_HEALTHREPORT`, or `MOZ_CRASHREPORTER` is defined (so, on most platforms, but not typically on developer builds)): - Enables `app.shield.optoutstudies.enabled` When Not Defined: - Disables `app.shield.optoutstudies.enabled` - Removes parts of the Data Collection Preferences UI in `privacy.xhtml` `MOZILLA_OFFICIAL` When Not Defined (defined on our own external builds and builds from several Linux distros, but not typically on defeloper builds): - Disables Telemetry from being sent (due to `Telemetry::IsOfficialTelemetry`) `MOZ_UPDATE_CHANNEL` When not `release` or `beta`: - If `MOZ_TELEMETRY_REPORTING` is also defined, defines `MOZ_TELEMETRY_ON_BY_DEFAULT` When `beta`: - If `toolkit.telemetry.enabled` is otherwise unset at startup, `toolkit.telemetry.enabled` is defaulted to `true` (this is irrespective of `MOZ_TELEMETRY_REPORTING`) When `nightly` or `aurora` or `beta` or `default`: - Desktop: Locks `toolkit.telemetry.enabled` to `true`. All other values for `MOZ_UPDATE_CHANNEL` on Desktop locks `toolkit.telemetry.enabled` to `false`. - Desktop: Defaults `Telemetry::CanRecordExtended` (and, thus `Telemetry::CanRecordReleaseData`) to `true`. All other values of `MOZ_UPDATE_CHANNEL` on Desktop defaults these to `false`. `DEBUG` When Defined: - Disables Telemetry from being sent (due to `Telemetry::IsOfficialTelemetry`) **In Short:** For builds downloaded from mozilla.com `MOZ_TELEMETRY_REPORTING` is defined, `MOZ_TELEMETRY_ON_BY_DEFAULT` is on if you downloaded Nightly or Developer Edition, `MOZ_SERVICES_HEALTHREPORT` is defined, `MOZ_DATA_REPORTING` is defined, `MOZILLA_OFFICIAL` is defined, `MOZ_UPDATE_CHANNEL` is set to the channel you downloaded, and `DEBUG` is false. This means Telemetry is, by default, collecting some amount of information and is sending it to Mozilla. For builds you make yourself with a blank mozconfig, `MOZ_UPDATE_CHANNEL` is set to `default` and everything else is undefined. This means Telemetry is, by default, collecting an extended amount of information but isn't sending it anywhere. ## Preferences `toolkit.telemetry.unified` This controls whether unified behavior is enabled. If true: - Telemetry is always enabled and recording *base* data. - Telemetry will send additional `main` pings. It defaults to `true`, but is `false` on Android (Fennec) builds. `toolkit.telemetry.enabled` If `unified` is off, this controls whether the Telemetry module is enabled. It can be set or unset via the `Preferences` dialog in Firefox for Android (Fennec). If `unified` is on, this is locked to `true` if `MOZ_UPDATE_CHANNEL` is `nightly` or `aurora` or `beta` or `default` (which is the default value of `MOZ_UPDATE_CHANNEL` for developer builds). Otherwise it is locked to `false`. This controls a diminishing number of things and is intended to be deprecated, and then removed. `datareporting.healthreport.uploadEnabled` If `unified` is true, this controls whether we send Telemetry data. If `unified` is false, we don't use this value. `toolkit.telemetry.archive.enabled` Allow pings to be archived locally. This can only be enabled if `unified` is on. `toolkit.telemetry.server` The server Telemetry pings are sent to. Change requires restart. `toolkit.telemetry.log.level` This sets the Telemetry logging verbosity per `Log.sys.mjs`. The available levels, in descending order of verbosity, are `Trace`, `Debug`, `Config`, `Info`, `Warn`, `Error` and `Fatal` with the default being `Warn`. By default logging goes only the console service. `toolkit.telemetry.log.dump` Sets whether to dump Telemetry log messages to `stdout` too. `toolkit.telemetry.shutdownPingSender.enabled` Allow the `shutdown` ping to be sent when the browser shuts down, from the second browsing session on, instead of the next restart, using the {doc}`ping sender `. `toolkit.telemetry.shutdownPingSender.enabledFirstSession` Allow the `shutdown` ping to be sent using the {doc}`ping sender ` from the first browsing session. `toolkit.telemetry.firstShutdownPing.enabled` Allow a duplicate of the `main` shutdown ping from the first browsing session to be sent as a separate `first-shutdown` ping. `toolkit.telemetry.newProfilePing.enabled` Enable the {doc}`../data/new-profile-ping` on new profiles. `toolkit.telemetry.newProfilePing.delay` Controls the delay after which the {doc}`../data/new-profile-ping` is sent on new profiles. `toolkit.telemetry.updatePing.enabled` Enable the {doc}`../data/update-ping` on browser updates. `toolkit.telemetry.eventping.minimumFrequency` The minimum frequency at which an {doc}`../data/event-ping` will be sent. Default is 60 (minutes). `toolkit.telemetry.eventping.maximumFrequency` The maximum frequency at which an {doc}`../data/event-ping` will be sent. Default is 10 (minutes). `toolkit.telemetry.overrideUpdateChannel` Override the `channel` value that is reported via Telemetry. This is useful for distinguishing different types of builds that otherwise still report as the same update channel. `toolkit.telemetry.ipcBatchTimeout` How long, in milliseconds, we batch accumulations from child processes before sending them to the parent process. Default is 2000 (milliseconds). ## Data-choices notification `toolkit.telemetry.reportingpolicy.firstRun` This preference is not present until the first run. After, its value is set to false. This is used to show the infobar with a more aggressive timeout if it wasn't shown yet. `datareporting.policy.firstRunURL` If set, a browser tab will be opened on first run instead of the infobar. `datareporting.policy.dataSubmissionEnabled` This is the data submission master kill switch. If disabled, no policy is shown or upload takes place, ever. `datareporting.policy.dataSubmissionPolicyNotifiedTime` Records the date user was shown the policy. This preference is also used on Android. `datareporting.policy.dataSubmissionPolicyAcceptedVersion` Records the version of the policy notified to the user. This preference is also used on Android. `datareporting.policy.dataSubmissionPolicyBypassNotification` Used in tests, it allows to skip the notification check. `datareporting.policy.currentPolicyVersion` Stores the current policy version, overrides the default value defined in TelemetryReportingPolicy.sys.mjs. `datareporting.policy.minimumPolicyVersion` The minimum policy version that is accepted for the current policy. This can be set per channel. `datareporting.policy.minimumPolicyVersion.channel-NAME` This is the only channel-specific version that we currently use for the minimum policy version. % The data-choices notification preferences (``datareporting.policy.*``) and % their associated code paths represent the legacy telemetry data submission % policy flow and are slated for deprecation. The newer Terms of Use % notification flow (``termsofuse.*`` preferences) described below is now the % primary mechanism for managing user consent and will be the supported path % going forward. ## Terms of Use notification `termsofuse.acceptedDate` Records the stringified timestamp (ms since epoch) when the user accepted the Terms of Use. `termsofuse.acceptedVersion` Records the version number of the Terms of Use that the user accepted. `termsofuse.minimumVersion` The minimum Terms of Use version the user must have accepted to skip re-notification. `termsofuse.currentVersion` Stores the current Terms of Use version, overrides the default value defined in TelemetryReportingPolicy.sys.mjs. `termsofuse.bypassNotification` If true, suppresses showing the Terms of Use flow (used for tests or explicit bypass). ## Testing The following prefs are for testing purpose only. `toolkit.telemetry.initDelay` Delay before initializing telemetry (seconds). `toolkit.telemetry.minSubsessionLength` Minimum length of a telemetry subsession and throttling time for common environment changes (seconds). `toolkit.telemetry.collectInterval` Minimum interval between data collection (seconds). `toolkit.telemetry.scheduler.tickInterval` Interval between scheduler ticks (seconds). `toolkit.telemetry.scheduler.idleTickInterval` Interval between scheduler ticks when the user is idle (seconds). `toolkit.telemetry.idleTimeout` Timeout until we decide whether a user is idle or not (seconds). `toolkit.telemetry.send.overrideOfficialCheck` If true, allows sending pings on unofficial builds. Requires a restart. `toolkit.telemetry.testing.overridePreRelease` If true, allows recording opt-in Telemetry on the Release channel. Requires a restart. `toolkit.telemetry.untrustedModulesPing.frequency` Interval, in seconds, between "untrustedModules" ping transmissions. `toolkit.telemetry.healthping.enabled` If false, sending health pings is disabled. Defaults to true. `toolkit.telemetry.testing.disableFuzzingDelay` If true, ping sending is not delayed when sending between 0am and 1am local time. `toolkit.telemetry.testing.overrideProductsCheck` If true, allow all probes to be recorded no matter what the current product is.