Let selected settings be overridden per website, layered over the global config for the current page. Build the host-keyed plumbing once; each setting opts in.
Design
- Host-keyed override config (e.g.
[sites."example.com"] holding a subset of keys; missing keys fall back to global)
- Resolve by navigated host and layer over the global config for that page
- Add/edit a site override in the UI (page menu / settings sub-view)
Overridable settings
- Experimental features (first) — preset / per-feature;
[experimental] already shaped to grow a sites sub-table; reuses engine::set_experimental_prefs on navigation
- User agent — force desktop/mobile per site (global pref → re-apply on navigation)
- Page zoom — per-site zoom (per-webview
set_page_zoom)
- Ad blocker on/off — per-site allowlist (delegate sees each load's host)
- Data saving — per-site
block_images/media/fonts + max_images_per_page (delegate host check)
- Record history — per-site "don't log" (maybe)
Notes: per-webview settings (zoom) and per-load host checks (adblock, data-saving) are natural per-site; global Servo prefs (UA, experimental) re-apply on navigation.
Let selected settings be overridden per website, layered over the global config for the current page. Build the host-keyed plumbing once; each setting opts in.
Design
[sites."example.com"]holding a subset of keys; missing keys fall back to global)Overridable settings
[experimental]already shaped to grow asitessub-table; reusesengine::set_experimental_prefson navigationset_page_zoom)block_images/media/fonts+max_images_per_page(delegate host check)Notes: per-webview settings (zoom) and per-load host checks (adblock, data-saving) are natural per-site; global Servo prefs (UA, experimental) re-apply on navigation.