iachat/app/javascript/dashboard/i18n/locale
Muhsin Keloth a4c3d3d8c0
feat(widget): Allow widget loading in mobile app WebViews when domain restrictions are set (#13763)
When `allowed_domains` is configured on a web widget inbox, the server
responds with Content-Security-Policy: frame-ancestors <domains>, which
blocks the widget iframe in mobile app WebViews. This happens because
WebViews load content from file:// or null origins, which cannot match
any domain in the frame-ancestors directive.

This adds a per-inbox toggle — "Enable widget in mobile apps" — that
skips the frame-ancestors header when the request has no valid Origin
(i.e., it comes from a mobile WebView). Web browsers with a real origin
still get domain restrictions enforced as usual.

<img width="2330" height="1490" alt="CleanShot 2026-03-11 at 10 13
01@2x"
src="https://github.com/user-attachments/assets/d9326fac-020d-4ce7-9ced-0c185468c8fc"
/>


Fixes
https://linear.app/chatwoot/issue/CW-6560/widget-is-not-loading-from-iosandroid-widgets

How to test

1. Go to Settings → Inboxes → (Web Widget) → Configuration
2. Set allowed_domains to a specific domain (e.g., *.example.com)
3. Try loading the widget in a mobile app WebView — it should be blocked
4. Enable "Enable widget in mobile apps" checkbox
5. Reload the widget in the WebView — it should now load successfully
6. Verify the widget on a website not in the allowed domains list is
still blocked

---------

Co-authored-by: iamsivin <iamsivin@gmail.com>
2026-03-17 14:29:41 +04:00
..
am chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ar chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
az chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
bg chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
bn chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ca chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
cs chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
da chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
de chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
el chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
en feat(widget): Allow widget loading in mobile app WebViews when domain restrictions are set (#13763) 2026-03-17 14:29:41 +04:00
es chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
et chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
fa chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
fi chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
fr chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
he chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
hi chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
hr chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
hu chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
hy chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
id chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
is chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
it chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ja chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ka chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ko feat(i18n): complete Korean (ko) translations to 100% coverage (#13583) 2026-03-16 16:54:26 -07:00
lt chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
lv chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ml chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ms chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ne chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
nl chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
no chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
pl chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
pt chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
pt_BR chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ro chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ru chore(i18n): update Russian translations (#13405) 2026-03-16 16:10:16 -07:00
sh chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
sk chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
sl chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
sq chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
sr chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
sv chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ta chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
th chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
tl chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
tr chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
uk chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ur chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
ur_IN chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
vi chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
zh chore: Update translations, add pnpm sync:i18n command (#10893) 2025-02-12 17:43:46 -08:00
zh_CN chore: Update translations (#13227) 2026-03-16 15:44:32 -07:00
zh_TW fix(i18n): complete zh_TW locale coverage (#13792) 2026-03-16 18:47:22 -07:00