Source code
Revision control
Copy as Markdown
Other Tools
# 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 <pingsender>`.
`toolkit.telemetry.shutdownPingSender.enabledFirstSession`
Allow the `shutdown` ping to be sent using the {doc}`ping sender <pingsender>` 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.