nextcloud / nextcloud/richdocuments
[Bug] Accessibility/Screen Reader setting (UseATSupport) not persisted — no server-side write endpoint for userconfig
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 453
- Forks
- 147
- Avg merge
- 14h 54m
- Merged PRs (30d)
- 83
Description
Describe the bug
The "Screen reader support" / "Use Assistive Technology" checkbox in Collabora Online (accessible via Help → Accessibility, or Tools → Options depending on UI mode) cannot be persistently saved. It resets to unchecked on every new document session.
Environment
- Nextcloud version: 33.0.0.16
- richdocuments version: 10.1.2
- Collabora Online (AIO): 25.04.8.3 (
ghcr.io/nextcloud-releases/aio-collabora:latest) - Deployment: Nextcloud AIO on Docker (OpenMediaVault host)
accessibility.enable=trueset viaCOLLABORA_ENVenvironment variable ✓
Steps to reproduce
- Set
accessibility.enable=trueon the Collabora server (viaextra_paramsorcoolwsd.xml) - Open any document in Nextcloud Office
- Enable the screen reader / accessibility checkbox in the UI (Help → Accessibility)
- Close and reopen the document
- Observe: the checkbox is unchecked again
Expected behavior
The accessibility preference is saved per user and restored on next session.
Actual behavior
The setting resets on every new session. Investigation of Nextcloud logs (with loglevel=1) reveals:
"method":"GET","url":"/apps/richdocuments/wopi/settings?access_token=...&fileId=-1&type=userconfig"
Collabora sends only GET requests to /wopi/settings?type=userconfig — it reads user config, but there is no corresponding POST from Collabora to save the UseATSupport preference back to the server. There is also no POST handler for user settings in richdocuments for this type.
Additionally, because Collabora runs in an iFrame from the same origin as Nextcloud in AIO, modern browsers restrict cross-origin localStorage access, so the browser-side storage of this preference is also unreliable and does not survive across sessions.
Root cause analysis
There is a fundamental architectural gap:
accessibility.enable=trueincoolwsd.xmlenables the feature server-wide ✓- The user must then individually activate it via the UI checkbox
- Collabora stores this checkbox state in the iFrame's
localStorageonly — there is no WOPI write-back forUseATSupportpreference localStoragein a cross-origin iFrame context is blocked or cleared by browser privacy protections (Firefox ETP, Safari ITP, Chrome Privacy Sandbox)- Result: the setting never survives a new document session
Proposed solution
One or more of the following should be implemented:
-
Server-side persistence via WOPI: Collabora should POST the
UseATSupport(and other per-user preferences) to/wopi/settings?type=userconfig, and richdocuments should implement a POST handler that stores these preferences per user in Nextcloud's user preferences table (oc_preferences) -
Admin-enforced default: An admin-level
coolwsd.xmloption such asaccessibility.force_enable=truethat activates screen reader mode for all sessions without requiring per-user opt-in -
Same-origin iFrame: If Collabora were served from the same origin as Nextcloud (as is already the case in AIO via the built-in proxy),
localStorageshould in principle work — but the version mismatch warnings (/browser/dist/instead of/browser/<hash>/) suggest the JS loading pipeline has issues that may also affect storage reliability
Additional context
Related log entries from Collabora container:
WRN Client - server version mismatch, disabling browser cache. Expected: 0de01f3f02; Actual URI path with version hash: /browser/dist/fetch-settings-config
ERR Invalid socket while sending wopi settings config from wopiHost[http://nextcloud-aio-apache:23973/apps/richdocuments/wopi/settings?access_token=...&fileId=-1&type=userconfig]
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the /apps/richdocuments/wopi/settings?type=userconfig endpoint and checking how existing settings requests are handled. Investigate the UseATSupport preference and the reported localStorage behavior; done should mean the per-user accessibility setting is saved and restored in a new document session.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- accessibility, backend-api-design
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100