feat(browser): load optional MV3 extensions#7

open6
feat/user-browser-profiles
feat/browser-extensions
opened21d agobyAAlex
View on GitHubTwo-way sync enabledPR last imported 1d ago

Summary

  • add optional operator-configured unpacked MV3 assets through BROWSER_EXTENSION_PATHS; empty configuration keeps extensions disabled
  • validate paths/manifests and Chromium compatibility before Discord login; branded Chrome's unsupported loading switches fail explicitly
  • stage read-only official assets in the exclusively leased user's writable private cache, preserving stable paths and that user's extension settings
  • document pinned SponsorBlock and uBlock Origin Lite releases, checksums, read-only mounts and manual profile configuration; startup downloads no extension code

Stacking

feat/user-browser-profiles ← feat/browser-extensions. Depends on #6 (mandatory claims/profiles), after #1 → #2 → #3 → #4 → #5. YouTube TV sponsor skipping is a separate child PR #8; the official SponsorBlock extension covers the desktop player. No browser preview is ported.

Verification

  • npm test: final full stack: 163/163 on macOS and Fedora/Node 22
  • actual Chromium 154 enabled official SponsorBlock 5.7 and uBlock Origin Lite 2026.1006.1931 from immutable source mounts
  • desktop YouTube sponsor segment 10.172–15.564 automatically skipped; ad-resource fixture blocked with uBOL and loaded in disabled control
  • same-user extension storage/IDs survived restart; a different profile had separate storage
  • production direct FFmpeg arguments captured H264 1280×720 plus Opus with active browser audio
  • unmocked production initDriver loaded all three assets from read-only mounts, retained settings/IDs for the returning owner and kept another owner's settings empty; every close verified browser PID exit, audio inputs empty and lease release
  • direct Opus 5.5 High review on NB-LVLQYQ1F3D: no findings at b658a6ca619ceae656cfc4f466318f7f2a72c5f5

Limits

MV3 only; uBlock Origin Lite differs from full uBlock Origin. Extension permissions are operator-approved code and assets remain a deployment responsibility. Blocking a known fixture does not guarantee every site's ads are blocked. Existing media logins are not imported, and the live user stream was not restarted.

Checks

1 successful
All checks passed
a837a70

Added 4 commits

  • feat(browser): integrate extension staging with personal profiles342cb79
  • feat(browser): load optional MV3 extensions84a0bb1
  • fix(browser): carry profile startup and shutdown checks into extension stackb658a6c
  • fix(web): carry claim consent layout into extension stackd99b692
Synced from GitHub

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 00ccea48-2837-4908-8dae-428e1a15b036

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Synced from GitHub
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Added 2 commits

  • chore(git): align PR #7 with squashed parent history8eedede
  • Merge branch 'feat/user-browser-profiles' into feat/browser-extensionsa837a70