Missing ETP OFF state on the Privacy widget
Categories
(Firefox :: New Tab Page, defect, P3)
Tracking
()
| Tracking | Status | |
|---|---|---|
| firefox156 | --- | fixed |
People
(Reporter: csasca, Assigned: rhamoui)
References
(Blocks 1 open bug)
Details
(Whiteboard: [hnt])
Attachments
(2 files)
Affected versions
- Firefox 156.0a1 (2026-08-13)
Affected platforms
- Windows 11
- macOS 27
- Ubuntu 26.04
Preconditions
- Have some blocked trackers
Steps to reproduce
- Observe the widget number of trackers blocked
- Turn off the ETP in about:preferences#privacy
- Refresh the new tab page and see the privacy widget
Expected result
- A warning stating that ETP is OFF is shown and a prompt to redirect the user to enable it is available
Actual result
- The widget remains the same as before, showing the number of blocked trackers
Regression range
- New feature
Additional notes
- The issue can be seen in the attachment
Triage / fix plan (static analysis, not verified by running).
Root cause: the ETP-OFF state was never implemented — this isn't a state that regressed, it's one that has no code anywhere. The whole newtab tree has zero references to etp / trackingprotection / contentblocking outside a test-setup line, and no newtab-privacy-etp-off* Fluent string exists yet. Concretely, at all four layers:
- browser/extensions/newtab/lib/Widgets/PrivacyFeed.sys.mjs — the
ctxit hands the scheduler carries counts, totals, streak and feature flags, but no protection-enablement signal. - browser/extensions/newtab/lib/Widgets/PrivacyMessages.sys.mjs — the precedence ladder starts at EMPTY; there is no ETP-off rung and no such
CATEGORY. - browser/extensions/newtab/common/Reducers.sys.mjs —
INITIAL_STATE.PrivacyWidgethas no protection-state field. - browser/extensions/newtab/content-src/components/Widgets/Privacy/Privacy.jsx —
isEmptyState = trackersToday === 0andvariantare the only branches.
So with ETP off the widget keeps rendering today's already-recorded TrackingDB total unchanged, exactly as reported.
Proposed approach (feed-side, matching how every other privacy-widget signal already flows):
- In
PrivacyFeed, compute anetpEnabled/protectionsOffboolean by mirroring thenotBlockingcheck about:protections already uses — browser/components/protections/content/protections.mjs (cookieBehavior + tp/cryptomining/fingerprinting/socialtracking prefs). Notebrowser.contentblocking.category == "custom"alone is not sufficient — there is no"off"category. Read the prefs directly in the parent, as the widget already does forbrowser.ipProtection.enabledat PrivacyFeed.sys.mjs, and ship it on the existingWIDGETS_PRIVACY_UPDATEbroadcast (the reducer already spreads...action.data, so only the initial-state entry is needed). Add aServices.prefsobserver for those prefs so a live toggle updates without a restart — the currentPREF_CHANGEDpath only sees theactivity-stream.branch. - In
PrivacyMessages, add anETP_OFF_MESSAGEconstant outsidePRIVACY_MESSAGES(modelled onEMPTY_MESSAGE) withvariant: "etpOff", and return it before the EMPTY check so it outranks the zero state and every celebration. Give it anOPEN_PREFERENCES_PAGECTA (category: "privacy-trackingprotection") for the "turn it back on" prompt. Also wire it intoforcedResult()/variantForCategory()so QA can force it. - In
Privacy.jsx, make the render at Privacy.jsx a three-way (isEtpOff ? … : isEmptyState ? … : …) so the ETP-off card suppresses both the count block and the empty state; add anis-etp-offclass hook and style it next to.privacy-emptyin _Privacy.scss. - New strings in browser/locales/en-US/browser/newtab/newtab.ftl (warning +
-cta).
Worth auditing while there: the impression at Privacy.jsx would log an ETP-off view as an ordinary trackers_blocked = "none" day.
Tests: existing coverage is test/xpcshell/test_PrivacyFeed.js, test/jest/lib/Widgets/PrivacyMessages.test.js and test/jest/content-src/components/Widgets/Privacy.test.jsx. There is no browser-chrome coverage for this widget at all, so the new state should add cases to the three above.
Severity: S3 suggested — a new-feature state that is missing rather than broken; the count keeps rendering (misleading, but the user can still reach about:protections and about:preferences). Not cosmetic, but no crash, data loss, or blocked workflow. Nightly-only so far.
If you'd like to provide feedback on this comment, please use the 👍 or 👎 reaction.
If you want to categorize your feedback you can add one of the following tags: ai-triage-wrong-file, ai-triage-wrong-cause, ai-triage-hallucination, ai-triage-out-of-scope.
This use case wasn't included in the initial scope, so it won't be considered as a launch blocker. We'll address it in a post-launch iteration.
Updated•1 month ago
|
Updated•1 month ago
|
Less than 1% of Desktop FF have ETP completely turned off, downgrading priority.
| Assignee | ||
Comment 4•1 month ago
|
||
Updated•1 month ago
|
Backed out for causing newtab failures
Comment 9•26 days ago
|
||
| bugherder | ||
Comment 10•26 days ago
|
||
| bugherder | ||
| Assignee | ||
Updated•20 days ago
|
Updated•19 days ago
|
Description
•