What changed
Linux startup flags
- Adds VA-API command-line switches (
AcceleratedVideoDecodeLinuxGL,AcceleratedVideoEncoder,VaapiIgnoreDriverChecks) andenable-gpu-rasterizationat startup on Linux. Previously these were only set by the Nix flake's wrapper, so portable and Flatpak builds ran without them. Whether hardware decode actually engages depends on the host having a working libva + driver stack — verify viachrome://gpu. - Adds
--ozone-platform-hint=autoon Linux when no explicitozone-platformswitch was passed, so Chromium can pick Wayland or X11 fromWAYLAND_DISPLAYinstead of relying on the launcher. - Logs a warning if
powerSaveBlocker.isStarted()returns false afterstart(). Some Wayland compositors no-op the request silently.
MediaSession / MPRIS
- Installs
play,pause,seekbackward,seekforward,seekto, andstopaction handlers on the video element in the Shaka player wrapper. - Calls
navigator.mediaSession.setPositionStateon everytimeupdate(skipped for live streams where duration isInfinity). - Cleans these handlers up in
onBeforeUnmount. - Pre-existing metadata,
playbackState, andprevioustrack/nexttrackintegration is unchanged.
Tab system
- Idle suspension now unmounts the inner component (
v-if) instead of togglingdisplay: none(v-show). The previous behavior left Shaka, watchers, and timers running indefinitely. The route is preserved in Vuex, so reactivating an idle tab triggers a fresh remount and reload. - Normal tab switching (between non-idle tabs) still uses
v-showto preserve component state. resolvedComponentCacheinTabContent.vueis now an LRU bounded at 50 entries; previously it grew without eviction.persistTabsretry logic replaced:persistRetriedboolean →persistAttemptCount+ exponential backoff schedule (200ms,500ms,1000ms, give up after 3). On giveup, surfaces a toast viahelpers/utils.showToast.persistTabsImmediateis nowasyncandawaits the upsert sobeforeunloadcallers can wait on it.
Tab bar
- Wheel handler in
FtTabBar.vuenow coalescesdeltaYinto a singlerequestAnimationFramecallback per frame instead of mutatingscrollLeftonce per wheel tick.
Security / IPC
dbTabsIPC: preload now checks the action against anALLOWED_TAB_DB_ACTIONSset before invoking. Defense in depth — the main handler already had a switch-default reject. Payload shape normalized to{action, data}to match the other db handlers.setPermissionCheckHandlernow rejects whendetails.embeddingOriginis set and is not a FreeTube URL.setPermissionRequestHandlernow rejects whendetails.requestingUrlis set and is not a FreeTube URL.
Flatpak manifest
- Adds explicit
--talk-name=org.freedesktop.portal.{Desktop,OpenURI,FileChooser,Settings}tofinish-args. - Inline comment block describing the steps needed to migrate from "unpack release zip" to "build from source" using
flatpak-node-generator.flake.nixis the working build reference.